0
一個單一的形象嘗試這樣的:AVAssetWriter - 渲染10秒
int frameCount = 30*10;
for(int i = 0; i<frameCount; i++)
{
while (!append_ok && j < 30)
{
if (self.adaptor.assetWriterInput.readyForMoreMediaData)
{
CMTime frameTime = CMTimeMake(i,(int32_t) 10);
NSLog(@"frameTime %f", CMTimeGetSeconds(frameTime));
append_ok = [self.adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];
if(!append_ok){
NSError *error = self.assetWriter.error;
if(error!=nil) {
NSLog(@"Unresolved error %@,%@.", error, [error userInfo]);
}
}
[NSThread sleepForTimeInterval:0.05];
}
else
{
printf("adaptor not ready %d", j);
[NSThread sleepForTimeInterval:0.1];
}
j++;
}
if (!append_ok)
{
printf("error appending image times %d\n", j);
}
CVBufferRelease(buffer);
}
但我得到這個錯誤:
MyApp的(11658,0x3a98218c)的malloc:*錯誤對象0x1782c690:雙免費
我只是想用一張圖片創建一個持續時間爲10秒的視頻。
你正在釋放緩衝區,然後使用它,並在你的循環中多次釋放它。將CVBufferRelease語句從for循環中移出 – Jack
這確實消除了錯誤。有沒有辦法將像素緩衝區追加十秒鐘,而不是一次追加一幀? – soleil
嗯我不太確定這一點,但如果你在時間0附加一個像素緩衝區,然後在10秒時追加下一個幀,整個持續時間是不是會顯示像素緩衝區? – Jack