【音视频】音频编码-aac(七)

本文详细介绍了如何使用ffmpeg库进行AAC音频编码,包括技术简介、使用的模块(特别是avcodec-58.dll)、主要编码流程及代码实现,如初始化编码器、开启编码线程、数据源输入和结束编码线程等步骤。最终生成的AAC文件可以在Windows Media Player中播放。
摘要由CSDN通过智能技术生成

本文介绍音频编码,使用了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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值