Android MediaCodec-故意为音频曲目添加静音

Android MediaCodec-故意为音频曲目添加静音,android,audio,android-mediacodec,Android,Audio,Android Mediacodec,我已经设法将多个视频与音轨结合起来,但后来我意识到,如果我将多个视频与其中一个没有音轨的视频结合起来,我必须为组合的音轨添加静音 那么,我该怎么做呢?我应该给一个0填充的字节缓冲区编码,并加上时间戳以表示静默吗 那么,我该怎么做呢?我应该给一个0填充的字节缓冲区编码,并加上时间戳以表示静默吗 基本上是的。我正在使用下面的函数在特定的演示时间对沉默进行编码。 对于没有音频的视频长度,您应该以固定间隔对静音进行编码。我决定间隔应该与之前的音频相匹配。所以在我的例子中,我的第一个视频的音频呈现时间间隔

我已经设法将多个视频与音轨结合起来,但后来我意识到,如果我将多个视频与其中一个没有音轨的视频结合起来,我必须为组合的音轨添加静音

那么,我该怎么做呢?我应该给一个0填充的字节缓冲区编码,并加上时间戳以表示静默吗

那么,我该怎么做呢?我应该给一个0填充的字节缓冲区编码,并加上时间戳以表示静默吗

基本上是的。我正在使用下面的函数在特定的演示时间对沉默进行编码。 对于没有音频的视频长度,您应该以固定间隔对静音进行编码。我决定间隔应该与之前的音频相匹配。所以在我的例子中,我的第一个视频的音频呈现时间间隔是21333秒

使用这些信息,我开始编码沉默: 从第一个视频的音频+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);

}