[英]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.