FFMPEG之解码MP3时报错Header missing

43 篇文章 0 订阅
14 篇文章 0 订阅

        最近一个项目是做环形四麦智能音箱,使用的是思必驰的语音服务,在进行TTS转换时,思必驰text转sppech的音频流是MP3编码格式的,而我的设备端要播放的音频是PCM格式,所以需要进行MP3转PCM之后再进行播放。刚开始是基于Madplay工具实现了转码功能。虽然功能实现了,但是由于libmad是在回调函数output中给出转码后的数据,不方便在我代码中进行逻辑控制,而且这个项目平台SDK已经集成了FFMPEG库,所以想到了换用FFMPEG来实现转码。但在使用过程中碰到如下问题:

        第一次MP3流转换时可以正常播放,第二次转换时,av_parser_parse2()接口返回的一帧数据长度不对,导致报错:[mp3 @ 0x7f64000ae0] Header missing

现象是成功转码一条TEXT之后,下一条就开始报错。猜想应该是第一条MP3数据转换完成之后,没有正常通知解码器“数据结束”。

于是增加一次“数据后处理”,即在转码完成后,通过avcodec_send_packet发送一次空数据给解码器:

增加这一步操作之后,就不再报Header missing的错误了,播放正常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你只需要使用 FFmpegMP3 解码库进行 MP3 解码,可以按照以下步骤进行环境配置: 1. 安装 FFmpeg 在 Linux 系统中,可以使用包管理器来安装 FFmpeg。例如,在 Ubuntu 或 Debian 系统中,可以运行以下命令来安装 FFmpeg: ``` sudo apt-get install ffmpeg ``` 2. 安装 libmp3lame 库 FFmpegMP3 解码库依赖于 libmp3lame 库。在 Ubuntu 或 Debian 系统中,可以使用以下命令来安装 libmp3lame 库: ``` sudo apt-get install libmp3lame-dev ``` 3. 配置 FFmpeg 在安装完 libmp3lame 库之后,需要重新编译 FFmpeg,以便它可以使用 libmp3lame 库进行 MP3 解码。 首先,需要下载 FFmpeg 的源代码: ``` git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg ``` 然后,进入 FFmpeg 的源代码目录,并运行以下命令: ``` ./configure --enable-libmp3lame make sudo make install ``` 这个命令将会重新编译 FFmpeg,并将 libmp3lame 库与 FFmpeg 集成在一起。 4. 解码 MP3 文件 使用 FFmpeg 解码 MP3 文件非常简单,只需要在终端中运行以下命令即可: ``` ffmpeg -i input.mp3 output.wav ``` 这个命令将会把 `input.mp3` 文件解码成 WAV 格式的音频文件,并保存为 `output.wav`。 如果你需要指定解码后的音频格式,可以在输出文件的文件名中指定格式。例如,如果你想要将 MP3 文件解码成 AAC 格式的音频文件,可以运行以下命令: ``` ffmpeg -i input.mp3 output.aac ``` 这个命令将会把 `input.mp3` 文件解码成 AAC 格式的音频文件,并保存为 `output.aac`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值