我試圖使用Android的MediaMuxer和MediaCodec來製作MP4視頻。當批量寫入樣本時,Mediamuxer產生損壞的視頻
如果我通過調用writeSampleData()將編解碼器中的幀直接排到複用器,那麼一切正常,併產生正確的視頻。
但是,如果我嘗試先將這些幀存儲在一個數組上,並稍後決定將它們發送到複用器,則即使演示時間戳正確,我也無法生成工作視頻。
出於某種原因,mediamuxer輸出似乎不僅取決於呈現時間戳,而且還取決於調用實際時間「writeSampleData」,儘管我的理解是擁有正確的時間戳應該足夠了。
任何人都可以解釋一下這個問題?
有關將視頻幀存儲在內存中並稍後寫出的示例,請參閱Grafika的「連續捕獲」活動 - https://github.com/google/grafika。你保存旗幟嗎? – fadden
我在自定義對象上組合了所需的信息(bytebuffer,trackId和bufferInfo +標誌)。該對象通過隊列發送到複用器。如果從隊列中提取並立即寫入複用器,它就可以工作。如果我再次將這些對象存儲在數組中,並稍後繼續使用writeSampleData,則會失敗。我會看看grafika的代碼。 – Martelli
你是否發送所有的幀?第一幀是同步幀嗎?接下來要做的是在「立即」和「延遲」模式下運行它,然後比較輸出的十六進制轉儲,看看是否有明顯的差異。 (理想情況下,使用固定源,例如GLES輸出,或者只有兩個MediaMuxer,並且兩次發送相同的數據,一次立即並延遲一次。)觀察MediaMuxer中logcat中只出現「延遲」模式的投訴。 – fadden