簡體   English   中英

Muxing相機使用MediaMuxer預覽h264編碼的基本流

[英]Muxing camera preview h264 encoded elementary stream with MediaMuxer

我正在使用Android 4.3的新MediaCodec和MediaMuxer API開發一個關於previewTexture錄制的Android測試用例的實現。

通過將recordingHint設置為攝像機參數,我設法以大約30fps的幀速率記錄預覽流。

但是,我遇到了延遲/滯后問題,並不知道如何解決這個問題。 當使用相當標准的質量設置(1280x720,比特率為~8.000.000)錄制相機預覽時,預覽和編碼材料會偶爾出現滯后。 更具體地說:這種滯后大約每2-3秒發生一次,大約需要300-600毫秒。

通過跟蹤延遲,我能夠找出延遲來自“drainEncoder”方法中的以下代碼行:

mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);

如果編碼器具有可用於多路復用的數據,則在循環中調用該行。 目前我不錄制音頻,因此MediaMuxer只將h264流轉換為mp4格式。

我不知道這是否與延遲有關,但它總是發生在循環需要兩次迭代以使編碼器的所有可用數據出列時(更具體地說,它始終在這兩次迭代的第一次出現) 。 在大多數情況下,一次迭代足以使編碼器出列。

由於網上關於這些新API的信息不多,所以非常感謝任何幫助!

我懷疑你被MediaMuxer磁盤寫入了。 最好的方法是在錄制過程中運行systrace,看看暫停期間實際發生了什么。 (systrace docs解釋bigflake示例 - 截至目前,只有后者更新為Android 4.3)

如果是這種情況,您可以通過在單獨的線程上運行MediaMuxer實例來緩解問題,通過同步隊列將H.264數據提供給它。

這些停頓是否每5秒鍾定期發生一次? CameraToMpegTest示例將編碼器配置為每5秒輸出一個I幀(預期幀速率為30fps),這將導致輸出一個全尺寸的幀而不是微小的增量。

正如@fadden所指出的,這是一個磁盤寫入問題,主要發生在寫入閃存速度較低的設備上,或者如果您嘗試寫入SD卡。

我已經寫了關於如何緩沖MediaMuxer的寫在一個類似的問題的解決方案在這里

暫無
暫無

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

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