我目前正在使用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;
}
是什么原因导致此异常,因为似乎我正在检查所有必要的操作以添加像素缓冲区。
此外,在录制停止时总是会引发异常。