如何在Android中使用MediaCodec将WAV文件转换为3gp

问题描述 投票:0回答:1

我尝试使用以下转换循环执行。

    while (true) {
        sampleSize = extractor.readSampleData(inputBuffer, 0)
        if (sampleSize < 0) break
        val presentationTimeUs = extractor.sampleTime
        val flags = extractor.sampleFlags

        val inputBufferId = codec.dequeueInputBuffer(codecTimeoutUs)

        if (inputBufferId >= 0) {
            val codecBuffer = codec.getInputBuffer(inputBufferId)
            codecBuffer?.put(inputBuffer)
            codec.queueInputBuffer(inputBufferId, 0, sampleSize, presentationTimeUs, flags)
        }

            extractor.advance()
       

        val outputBufferId = codec.dequeueOutputBuffer(bufferInfo, codecTimeoutUs)

        if (outputBufferId >= 0) {
            val codecBuffer = codec.getOutputBuffer(outputBufferId)
            muxer.writeSampleData(outputTrackIndex, codecBuffer!!, bufferInfo)
            codec.releaseOutputBuffer(outputBufferId, false)
        }
    }

结果是一个无效的.3gp 文件,你能帮我吗?

wav android-mediacodec 3gp
1个回答
0
投票

代码片段没有显示

MediaExtractor
MediaCodec
MediaMuxer
是如何配置的,所以图片不完整。

一般情况下,辅助

inputBuffer
必须在写入前清零,在读取前翻转。

但是让编解码器管理缓冲区更容易:

val inputBuffer = codec.getInputBuffer(inputBufferId)!!
val sampleSize = extractor.readSampleData(inputBuffer, 0)

此外,如果

sampleSize
为负数,则应将其视为文件结尾并通知编解码器:

codec.queueInputBuffer(inputBufferId, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM)
© www.soinside.com 2019 - 2024. All rights reserved.