本程序使用最新版的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 ;
}