1

正在使用 Objective c 在 IOS(iphone/ipod/ipad)中进行视频处理。我正在使用 AVFoundation 框架来捕获视频。我想使用 ffmpeg-libx264 对这些视频帧进行编码/解码。我已经为 ios 编译了 ffmpeg-x264 lib。我从 AVFoundation 获得了 kCVPixelFormatType_32BGRA。

我的问题是1.How
to convert kCVPixelFormatType_32BGRAto AVFramefor enode using avcodec_encode_video?

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

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

4

1 回答 1

1

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

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

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

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

于 2012-04-05T22:46:55.707 回答