私は、Android 4.3の新しいMediaCodecおよびMediaMuxer APIでpreviewTextureレコーディングに関するAndroid Test Casesの実装を進めています。MuxingカメラのプレビューMediaMuxerでh264でエンコードされたエレメンタリーストリーム
recordingHintをカメラのパレメーターに設定することで、約30fpsのフレームレートでプレビューストリームを記録することができました。
しかし、私は遅延/遅れの問題に遭遇し、それを修正する方法は本当に分かりません。非常に標準的な画質設定(1280x720、〜8.000.000のビットレート)でカメラプレビューを記録するとき、プレビューとエンコードされた素材は時々遅れることがあります。より具体的には、この遅延は約2〜3秒ごとに発生し、約300〜600msかかる。エンコーダが利用可能なデータを持っている場合は、この行は、ループ内で呼び出された
mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);
:私は遅延は「drainEncoder」メソッドで次のコード行から来て把握することができた遅延をトレースすることにより
多重化のために。現在、私はオーディオを記録していないので、MediaMuxによってh264ストリームだけがmp4形式に変換されます。
これは遅延と関係があるかどうかはわかりませんが、ループがエンコーダのすべての利用可能なデータをデキューするために2回の繰り返しが必要な場合は常に発生します。これらの2つの繰り返し)。ほとんどの場合、エンコーダをデキューするには1回の反復で十分です。
これらの新しいAPIについてのオンライン情報はあまりないので、どんな助力も非常に高く評価されています。
ご回答いただきありがとうございます。 - 遅れは実際には5秒ごとにかなり規則的に発生します。しかし、Iフレームの間隔を変更すると、周波数は変化しません。最適なのは、カスタムIフレーム間隔がエンコーダ(Nexus 4)で無視されることです - 私はすでに昨日別のスレッドで多重化を分離しようとし始めましたが、これはうまくいくようです...そうして、確認してくれてありがとう! - 私は十分な時間があればすぐに遅れをとらえます – mAx