iOS - AVAssetReader copyNextSampleBuffer 可能非常慢
iOS - AVAssetReader copyNextSampleBuffer can be very slow
我正在尝试实时解码视频 (30 fps) 并使用 OpenGL 显示/修改它。在 iPod touch 上,如果我解码用相机拍摄的视频,解码一帧可能需要 1 秒以上,而 30 fps 最多应该是 0.03 秒。所以结果不是很好..
是否可以使用 AVAssetReader 实现?例如,Instagram 在视频上实时应用滤镜(我认为是 GLSL 着色器),它们甚至可以在视频中导航。 Instagram 在 ipod touch 上运行良好。
可以在此处的答案中找到要解码的代码:
Best way to access all movie frames in iOS
更具体地说:Hardware accelerated h.264 decoding to texture, overlay or similar in iOS
提前致谢
由于您提供的信息非常有限,我不得不假设您的视频序列是以 YUV 格式压缩的,并且您将 AVAssetReader 的设置设置为 kCVPixelFormatType_32BGRA
等其他格式,这会强制 iOS 用硬件加速给你转换颜色space,你慢慢感受吧。我建议不要设置,直接使用它原来的像素格式。
实际上我的应用程序在 CPU 上做了太多工作,我有另一个进程分析图像。拆下来的时候解码真的很快
我正在尝试实时解码视频 (30 fps) 并使用 OpenGL 显示/修改它。在 iPod touch 上,如果我解码用相机拍摄的视频,解码一帧可能需要 1 秒以上,而 30 fps 最多应该是 0.03 秒。所以结果不是很好..
是否可以使用 AVAssetReader 实现?例如,Instagram 在视频上实时应用滤镜(我认为是 GLSL 着色器),它们甚至可以在视频中导航。 Instagram 在 ipod touch 上运行良好。
可以在此处的答案中找到要解码的代码: Best way to access all movie frames in iOS
更具体地说:Hardware accelerated h.264 decoding to texture, overlay or similar in iOS
提前致谢
由于您提供的信息非常有限,我不得不假设您的视频序列是以 YUV 格式压缩的,并且您将 AVAssetReader 的设置设置为 kCVPixelFormatType_32BGRA
等其他格式,这会强制 iOS 用硬件加速给你转换颜色space,你慢慢感受吧。我建议不要设置,直接使用它原来的像素格式。
实际上我的应用程序在 CPU 上做了太多工作,我有另一个进程分析图像。拆下来的时候解码真的很快