我想更改电影帧的顺序,然后将它们写回到新的视频文件中。对我来说,将它们全部排列成数组会容易得多,但是将缓冲区样本复制到数组的过程会导致实际设备崩溃(但在模拟器中可以)。我在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);
}

它崩溃了。
我会尝试做一些不可能的事情吗?

最佳答案

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

关于ios - 将CMSampleBufferRef处理为数组会导致崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35853683/

10-12 07:34