2017-02-13 140 views
2

我試圖用實時低延遲與Android6.0的MediaCodec將h264編碼到流中。 大約有6幀從編碼器,其我想知道如何降低如何減少MediaCodec H264編碼器等待時間

碼是從screenrecord.cpp

部分代碼是等待時間:

while (true) { 
    encoder->dequeueOutputBuffer(&bufIndex); 
} 

編碼器通過絲網的表面在小320x480 60饋送fps,並通過dequeueOutputBuffer()輸出流數據。 大約有6幀數據不能通過dequeueOutputBuffer()立即返回給編碼器。換句話說,當第N幀被輸入時,第(N-6)幀的編碼器輸出數據被輸入。

問題1 - 如何減少在編碼器中緩衝的幀?在第N幀送入編碼器後,是否可以輸出第N幀?

PS:問題1與this question相同(沒有很好的解決方案)。

當表面圖形內容突然變爲靜態時,沒有更多的幀送入編碼器。奇怪的是,最新的6幀數據無法以「普通速度」輸出,它們在大約10秒內緩慢輸出。

問題2如何在突然沒有數據輸入到編碼器時減少最新幀輸出的延遲?

回答

1

緩衝由視頻編碼器決定。我不認爲你可以做些什麼,除了選擇不這樣的視頻編碼器。

如果您不希望輸出暫停,最簡單的解決方法是不暫停輸入。繼續輸入相同的畫面。編碼器應該認識到沒有任何變化,併產生很少的輸出。 screenrecord不以這種方式工作 - 它只是提交框架,因爲它得到它們 - 所以你必須添加一個超時重新提交框架。