相关疑难解决方法(0)

解码iPhone GPU上的视频帧

我正在寻找解码iPhone上本地mpeg-4视频帧的最快方法.我只是对每10帧中像素的亮度值感兴趣.我不需要在任何地方渲染视频.

我已经尝试过ffmpeg,AVAssetReader,ImageAssetGenerator,OpenCV和MPMoviePlayer,但它们都太慢了.我能得到的最快速度是2倍(一分钟内扫描2分钟).我想要接近10倍的东西.

假设我上面的尝试没有使用GPU,有没有办法用GPU上运行的东西来实现我的目标?OpenGL似乎主要用于渲染输出,但我已经看到它用作传入视频的过滤器.也许这是一个选择?

提前致谢!

iphone gpgpu opengl-es video-processing ios

15
推荐指数
1
解决办法
6918
查看次数

iOS GLSL.有没有办法使用GLSL着色器创建图像直方图?

在StackOverflow的其他地方,有人询问深度缓冲直方图 - 使用GLSL创建深度缓冲直方图纹理.

我正在编写一个iOS图像处理应用程序,并对此问题很感兴趣,但对提供的答案不清楚.那么,是否可以通过GLSL使用GPU创建图像直方图?

image-processing glsl histogram ios

13
推荐指数
2
解决办法
1万
查看次数

如何在iPhone上录制像Talking Tom Cat这样的屏幕视频?

我想知道AVFoundation中是否有任何公共API或任何其他可用于记录屏幕的框架,如Talking Tom Cat.我查看了AVFoundation和CoreVideo框架,但无法从头文件中找到任何内容.

如果有人知道如何使用iPhone SDK以电子方式录制屏幕视频,请告诉我.

iphone avfoundation ios4

12
推荐指数
1
解决办法
9614
查看次数

OpenGL ES 2d渲染成图像

我需要在iOS上编写OpenGL ES二维渲染器.它应该将一些原始元素(如线和多边形)绘制到2d图像中(它将呈现矢量图).哪种方式最适合从该任务中获取OpenGL上下文中的图像?我的意思是,我应该将这些基元渲染成纹理,然后从中获取图像,或者是什么?此外,如果有人提供看起来像我需要的示例或教程(2d GL渲染到图像中),那将是很棒的.提前致谢!

iphone rendering image opengl-es ios

7
推荐指数
1
解决办法
8069
查看次数

像素格式,CVPixelBufferRefs和glReadPixels

我正在使用glReadPixels将数据读入CVPixelBufferRef.我用它CVPixelBufferRef作为输入AVAssetWriter.不幸的是,像素格式似乎不匹配.

我认为glReadPixels返回RGBA格式的AVAssetWriter像素数据,同时想要ARGB格式的像素数据.将RGBA转换为ARGB的最佳方法是什么?

这是我到目前为止所尝试的:

  • 沿argb =(rgba >> 8)|行的位操作 (rgba << 24)
  • 使用a CGImageRef作为中间步骤

位操作不起作用,因为CVPixelBufferRef似乎不支持下标.该CGImageRef中间步骤做的工作......但我不希望有代码50条额外的线路,有可能正影响性能.

glreadpixels ios avassetwriter

6
推荐指数
2
解决办法
7011
查看次数

使用OpenGL ES纹理缓存而不是glReadPixels来获取纹理数据

在iOS 5中,引入了OpenGL ES Texture缓存,以提供从摄像机视频数据到OpenGL的直接方式,而无需复制缓冲区.会话414中简要介绍了纹理缓存--Windows 2011中iOS 5的OpenGL ES的进展.

我发现了一篇有趣的文章,最后进一步滥用了这个概念,并glReadPixels通过简单地锁定纹理,然后直接访问缓冲区来绕过调用.

glReadPixels由于iPad 2中使用的基于图块的渲染器(即使只使用1x1纹理),因此速度非常慢.但是,所描述的方法似乎处理得比glReadPixels.

文章中提出的方法是否有效,是否可以用于提升依赖的应用程序glReadPixels

由于OpenGL与CPU并行处理图形数据,因此在CVPixelBufferLockBaseAddress不与OpenGL交谈的情况下,如何在完成渲染时知道调用?

glreadpixels core-video ios opengl-es-2.0

5
推荐指数
1
解决办法
5108
查看次数

从 SCNView 录制视频的最快方法

我有 SCNView,屏幕中间有一些对象,用户可以旋转它、缩放等。

