MediaCodec.QueueInputBuffer 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
填滿指定索引的輸入緩衝區範圍後,將其提交給元件。
[Android.Runtime.Register("queueInputBuffer", "(IIIJI)V", "")]
public void QueueInputBuffer(int index, int offset, int size, long presentationTimeUs, Android.Media.MediaCodecBufferFlags flags);
[<Android.Runtime.Register("queueInputBuffer", "(IIIJI)V", "")>]
member this.QueueInputBuffer : int * int * int * int64 * Android.Media.MediaCodecBufferFlags -> unit
參數
- index
- Int32
先前在呼叫時 #dequeueInputBuffer回傳的客戶端擁有輸入緩衝區的索引。
- offset
- Int32
位元組偏移量移入資料起始的輸入緩衝區。
- size
- Int32
有效輸入資料的位元組數。
- presentationTimeUs
- Int64
此緩衝區的呈現時間戳以微秒為單位。 這通常是該緩衝區應該呈現(渲染)的媒體時間。 使用輸出表面時,該會以幀的 形式 SurfaceTexture#getTimestamp timestamp 傳播(轉換成奈秒後)。
- flags
- MediaCodecBufferFlags
一個由旗標 #BUFFER_FLAG_CODEC_CONFIG 和 #BUFFER_FLAG_END_OF_STREAM組成的位元遮罩。
雖然不禁止,但大多數編解碼器不會將 #BUFFER_FLAG_KEY_FRAME 該旗標用於輸入緩衝區。
- 屬性
例外狀況
若不在執行狀態。
因為編碼錯誤。
備註
填滿指定索引的輸入緩衝區範圍後,將其提交給元件。 一旦輸入緩衝區排隊到編解碼器,必須在之後#dequeueInputBuffer被回傳值或Callback#onInputBufferAvailable回調時再#getInputBuffer被檢索。
許多解碼器要求實際壓縮的資料流前必須先有「編解碼器專用資料」,即用於初始化編解碼器的設定資料,如 AVC 視訊的 PPS/SPS,或 vorbis 音訊的程式碼表。 該類別 android.media.MediaExtractor 在回傳軌道格式中提供特定編解碼器資料,條目名為「csd-0」、「csd-1」等。
這些緩衝區可以直接在 #start 後提交,或 #flush 透過指定旗標 #BUFFER_FLAG_CODEC_CONFIG來提交。 不過,如果你用包含這些金鑰的 A MediaFormat 配置編解碼器,啟動後 MediaCodec 會自動提交這些金鑰。 因此,不建議使用 #BUFFER_FLAG_CODEC_CONFIG 旗幟,僅建議給進階使用者使用。
為了表示這是最後一個輸入資料(或說除非解碼器隨後被沖洗,否則不會有更多輸入資料),指定旗標 #BUFFER_FLAG_END_OF_STREAM。
<strong>Note:</strong> 在 之前android.os.Build.VERSION_CODES#MpresentationTimeUs,並未傳遞到(渲染後)Surface 輸出緩衝區的框架時間戳,因此產生的幀時間戳記未定義。 用 #releaseOutputBuffer(int, long) 來確保設定特定的幀時間戳記。 同樣地,由於框架時間戳記可被目的表面用於渲染同步,因此<>必須特別注意標準化presentationTimeUs,避免誤認為系統時間。 (詳見 #releaseOutputBuffer(int, long) SurfaceView 細節)</強壯>
Java 文件 android.media.MediaCodec.queueInputBuffer(int, int, int, long, int)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。