2

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

クラッシュします。私は何か不可能なことをしようとしていますか?

4

1 に答える 1