录制视频时,AVAssetWriterInputPixelBufferAdaptor有时会引发异常

时间:2019-08-22 15:56:44

标签: ios objective-c avassetwriter avassetwriterinput

我目前正在使用AVAssetWriter,AVASsetWriterInput和AVAssetWriterInputPixelBufferAdaptor在本地录制视频。

它可以工作,但有时会抛出异常。

>>>EXCEPTION: *** -[AVAssetWriterInputPixelBufferAdaptor 

appendPixelBuffer:withPresentationTime:] Must start a session (using -

[AVAssetWriter startSessionAtSourceTime:) before appending pixel buffers

但是事情是我正在检查AVAssetWriter是否可以写,并且AVAssetWriterInput在附加像素缓冲区之前是否也可以接受数据。因此,我不知道为什么有时会抛出此异常。同样,在iPhone 6和iPhone x上引发异常的速度更快。

这是我正在编写示例缓冲区的代码的主要部分。 videoSample是传递给此函数的CVImageBufferRef,writer是AVAssetWriter,而videoWriterInput是AVAssetWriterInput

if (self.videoWriterInput.readyForMoreMediaData && self.writer.status == AVAssetWriterStatusWriting) {
        if (videoSample != nil) {
            if (!self.startedSession) {
                CMTime pts = framePresentationTime;
                [self.writer startSessionAtSourceTime:pts];
                self.startedSession = YES;
                NSLog(@"MP4Writer: started session in appendVideoSample");
            }
            BOOL appended = [self._pixelBufferAdaptor appendPixelBuffer:videoSample withPresentationTime:framePresentationTime];

            if (CMTimeCompare(kCMTimeInvalid, self.firstVideoFrameTime) == 0) {
                self.firstVideoFrameTime = framePresentationTime;
            }

是什么原因导致此异常,因为似乎我正在检查所有必要的操作以添加像素缓冲区。

此外,在录制停止时总是会引发异常。

0 个答案:

没有答案