私は、Android6.0のMediaCodecでh264をリアルタイムで低レイテンシでストリームにエンコードしようとしています。 私はMediaCodec H264エンコーダのレイテンシを減らす方法
コードを削減する方法を知りたいエンコーダからの待ち時間は約6コマがscreenrecord.cpp
部品コードからありますされては、以下のとおりです。
while (true) {
encoder->dequeueOutputBuffer(&bufIndex);
}
エンコーダは320x480の60で画面の表面でフィードされますfpsとし、dequeueOutputBuffer()でストリームデータを出力します。 dequeueOutputBuffer()によってデータが返されないエンコーダへのフィードは約6フレームあります。 すなわち、N番目のフレームが供給されると、エンコーダは、N-6番目のフレームのデータを出力する。
質問1 - エンコーダでバッファされたフレームを減らすにはどうすればよいですか? N番目のフレームがエンコーダに供給された直後に、N番目のフレームを出力することは可能ですか?
PS:質問1はthis questionと同じです(まだ良い解決策はありません)。
表面のグラフィックコンテンツが突然静的になると、それ以上のフレームがエンコーダに供給されなくなります。最新の6フレームのデータを「通常の速度」で出力できないのは奇妙です。約10秒でゆっくりと出力されます。
質問2 - 突然データがエンコーダに供給されないと、最新のフレーム出力のレイテンシを減らすにはどうすればよいですか?