音频AAC编码 fmepg3.3.0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011645307/article/details/77199692
文介绍一个最简单的基于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 ;
    }


                                                                             





猜你喜欢

转载自blog.csdn.net/u011645307/article/details/77199692