ムービー フレームの順序を変更し、それらを新しいビデオ ファイルに書き戻したいと考えています。それらをすべて配列に入れる方がはるかに簡単ですが、バッファサンプルを配列にコピーするプロセスにより、実際のデバイスでクラッシュが発生します(ただし、シミュレータでは問題ありません)。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);
}
クラッシュします。私は何か不可能なことをしようとしていますか?