2
我想更改電影幀的順序,然後將它們寫回到新的視頻文件。對於我來說,將它們放在一起會容易得多,但將緩衝區樣本應對陣列的過程會導致實際設備崩潰(但在模擬器中可以正常運行)。我在Xcode中看到的所有信息都是:在此過程中出現「丟失與DEVICE_NAME的連接」 - 沒有崩潰日誌等。應對CMSampleBufferRef數組導致崩潰
因此,讓我們從什麼不會導致任何問題開始:打印每個幀的時間戳
CMSampleBufferRef sample;
while(sample = [readerOutput copyNextSampleBuffer]) {
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp((__bridge CMSampleBufferRef)(__bridge id)sample);
NSLog(@"%f", (float)timestamp.value/timestamp.timescale);
CFRelease(sample);
}
但是,當我嘗試樣本緩衝區這種方式複製到陣列:
NSMutableArray *samples = [[NSMutableArray alloc] init];
CMSampleBufferRef sample;
while(sample = [readerOutput copyNextSampleBuffer]) {
[samples addObject:(__bridge id)sample];
CMSampleBufferInvalidate(sample);
CFRelease(sample);
sample = NULL;
}
或這樣
CFMutableArrayRef frameArray = CFArrayCreateMutable(NULL, 1000, &kCFTypeArrayCallBacks);
sample = [readerOutput copyNextSampleBuffer];
while (sample != NULL) {
sample = [readerOutput copyNextSampleBuffer];
if (sample != NULL) {
CFArrayAppendValue(frameArray, sample);
}
CFRelease(sample);
}
它崩潰。 我是否嘗試做一些不可能的事情?