Mik*_*ike 7 iphone avfoundation iphone-sdk-3.0 ios4 avassetwriter
AVAssetWriterInput的readyForMoreMediaData是否在后台线程中更新?如果readyForMoreMediaData为NO,我可以在主线程中阻塞并等待值变为YES吗?
我通过向其推送数据来使用AVAssetWriterInput(即不使用requestMediaDataWhenReadyOnQueue)并且我设置了expectedMediaDataInRealTime,并且99.9%的时间我可以在其上调用appendSampleBuffer(或appendPixelBuffer),就像我的应用程序可以生成帧一样快.
除非您在AVAssetWriter会话中间将设备(iPhone 3GS)置于睡眠状态15分钟左右,否则此工作正常.唤醒设备后,appendPixelBuffer有时会收到一条错误消息,"当readyForMoreMediaData为NO时,无法追加像素缓冲区".因此我的问题 - 如何最好地响应readyForMoreMediaData = NO,如果我可以在主线程中稍等一下,如下所示:
while ( ![assetWriterInput readyForMoreMediaData] )
{
Sleep for a few milliseconds
}
Run Code Online (Sandbox Code Playgroud)
小心不要阻塞线程,这是我在不起作用之前所做的:
while (adaptor.assetWriterInput.readyForMoreMediaData == FALSE) {
[NSThread sleepForTimeInterval:0.1];
}
Run Code Online (Sandbox Code Playgroud)
上述方法在我的iPad2上有时会失败。这样做反而解决了问题:
while (adaptor.assetWriterInput.readyForMoreMediaData == FALSE) {
NSDate *maxDate = [NSDate dateWithTimeIntervalSinceNow:0.1];
[[NSRunLoop currentRunLoop] runUntilDate:maxDate];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5631 次 |
| 最近记录: |