在IOS中工作视频处理(iphone / ipod / ipad)使用Objective c。我正在使用AVFoundation Framework捕获视频。我想使用ffmpeg-libx264对这些视频帧进行编码/解码。我为ios编译了ffmpeg-x264 lib。我从AVFoundation获得了kCVPixelFormatType_32BGRA。
我的问题是
1.如何使用avcodec_encode_video将kCVPixelFormatType_32BGRA
转换为AVFrame
以获取enode? p>
2.如何从avcodec_decode_video2将AVFrame转换为kCVPixelFormatType_32BGRA @ decode端?
请帮助我开始上述过程或提供工作教程的路径。谢谢。
答案 0 :(得分:1)
如果您尝试使用FFMpeg,则需要使用 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 而不是kCVPixelFormatType_32BGRA,然后您可以将其推入AVFrame。您可能还想将从iOS相机( YUVNV12 )获得的内容转换为 YUV420P ,以便您可以在非iOS的其他设备上接收它。如果您只是使用iOS设备并且这就是您所关心的,那么您可以跳过颜色转换的这一面并将其打包到AVFrame中。
由于您已将其置于YUV格式,因此您只需使用 CVPixelBufferGetBaseAddressOfPlane(buf,0)并对该地址进行编码。
解码图像后,您需要将颜色从 YUV420P 更改为 BGRA 。如果您在编码之前没有正确地交换颜色,那么您只需将YUVNV12更改为BGRA即可。
希望这会有所帮助。您可以在线找到合适的颜色转换算法。