音频AAC编码 fmepg3.3.0

文介绍一个最简单的基于FFMPEG的音频编码器。该编码器实现了PCM音频采样数据编码为AAC的压缩编码数据。编码器代码十分简单,但是每一行代码都很重要。通过看本编码器的源代码,可以了解FFMPEG音频编码的流程。

本程序使用最新版的ffmpeg库,接下对比着和大家说一下3.0以上版本和2.8的版本区别:

m_pCodecCtx->sample_fmt = AV_SAMPLE_FMT_S16;    改为   m_pCodecCtx->sample_fmt = AV_SAMPLE_FMT_FLTP;

原因是因为自ffmpeg 3.3.0以上默认不在编译以其他开源库;

m_pFrame->data[0] = frame_buf;                                                    m_pFrame->data[0] = m_encoderData 

                                                                                   改为                      m_pFrame->data[1] = m_encoderData;

m_pFrame->linesize[0] = dataLen;                                                  m_pFrame->linesize[0] = dataLen/2;
                                                                                                                 m_pFrame->linesize[1] = dataLen/2;

  了解ffmpeg AAC音频编码的会发现这是有2.8.6的左右通道一起编码修改成左右分别编码;原有的数据类型也由short数据类型修改为float 。下面数ffmpeg3.3.2代码段,如下:

if (m_isChannel)
    {
        for (int i = 0; i < dataLen; i += 2)
        {
            ((short*)m_encoderOneData)[i / 2] = ((short*)frame_buf)[i];
        }
        short2float((short*)m_encoderOneData, m_encoderData, dataLen);
        m_pFrame->data[0] = m_encoderData;
        m_pFrame->data[1] = m_encoderData;
        m_pFrame->linesize[0] = dataLen/2;
        m_pFrame->linesize[1] = dataLen/2;
    }
    else
    {
        short2float((short*)frame_buf, m_encoderData, dataLen);
        m_pFrame->data[0] = m_encoderData;
        m_pFrame->linesize[0] = dataLen ;
    }


                                                                             





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值