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