2016-08-25 7 views

答えて

0

この問題の回避策が見つかりました。

キーフレームが必要になる前に次のコードを挿入すると、次に利用可能なフレームにキーフレームが生成されます。

A zero value means a stream containing all key frames is requested.

はあなたが必要なものがすべてです:

MediaFormat format = MediaFormat.createVideoFormat(...); 
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0); 

それはいくつかのデバイスのために、いくつかのデバイスのために働く(

 Bundle b = new Bundle(); 
     b.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0); 
     encoder.setParameters(b); 
1

これを回避するには、タイムスタンプをスケーリングすることで回避できます。例:エンコーダに入力するときにタイムスタンプに2を掛け、エンコーダからの出力バッファでタイムスタンプを2で割ると、Iフレーム間隔を0.5秒にすることができます。次に、一致させるためにビットレート(およびフレームレート)を半分にする必要があります。もちろんこれは理想的ではありませんが、適切な効果を得ることができるはずです。

+0

非常に興味深い解決策です! –

0

ドキュメントはと言いますNexus 6pなど)は例外を生成します:

E/ACodec: [OMX.qcom.video.encoder.avc] configureCodec returning error -1010 
E/ACodec: signalError(omxError 0x80001001, internalError -1010) 
E/MediaCodec: Codec reported err 0xfffffc0e, actionCode 0, while in state 3 
E/MediaCodec: configure failed with err 0xfffffc0e, resetting... 
関連する問題