我正在一個應用程序,從磁盤中讀取的媒體數據,將其轉換成適當的像素格式,並然後轉到其關閉,以AVAssetWriter用於壓縮和寫入磁盤。我正在做自己的閱讀交錯,而不是使用AVAssetReader。我的閱讀器確保以串行方式呈現正好一幀的視頻數據和一幀的音頻數據。我遇到的問題是,如果我沒有在expectsMediaDataInRealTime屬性設置爲YES ,視頻資產作家總是恰好經過30幀返回NO爲isReadyForMoreMediaData。如果我在30幀之前停止寫入,它可以正常工作並且輸出文件有效。但是,如果將期望MediaInRealTime設置爲YES,則它可以在整個持續時間內完美工作,可以是幾千幀。開始expectsMediaDataInRealTime集的轉碼操作YES之後,我觀看了應用程序的內存使用量在壓縮很長視頻的過程中,而且沒有任何不合理的內存使用情況,也沒有任何內存泄漏。所產生的MOV文件似乎確實寫得相當正常,例如音頻數據就像人們期望的那樣與視頻數據交錯。AVFoundation的AVAssetWriterInput預期MediaDataRealTime屬性到底做了什麼?
那麼,爲什麼我會永遠設置expectsMediaDataInRealTime爲NO,如果沒有明顯的缺點,以將其設置爲YES?這隻適用於使用Apple API讀取數據(使用AVAssetReader)嗎?該文檔說,此屬性控制「在理想的交錯模式下爲存儲和回放效率編寫媒體數據」,但是當期望MediaInRealTime設置爲YES時,isReadyForMoreMediaData永遠不會返回NO,並且該文件看起來完美無缺。因此,如果AVAssetWriter可以在此屬性設置爲YES時執行此操作,爲什麼設置爲NO時無法執行此操作?來源完全一樣。
究竟什麼就這個屬性做的比「確保readyForMoreMediaData的值被適當地計算」(這意味着絕對沒有給我)其他?