我需要编写 C++ 函数来使用 LibAV API 将任何 mp3 文件转码为 G.711 编码的 wav 文件。由于我们在定制的 ARM 板上运行,我只能使用特定可用的交叉编译版本的 LibAV 库(很旧,不是最新的)。
这是我的计划如何实现这样的功能。请告知它是否有意义或我误解了转码流程。
1. Decode mp3 file
2. Encode uncompressed data with audio codec CODEC_ID_PCM_MULAW
3. Mux encoded data to wav container
非常简化的流程(没有错误检查和初始化细节)如下:
avformat_open_input(&format, sMp3FileName, NULL, NULL);
avformat_write_header(oc, NULL);
while (av_read_frame(format, &packet) >= 0)
{
// Decode one frame
avcodec_decode_audio4(codec, frame, &gotFrame, &packet);
// Encode one frame
avcodec_encode_audio2(pCodecCtx, &packet_out, frame, &gotFrame);
// Dump packet to wav file
av_interleaved_write_frame(oc, &packet_out);
}
av_write_trailer(oc);
请审查和建议。提前致谢。