正在使用 Objective c 在 IOS(iphone/ipod/ipad)中进行视频处理。我正在使用 AVFoundation 框架来捕获视频。我想使用 ffmpeg-libx264 对这些视频帧进行编码/解码。我已经为 ios 编译了 ffmpeg-x264 lib。我从 AVFoundation 获得了 kCVPixelFormatType_32BGRA。
我的问题是
1.如何转换kCVPixelFormatType_32BGRA
至AVFrame
对于使用 avcodec_encode_video 的 enode?
2.如何从avcodec_decode_video2将AVFrame转换为kCVPixelFormatType_32BGRA@解码端?
请帮助我开始上述过程或提供工作教程的路径。提前致谢。
最佳答案
如果您尝试使用 FFMpeg,您需要使用 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 而不是 kCVPixelFormatType_32BGRA 然后你可以把它塞进一个 AVFrame 中。您可能还想将从 iOS 相机 ( YUVNV12 ) 获取的内容转换为 YUV420P 这样您就可以在非 iOS 的其他设备上接收它。如果您只是在使用 iOS 设备并且您只关心这些,您可以跳过颜色转换的这一面,并将其打包到 AVFrame 中。
由于您已经将其放入 YUV 格式,您可以使用 CVPixelBufferGetBaseAddressOfPlane(buf,0) 并对该地址进行编码。
解码图像后,您需要将颜色更改为 BGRA 来自 YUV420P .如果您在编码之前没有正确交换颜色,您只需将 YUVNV12 更改为 BGRA。
希望这个对你有帮助。您可以在线找到合适的颜色转换算法。
关于iphone - ffmpeg-X264 将--BGRA 编码为 AVFrame(ffmpeg),反之亦然? IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187832/