我想更改电影帧的顺序,然后将它们写回新的视频文件。将它们全部放在数组中对我来说会容易得多,但是将缓冲区样本处理到数组的过程会导致真实设备上的崩溃(但在模拟器中没问题)。我在 Xcode 中看到的只是消息:“丢失与 DEVICE_NAME 的连接”在这个过程的中间 - 没有崩溃日志等。
所以让我们从不会导致任何问题的事情开始:打印每帧的时间戳
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);
}
它崩溃了。我在尝试做一些不可能的事情吗?