本节介绍rkmedia中aenc/adec模块的使用
音频编解码是通过对rkaudio的封装实现,目前支持
编码:G711A/G711U/G726/MP2
解码:G711A/G711U/G726
因为版权等问题,已经不支持aac和mp3格式
编码初始化:
AENC_CHN_ATTR_S aenc_attr;
aenc_attr.enCodecType = RK_CODEC_TYPE_MP2;
aenc_attr.u32Bitrate = 64000;
aenc_attr.u32Quality = 1;
aenc_attr.stAencMP3.u32Channels = 2;
aenc_attr.stAencMP3.u32SampleRate = 16000;
ret = RK_MPI_AENC_CreateChn(mpp_chn_aenc.s32ChnId, &aenc_attr);
if (ret) {
printf("Create AENC[0] failed! ret=%d\n", ret);
return -1;
}
解码初始化:
ADEC_CHN_ATTR_S stAdecAttr = {0};
stAdecAttr.enCodecType = code_type;
if (code_type == RK_CODEC_TYPE_G711A) {
stAdecAttr.stAdecG711A.u32Channels = u32ChnCnt;
stAdecAttr.stAdecG711A.u32SampleRate = u32SampleRate;
} else if (code_type == RK_CODEC_TYPE_G711U) {
stAdecAttr.stAdecG711U.u32Channels = u32ChnCnt;
stAdecAttr.stAdecG711U.u32SampleRate = u32SampleRate;
}
ret = RK_MPI_ADEC_CreateChn(0, &stAdecAttr);
if (ret) {
printf("ERROR: Create ADEC[0] failed! ret=%d\n", ret);
return -1;
}
只有g711a/u需要配置u32Channels、u32SampleRate参数,其他只需配置enCodecType参数即可。
编解码g726时注意只能配置成8khz单声道。
rkmedia提供编解码demo:rkmedia_ai_aenc_test 、rkmedia_adec_ao_test
执行时一般只要配置-r -c -o -t -l 选项即可,-f -d选项保持默认即可。
编码g726:rkmedia_ai_aenc_test -r 8000 -c 1 -t 4 -o aenc.g726
解码g726:rkmedia_adec_ao_test -i aenc.g726 -r 8000 -c 1 -t 4
提供ffmpeg电脑端解码命令,用于测试验证编码数据。
1、解码播放g726:ffplay -f g726 -ar 8000 -ac 1 -code_size 2 -i aenc.g726 (code_size 范围2-5对应16kbps,24kbps,32kbps,40kbps)
2、解码播放g711a:ffplay -f alaw -ar 16000 -ac 2 -i aenc.g711a
3、解码播放g711u:ffplay -f mulaw -ar 16000 -ac 2 -i aenc.g711u
4、播放pcm数据:ffplay -ar 44100 -ac 1 -f s16le -i test.pcm
-ar | 表示采样率 |
-ac | 表示音频通道数 |
-i | 表示输入文件 |
-ab | bitrate 设置音频码率 |
-f | 表示格式 |
如有其他问题,可以在评论区一起探讨。