我想在视频中记录所有这些动作并实时添加一些声音。另外,我只想记录SCNView的中间部分(例如SCNView框架是375x812,但我只想中间375x375,没有顶部和底部边框)。我还想在视频捕获的同时将其显示在屏幕上。

我当前的变体是:

func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {
    DispatchQueue.main.async {
        if let metalLayer = self.sceneView.layer as? CAMetalLayer, let texture = metalLayer.currentSceneDrawable?.texture, let pixelBufferPool = self.pixelBufferPool {
            //1
            var maybePixelBuffer: CVPixelBuffer? = nil
            let status  = CVPixelBufferPoolCreatePixelBuffer(nil, pixelBufferPool, &maybePixelBuffer)

            guard let pixelBuffer = maybePixelBuffer else { return }

            CVPixelBufferLockBaseAddress(pixelBuffer, [])

            let bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer)
            let region = MTLRegionMake2D(Int(self.fieldOfView.origin.x * UIScreen.main.scale),
                                         Int(self.fieldOfView.origin.y * UIScreen.main.scale),
                                         Int(self.fieldOfView.width * UIScreen.main.scale),
                                         Int(self.fieldOfView.height * UIScreen.main.scale))

            let pixelBufferBytes = CVPixelBufferGetBaseAddress(pixelBuffer)!
            texture.getBytes(pixelBufferBytes, …
Run Code Online (Sandbox Code Playgroud)

ios avassetwriter scenekit metal cvpixelbuffer

5
推荐指数
1
解决办法
1069
查看次数

将纹理复制到PixelBuffer(CVPixelBufferRef)

我使用的API只给出了纹理对象的整数id,我需要将该纹理的数据传递给AVAssetWriter来创建视频.

我知道如何从像素缓冲区(CVPixelBufferRef)创建CVOpenGLESTexture对象,但在我的情况下,我必须以某种方式复制只有id可用的纹理数据.

换句话说,我需要将opengl纹理复制到基于pixelbuffer的纹理对象.可能吗?如果是,那怎么样?

在我的示例代码中,我有类似的东西:

   void encodeFrame(Gluint textureOb)
    {

    CVPixelBufferPoolCreatePixelBuffer (NULL, [assetWriterPixelBufferAdaptor pixelBufferPool], &pixelBuffer[0]);

    CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault, coreVideoTextureCache, pixelBuffer[0],
                                                          NULL, // texture attributes
                                                          GL_TEXTURE_2D,
                                                          GL_RGBA, // opengl format
                                                          (int)FRAME_WIDTH,
                                                          (int)FRAME_HEIGHT,
                                                          GL_BGRA, // native iOS format
                                                          GL_UNSIGNED_BYTE,
                                                          0,
                                                          &renderTexture[0]);


    CVPixelBufferLockBaseAddress(pixelBuffer[pixelBuffernum], 0);

//Creation of textureOb is not under my control. 
//All I have is the id of texture. 
//Here I need the data of textureOb somehow be appended as a video frame. 
//Either by copying the data to pixelBuffer or somehow pass the textureOb …
Run Code Online (Sandbox Code Playgroud)

iphone textures opengl-es ios avassetwriter

3
推荐指数
1
解决办法
4327
查看次数

IPhone RGBA到ARGB

我使用glReadPixels抓取我的opengl场景的屏幕截图,然后在IOS 4上使用AVAssetWriter将它们转换为视频.我的问题是我需要将alpha通道传递给视频,该视频只接受kCVPixelFormatType_32ARGB和glReadPixels检索RGBA.所以基本上我需要一种方法将我的RGBA转换为ARGB,换句话说,首先放置alpha字节.

int depth = 4;
unsigned char buffer[width * height * depth];  
glReadPixels(0,0,width, height, GL_RGBA, GL_UNSIGNED_BYTE, &buffer);

CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer), width*height*depth, NULL );

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;

CGImageRef image = CGImageCreate(width, height, 8, 32, width*depth, CGColorSpaceCreateDeviceRGB(), bitmapInfo, ref, NULL, true, kCGRenderingIntentDefault);

UIWindow* parentWindow = [self window];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey, [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey, nil];

CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width, height, kCVPixelFormatType_32ARGB, (CFDictionaryRef) options, &pxbuffer);

NSParameterAssert(status == kCVReturnSuccess);
NSParameterAssert(pxbuffer …
Run Code Online (Sandbox Code Playgroud)

video argb rgba ios avassetwriter

2
推荐指数
1
解决办法
7300
查看次数