12

我正在尝试使用AVAssetWriter. 实现的代码大部分时间都可以正常工作,但在随机时刻,编写器会出现问题

AVAssetWriter *videoWriter;
...
[videoWriter finishWriting];
NSLog(@"videoWriter error %@",videoWriter.error);

收到的错误是:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" 
UserInfo=0x1f839cd0 {NSLocalizedDescription=The operation could not be completed,
 NSUnderlyingError=0x1e59efb0 "The operation couldn’t be completed. (OSStatus error -12633.)", 
NSLocalizedFailureReason=An unknown error occurred (-12633)}

写图片:

-(void)writeFrame:(WriteableFrame*)wF
{
    if([writerInput isReadyForMoreMediaData])
    {
        CMTime presentTime = CMTimeMake(wF.frameTime, 1000);
        CGImageRef tmpImgRef = [wF.currentImage CGImage];
        buffer = [self pixelBufferFromCGImage:tmpImgRef];
        if(buffer)
        {
            [adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
            CVPixelBufferRelease(buffer);
        }
    }
    else
    {
        NSLog(@"error");
    }
}

有人有这样的问题吗?

4

5 回答 5

22

我发现了问题,它是在同一帧时间放置两帧。

于 2013-02-27T07:46:47.130 回答
9

直接来自 DTS

错误 -12633 是 InvalidTimestamp

于 2014-04-23T18:19:57.203 回答
4

如果推送的帧出现故障,也可能发生这种情况

于 2014-03-13T16:52:41.047 回答
3

如果你给 a sampleBufferAVAssetWriter则销毁关联的AVAssetReader,未来的 AVAssetReaders 可能会尝试重用sampleBuffer之前AVAssetWriter完成的它。这与 中的AVAssetWriter文档相矛盾AVAssetWriterInput.h,据我所知,在AVAssetWriter您获得回调之前无法确定是否完成finishWritingWithCompletionHandler,但这可能导致 OSStatus 错误 -12633。

@method appendSampleBuffer:

接收器将保留 CMSampleBuffer 直到它完成,然后释放它。将 CMSampleBuffer 或其内容传递给此方法后,请勿对其进行修改。

于 2013-10-31T16:30:40.920 回答
0

当我的像素缓冲区中的图像与输入像素缓冲区适配器所期望的宽度/高度尺寸不同时,我遇到了同样的错误,这取决于您将 sourcePixelBufferAttributes 设置为 for(kCVPixelBufferWidthKey, kCVPixelBufferHeightKey)。确保像素缓冲区具有相同的尺寸。就我而言,我的应用程序有时会绘制 1x1 图像,因为我打算绘制纯色图像,但我忽略了将单色像素放大到全尺寸。

于 2014-12-29T02:28:49.763 回答