在 iOS 上编码视频时,大多数解决方案都包含此步骤:
while(encoding) {
if(assetWriterInput.readyForMoreMediaData) {
[adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
if(buffer)
CVBufferRelease(buffer);
[NSThread sleepForTimeInterval:0.05]; // <=== This line slows down encoding
}
}
如果我不休眠线程,即使readyForMoreMediaData 始终返回YES,结果视频也会看起来不稳定。如果我暂停线程,结果看起来很完美。
但是如果我们无论如何都需要暂停线程,我不明白“readyForMoreMediaData”的目的?看起来我可以将睡眠时间减少到 0.03,但结果不会显得生涩,但它仍然会减慢编码过程。
任何帮助将不胜感激,谢谢!
多年来,我一直使用 assetwriter 在多个应用程序中编写实时视频,其中一个标准运行速度为 240 fps。我没有遇到过视频不稳定的问题。我从未使用过任何睡眠命令,也没有使用过 CVBufferRelease。我的代码基本上是这样的:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
if (videoWriterInput.readyForMoreMediaData) [videoWriterInput appendSampleBuffer:sampleBuffer])
}
也许您应该检查一下您如何设置 assetwriter?有一个“recommendedVideoSettingsForAssetWriterWithOutputFileType”设置可以帮助您优化它。如果您不是绝对需要适配器,我会尝试不使用适配器,根据我的经验,没有适配器运行会更顺畅。
我遇到了同样的问题。这个问题最后有更好的解决办法吗?