当前位置: 首页 > article >正文

RV1126+FFMPEG推流项目(8)AENC音频编码模块

        本节分享的是AENC音频编码模块,是负责在AI模块通道里面取出收集到的音频数据,进行编码。了解AENC模块之前,先来看一个数据结构“RV1126_AENC_CONFIG”,这个数据结构是自己封装的,里面有AENC通道号,和内部描述AENC模块的结构体:AENC_CHN_ATTR_S。

typedef struct
{
    unsigned int id;   ///< 音频编码通道ID,用于标识不同的音频编码通道
    AENC_CHN_ATTR_S attr; ///< 音频编码通道属性,包含通道的具体配置信息
} RV1126_AENC_CONFIG;

AENC_CHN_ATTR_S:

typedef struct rkAENC_CHN_ATTR_S {
  CODEC_TYPE_E enCodecType; //音频编码类型
  RK_U32 u32Bitrate;  //音频编码码率
  RK_U32 u32Quality;  //音频编码质量
  union {
    AENC_ATTR_AAC_S stAencAAC;  //AAC结构体
    AENC_ATTR_MP2_S stAencMP2;  //MP2结构体
    AENC_ATTR_G711A_S stAencG711A; //G711A结构体
    AENC_ATTR_G711U_S stAencG711U; //G711U结构体
    AENC_ATTR_G726_S stAencG726;   //G726结构体
  };

} AENC_CHN_ATTR_S;
 CODEC_TYPE_E enCodecType:硬盘编码类型,这个项目选择AAC。


 RK_U32 u32Bitrate;  音频编码码率

        u32Bitrate:音频码率指的是:音频压缩数据在单位时间内传输的数据量,比特率越大声音质量越好,和视频的码率一样,码率越大视频越清晰,AAC 推荐音频码率(64kbps、512kbps、1536kbps(AAC推荐))、 G711 推荐的码率(64KBPS)、 G726
推荐的比特率(32kbps )。这个它不像视频的编码器一样可以动态调节,这里基本是固定的。

RK_U32 u32Quality;  //音频编码质量

        RK_U32 u32Quality,默认是1就可以了,


union:

        联合体有五个数据结构,上面三个可以说是一个公共的配置,不管选择联合体里面的那应该都要设置配的三个参数。

    AENC_ATTR_AAC_S stAencAAC;  //AAC结构体
    AENC_ATTR_MP2_S stAencMP2;  //MP2结构体
    AENC_ATTR_G711A_S stAencG711A; //G711A结构体
    AENC_ATTR_G711U_S stAencG711U; //G711U结构体
    AENC_ATTR_G726_S stAencG726;   //G726结构体


 AENC_ATTR_AAC_S:AAC 编码属性结构体

  • u32Channels:AENC 音频编码通道,AAC 编码通道默认值为 2
  • u32SampleRate:AENC 音频采样率,采样率范围为 [7350, 96000]。
  • 推荐采样率:48000 和 44100
  • 注意:AENC 的采样率和 AI 的采样率要一致

AENC_ATTR_MP2_S:MP2 编码属性结构体

  • u32Channels:AENC 音频编码通道,MP2 编码通道数为 2
  • u32SampleRate:AENC 音频采样率,采样率范围为 [0, 48000]。

AENC_ATTR_G711A_S:G711A 编码属性结构体


(G.711 是一种由国际电信联盟(ITU-T)制定的音频编码方式,广泛运用于电话领域。G711A 指的是 13Bit 转换为 8Bit)

  • u32Channels:AENC 音频编码通道,G711A 使用 1 个通道
  • u32SampleRate:AENC 音频采样率,采样率默认为 8KHZ
  • u32NbSample:音频帧的采样个数,默认为 320。

AENC_ATTR_G711U_S:G711U 编码属性结构体


(G.711 是一种由国际电信联盟(ITU-T)制定的音频编码方式,广泛运用于电话领域。G711U 指的是 14Bit 转换为 8Bit)

  • u32Channels:AENC 音频编码通道,G711U 使用 1 个通道
  • u32SampleRate:AENC 音频采样率,采样率默认为 8KHZ
  • u32NbSample:音频帧的采样个数,默认为 320。

AENC_ATTR_G726_S:G726 编码属性结构体
(G.726 是 ITU-T 定义的音频编码算法,能够将 64kbps 的信号转换为 40kbps、32kbps、24kbps、16kbps,这个协议广泛运用于电话中)

  • u32Channels:AENC 音频编码通道,默认使用 1 个通道
  • u32SampleRate:AENC 音频采样率,采样率为 8KHZ。
  • u32NbSample:音频帧的采样个数,默认为 320。

 创建ANEC:

{
    //AENC音频编码模块
    RV1126_AENC_CONFIG rv_aenc;
    rv_aenc.id = 0; //默认都是从0开始
    //AVEN公共参数
    rv_aenc.attr.enCodecType = RK_CODEC_TYPE_AAC; //选择AAC编码器
    rv_aenc.attr.u32Bitrate = 153600;//AENC的音频码率
    rv_aenc.attr.u32Quality = 1; //编码质量
    rv_aenc.attr.stAencAAC.u32Channels = 2; //通道数
    rv_aenc.attr.stAencAAC.u32SampleRate =  48000;//音频采样率,和AI模块要一样
    ret = rkmedia_aenc_init(&rv_aenc);//初始化aenc
    if(ret != 0)
    {
        printf("初始化aenc失败\n");
    } 
    else
    {
        printf("aenc初始化成功\n");
        //设置容器保存aenc的通道号
        RV1126_AENC_CONTAINER aenc_container;
        aenc_container.id = 0;//索引
        aenc_container.aenc_id = rv_aenc.id;
        ret = set_aenc_container(0, &aenc_container); //设置容器里面
        if(ret != 0)
        {
            printf("aenc保存到容器失败\n");
        }
    }
    
    return 0;
}

 


http://www.kler.cn/a/508779.html

相关文章:

  • SDL2基本的绘制流程与步骤
  • 在Linux上如何让ollama在GPU上运行模型
  • mongoose 支持https踩坑纪实
  • C++(二十一)
  • 《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • SpringBoot:RestTemplate与IllegalArgumentException
  • 《Opencv》多对象模板匹配
  • Golang—— new() 、 make() 和简短声明符
  • 【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
  • Linux查看日志命令
  • StyleGaussian: Instant 3D Style Transferwith Gaussian Splatting 论文解读
  • 如何将本地电脑上的文件夹设置为和服务器的共享文件夹
  • 基于Flutter的物联网后台系统
  • C++ ——— string类oj题:字符串中的第一个唯一字符
  • 从零开始,掌握Django Web开发
  • 软件测试 —— Selenium常用函数
  • 软件测试—接口测试面试题及jmeter面试题
  • 【UE5.3】UnrealLink 安装:fix Detected compiler newer than Visual Studio 2022
  • 如何使用策略模式并让spring管理
  • MySQL无限极分类表设计:实战项目中的高效解决方案
  • npm介绍
  • 汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮
  • JSON数据格式转换
  • 使用C语言实现栈的插入、删除和排序操作
  • thinkphp8.0 likeadmin 框架添加API 文档自动生成工具 apidoc支持
  • QT信号槽 笔记