Ios 将CMSampleBufferRef调整到数组会导致崩溃

Ios 将CMSampleBufferRef调整到数组会导致崩溃,ios,objective-c,iphone,avassetreader,Ios,Objective C,Iphone,Avassetreader,我想更改电影帧的顺序,然后将它们写回新的视频文件。对我来说,将它们全部放在阵列中会容易得多,但将缓冲区样本处理到阵列的过程会导致真实设备上的崩溃(但在模拟器中是可以的)。在XCODE中我能看到的是在这个过程中间的消息:“连接到Deice名称”,没有崩溃日志,等等。 所以,让我们从不会引起任何问题的东西开始:打印每个帧的时间戳 CMSampleBufferRef sample; while(sample = [readerOutput copyNextSampleBuffer]) {

我想更改电影帧的顺序,然后将它们写回新的视频文件。对我来说,将它们全部放在阵列中会容易得多,但将缓冲区样本处理到阵列的过程会导致真实设备上的崩溃(但在模拟器中是可以的)。在XCODE中我能看到的是在这个过程中间的消息:“连接到Deice名称”,没有崩溃日志,等等。 所以,让我们从不会引起任何问题的东西开始:打印每个帧的时间戳

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);
}
它崩溃了。
我是否试图做一些不可能的事情?

您可以将其转换为UIImage,然后添加到数组中,但是,使用时需要将其转换回CMSampleBufferRef,这可能会占用一点时间