我想将 h.264 流从服务器传输到视频文件,但是当我使用assetwrite.finishwrite
,XCode 报告
Video /var/mobile/Applications/DE4196F1-BB77-4B7D-8C20-7A5D6223C64D/Documents/test.mov cannot be saved to the saved photos album: Error Domain=NSOSStatusErrorDomain Code=-12847 "This movie format is not supported." UserInfo=0x5334830 {NSLocalizedDescription=This movie format is not supported.}"
下面是我的代码:
data是h.264帧,只是一帧,可能是i帧或p。
(void)_encodeVideoFrame2:(NSData *) data time:(double)tm
{
CMBlockBufferRef videoBlockBuffer=NULL;
CMFormatDescriptionRef videoFormat=NULL;
CMSampleBufferRef videoSampleBuffer=NULL;
CMItemCount numberOfSampleTimeEntries=1;
CMItemCount numberOfSamples=1;
CMVideoFormatDescriptionCreate(kCFAllocatorDefault, kCMVideoCodecType_H264, 320, 240, NULL, &videoFormat);
OSStatus result;
result=CMBlockBufferCreateWithMemoryBlock(kCFAllocatorDefault, NULL, data.length, kCFAllocatorDefault, NULL, 0, data.length, kCMBlockBufferAssureMemoryNowFlag, &videoBlockBuffer);
result=CMBlockBufferReplaceDataBytes(data.bytes, videoBlockBuffer, 0, data.length);
CMSampleTimingInfo videoSampleTimingInformation={CMTimeMake(tm*600, 600)};
size_t sampleSizeArray[1];
sampleSizeArray[0]=data.length;
result=CMSampleBufferCreate(kCFAllocatorDefault, videoBlockBuffer, TRUE, NULL, NULL, videoFormat, numberOfSamples, numberOfSampleTimeEntries, &videoSampleTimingInformation, 1, sampleSizeArray, &videoSampleBuffer);
result = CMSampleBufferMakeDataReady(videoSampleBuffer);
[assetWriterInput appendSampleBuffer:videoSampleBuffer];
}
也许是CMSampleBufferCreate
论证有误吗?谢谢。