ffmpeg-X264编码--BGRA到AVFrame(ffmpeg)和反之?对于IOS

时间:2012-02-08 04:25:49

标签: iphone ffmpeg avfoundation x264

在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?

2.如何从avcodec_decode_video2将AVFrame转换为kCVPixelFormatType_32BGRA @ decode端?

请帮助我开始上述过程或提供工作教程的路径。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您尝试使用FFMpeg,则需要使用 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 而不是kCVPixelFormatType_32BGRA,然后您可以将其推入AVFrame。您可能还想将从iOS相机( YUVNV12 )获得的内容转换为 YUV420P ,以便您可以在非iOS的其他设备上接收它。如果您只是使用iOS设备并且这就是您所关心的,那么您可以跳过颜色转换的这一面并将其打包到AVFrame中。

由于您已将其置于YUV格式,因此您只需使用 CVPixelBufferGetBaseAddressOfPlane(buf,0)并对该地址进行编码。

解码图像后,您需要将颜色从 YUV420P 更改为 BGRA 。如果您在编码之前没有正确地交换颜色,那么您只需将YUVNV12更改为BGRA即可。

希望这会有所帮助。您可以在线找到合适的颜色转换算法。