2017-02-27 86 views
7

私は助けてください:H.264ビデオをエンコードするMediaCodecの平均+最大ビットレートを設定するにはどうすればよいですか?

私は私の携帯電話を移動すると、問題は、出力ビデオの品質は非常にプール、ビデオ。

belowsのは、いくつかの詳細です:

マイエンコーダのビットレートは500 kbpsです、とビットレートモードはBITRATE_MODE_VBRです。

ビットレートを800 kbpsに変更しようとすると、出力ビデオの品質が大幅に向上し、ビットレートモードをBITRATE_MODE_CQに変更すると、出力ビデオの品質は完璧ですが、ビットレートは最大1400 kbpsに増加します。

平均ビットレートを低く保ちたいとします。 500kbpsであるが、電話が動いているときにビットレートバーストをいくらか大きなビットレートにすることを可能にする。 800 kbps。 iOS VideoToolBoxには平均ビットレートと最大ビットレートを設定するためのAPI kVTCompressionPropertyKey_DataRateLimitsがありますが、Androidではどのように平均最大ビットレート制御を達成できますか?

MediaCodecを設定するときに「max-bitrate」パラメータが隠されていることに気付きましたが、効果がありません(Androidフレームワークではこのパラメータが無視されるためhttp://androidxref.com/7.1.1_r6/xref/frameworks/av/media/libstagefright/ACodec.cpp#configureCodecを参照)。また、パラメータにも影響はありません。

ありがとうございました!

答えて

0

アンドロイドのソースコードから、KEY_MAX_BIT_RATEが最大ビットレートを設定するように見えます。これはあなたのために働くなら、私に教えてくださいmedia/java/android/media/MediaCodecInfo.java

private static boolean supportsBitrate(
       Range<Integer> bitrateRange, MediaFormat format) { 
      Map<String, Object> map = format.getMap(); 

      // consider max bitrate over average bitrate for support 
      Integer maxBitrate = (Integer)map.get(MediaFormat.KEY_MAX_BIT_RATE); 
      Integer bitrate = (Integer)map.get(MediaFormat.KEY_BIT_RATE); 
      if (bitrate == null) { 
       bitrate = maxBitrate; 
      } else if (maxBitrate != null) { 
       bitrate = Math.max(bitrate, maxBitrate); 
      } 

      if (bitrate != null && bitrate > 0) { 
       return bitrateRange.contains(bitrate); 
      } 

      return true; 
     } 

からスナップショットの下を参照してください。

ビデオの解像度に応じて高い値を設定することをお勧めします。例えば、 1080pのビデオは、500kbpsのVBRまたはCBRではうまく見えません。

+0

私はKEY_MAX_BIT_RATEパラメータを試しましたが、実際にはキーは "max-bitrate"ですが、VBRでは効果がなく、ネイティブコードによってパラメータが破棄されたようです。http://androidxref.com /7.1.1_r6/xref/frameworks/av/media/libstagefright/ACodec.cpp#configureCodec。 720pビデオをエンコードするとき、私は800 kbpsのビットレートを設定します。カメラを動かすと、出力ビデオの品質は非常に悪く、ブロックがいっぱいです。入力データが増加するとMediaCodecがビットレートを一時的に増加させ、入力データが減少すると、ビットレートを平均レベルに減少させます。どうしたらいいですか? – Piasy

+0

ビデオチップセットがレイテンシの原因です。 あなたはそれがあまりにも多くのデルタをするように求めています。 –

関連する問題