【发布时间】:2011-05-28 19:15:24
【问题描述】:
我正在尝试使用 ffmpeg 的 libav* 库将 iPhone 的相机帧编码为 H.264 视频。我发现在这个 Apple's article如何将CMSampleBuffer转为UIImage,但是如何转为ffmpeg的AVPicture呢?
谢谢。
【问题讨论】:
标签: iphone ios4 avfoundation video-encoding libav
我正在尝试使用 ffmpeg 的 libav* 库将 iPhone 的相机帧编码为 H.264 视频。我发现在这个 Apple's article如何将CMSampleBuffer转为UIImage,但是如何转为ffmpeg的AVPicture呢?
谢谢。
【问题讨论】:
标签: iphone ios4 avfoundation video-encoding libav
回答我自己的问题:
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
// access the data
int width = CVPixelBufferGetWidth(pixelBuffer);
int height = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *rawPixelBase = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
// Do something with the raw pixels here
// ...
// Fill in the AVFrame
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
AVFrame *pFrame;
pFrame = avcodec_alloc_frame();
avpicture_fill((AVPicture*)pFrame, rawPixelBase, PIX_FMT_RGB32, width, height);
现在pFrame填入了sample buffer的内容,使用的是像素格式kCVPixelFormatType_32BGRA。
这解决了我的问题。谢谢。
【讨论】: