admin管理员组文章数量:1570215
本文介绍音频编码,使用了ffmpeg在音频编码器实现aac的编码。
技术简介
使用ffmpeg的编码器
使用模块(库)
使用ffmpeg的avcodec-58.dll
主要流程和代码
1、初始化音频编码器
int AacEncoder::init(AVSampleFormat format, int samplerate, int bitrate, int channels)
{
int err = ERROR_CODE_OK;
if (m_inited) {
return err;
}
do {
m_ringBuffer = new HELPER::RingBuffer<AVFrame>();
if (m_ringBuffer == nullptr) {
err = ERROR_CODE_ALLOC_FAILED;
break;
}
if (!m_ringBuffer->init(AAC_ENCODER_RINGBUFFER_SIZE)) {
err = ERROR_CODE_ALLOC_FAILED;
break;
}
AVCodecID codecId = AV_CODEC_ID_AAC;
m_codec = avcodec_find_encoder(codecId);
if (m_codec == nullptr) {
err = ERROR_CODE_FFMPEG_FIND_ENCODER_FAILED;
break;
}
m_encodeContext = avcodec_alloc_context3(m_codec);
if (m_encodeContext == nullptr) {
err = ERROR_CODE_FFMPEG_ALLOC_CONTEXT_FAILED;
break;
}
m_encodeContext->codec_type = AVMEDIA_TYPE_AUDIO;
m_encodeContext->codec_id = codecId;
m_encodeContext->sample_fmt = format;
m_encodeContext->bit_rate = bitrate;
m_encodeContext->sample_rate = samplerate;
m_encodeContext->channels = channels;
m_encodeContext->channel_layout = av_get_default_channel_layout(channels);
m_encodeContext->time_base = {
1, samplerate };
m_encodeContext->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
m_encodeContext->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
int ret = avcodec_open2(m_encodeContext, m_codec, nullptr);
if (ret < 0) {
err = ERROR_CODE_FFMPEG_OPEN_CODEC_FAILED;
break;
}
m_frame = av_frame_alloc();
if (m_frame == nullptr) {
err = ERROR_CODE_FFMPEG_ALLOC_FRAME_FAILED;
break
版权声明:本文标题:【音视频】音频编码-aac(七) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727664840a1124545.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论