複数のビデオをオーディオトラックと組み合わせることができましたが、複数のビデオをオーディオトラックを持たないものの1つに結合すると、無音を追加する必要があります。結合されたオーディオトラックMediaCodec - 意図的にオーディオトラックに無音を追加する
どうすればいいですか?無音のタイムスタンプで0で埋められたByteBufferをエンコードする必要がありますか?
複数のビデオをオーディオトラックと組み合わせることができましたが、複数のビデオをオーディオトラックを持たないものの1つに結合すると、無音を追加する必要があります。結合されたオーディオトラックMediaCodec - 意図的にオーディオトラックに無音を追加する
どうすればいいですか?無音のタイムスタンプで0で埋められたByteBufferをエンコードする必要がありますか?
どうすればいいですか?無音のタイムスタンプで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);
}