2016-11-08 15 views
1

複数のビデオをオーディオトラックと組み合わせることができましたが、複数のビデオをオーディオトラックを持たないものの1つに結合すると、無音を追加する必要があります。結合されたオーディオトラックMediaCodec - 意図的にオーディオトラックに無音を追加する

どうすればいいですか?無音のタイムスタンプで0で埋められたByteBufferをエンコードする必要がありますか?

答えて

0

どうすればいいですか?無音のタイムスタンプで0で埋められたByteBufferをエンコードする必要がありますか?

本質的にはい。私は、あるプレゼンテーション時に無音をエンコードするために以下の関数を使用しています。 音声のないビデオの長さについては、定期的に無音をエンコードする必要があります。私はその間隔が前のオーディオと一致するはずだと決めました。私の場合、最初のビデオのオーディオプレゼンテーション時間は21333 usでした。 21333の間隔で最初のビデオのオーディオ+ 21333の最後のプレゼンテーション時間から 、 私はまだしようとしているフルビデオ

持続するのに十分な沈黙をエンコードまで:私は沈黙をコード始めたその情報を使用して

オーディオのないビデオ(最初のビデオ)とそれに続くオーディオのビデオを使用する方法を理解する。私はそれを把握すれば私の答えを更新します。

private byte[] zerodArray = new byte[2048];// Used to encode silent audio... Not really sure how big this should be ...... 

private void encodeSilenceForFrame(long presentationTime){ 
    //mAudioEncoder is the audio encoder you are using to combine the other videos' audio. 
    final int TIMEOUT_USEC = 10000; 
    int encoderInputBufferIndex = mAudioEncoder.dequeueInputBuffer(TIMEOUT_USEC); 
    if (encoderInputBufferIndex == MediaCodec.INFO_TRY_AGAIN_LATER) { 
     if (VERBOSE) Log.d(TAG, "no audio encoder input buffer"); 
    } 
    if (VERBOSE) { 
     Log.d(TAG, "audio encoder: returned input buffer: " + encoderInputBufferIndex); 
    } 
    ByteBuffer encoderInputBuffer = mAudioEncoder.getInputBuffer(encoderInputBufferIndex); 
    encoderInputBuffer.position(0); 
    encoderInputBuffer.put(zerodArray); 
    Log.d(TAG, "audio silence: pending buffer for time " + presentationTime); 


    mAudioEncoder.queueInputBuffer(
      encoderInputBufferIndex, 
      0, 
      zerodArray.length, 
      presentationTime,0); 

} 
関連する問題