簡體   English   中英

將CMSampleBufferRef處理為數組會導致崩潰

[英]Coping CMSampleBufferRef to array causes crash

我想更改電影幀的順序,然后將它們寫回到新的視頻文件中。 對我來說,將它們全部都放在數組中會容易得多,但是將緩沖區樣本復制到數組的過程會導致實際設備崩潰(但在模擬器中可以)。 我在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,這可能會導致一點時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM