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);//初始化aencif(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.rhkb.cn/news/5168.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能新浪潮:亚马逊云科技发布Amazon Nova模型

在2024亚马逊云科技re:Invent全球大会上&#xff0c;亚马逊云科技宣布推出新一代基础模型Amazon Nova&#xff0c;其隶属于Amazon Bedrock&#xff0c;这些模型精准切入不同领域&#xff0c;解锁多元业务可能&#xff0c;为人工智能领域带来革新。 带你认识一起了解Amazon Nova…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

C++《AVL树》

在之前的学习当中我们已经了解了二叉搜索树&#xff0c;并且我们知道二叉搜索树的查找效率是无法满足我们的要求&#xff0c;当二叉树为左或者右斜树查找的效率就很低下了&#xff0c;那么这本篇当中我们就要来学习对二叉搜索树进行优化的二叉树——AVL树。在此会先来了解AVL树…

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

《Effective Java》学习笔记——第1部分 创建对象和销毁对象的最佳实践

文章目录 第1部分 创建和销毁对象一、前言二、创建和销毁对象最佳实践内容1. 优先使用工厂方法而非直接使用构造器2. 避免创建不必要的对象3. 避免使用过多的构造器4. 避免使用原始类型&#xff08;Raw Types&#xff09;5. 避免创建对象的过度依赖6. 清理资源和关闭对象&#…

解决conda create速度过慢的问题

问题 构建了docker容器 想在容器中创建conda环境&#xff0c;但是conda create的时候速度一直很慢 解决办法 宿主机安装的是anaconda 能正常conda create,容器里安装的是miniforge conda create的时候速度一直很慢&#xff0c;因为容器和宿主机共享网络了&#xff0c;宿主机…

【知识分享】PCIe5.0 TxRx 电气设计参数汇总

目录 0 引言 1 参考时钟--Refclk 2 发射端通道设计 3 发送均衡技术 4 接收端通道设计 5 接收均衡技术 6 结语 7 参考文献 8 扩展阅读 0 引言 PCI Express Base Specification 5.0的电气规范中&#xff0c;关键技术要点如下&#xff1a; 1. 支持2.5、5.0、8.0、16.0和3…

Java 的初认识(一)

好久不见兄弟们&#xff01;之前更新完 C 语言的内容之后呢&#xff0c;我是做了一个“ 短暂 ”的休息昂&#xff0c;当然我自己的学习是没有停歇的&#xff0c;只是在更新博客这上面休息了一下&#xff0c;主要还是想让自己先把这部分的知识掌握透彻了之后&#xff0c;再来为大…

2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?

模型假设仅仅是简单陈述吗&#xff1f;允许AI的使用是否降低了比赛难度&#xff1f;还在依赖机器学习的模型吗&#xff1f;处理题目的方法有哪些&#xff1f;O奖论文的优点在哪里&#xff1f; 本文调研了当年赛题的评委文章和O奖论文&#xff0c;这些问题都会在文章中一一解答…

C语言练习(17)

两个乒乓球队进行比赛&#xff0c;各出3人。甲队为A、B、C 3人&#xff0c;乙队为X、Y、Z 3人&#xff0c;并抽签决定比赛名单。有人向队员打听比赛的名单&#xff0c;A说他不和X比&#xff0c;C说他不和X、Z比&#xff0c;请编程序找出3对选手的对阵名单。 #include <stdi…

【回忆迷宫——处理方法+DFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…

Flowable 审核功能封装

文章目录 引言I 查询当前用户需要审核的数据列表整体逻辑根据组获取任务数据根据审核人获取任务数据II 进行审核整体逻辑III 审核历史查询IV 流程图查看流程进度思路根据任务 ID 获取任务进度流程图引言 流程引擎功能封装 : 审核列表数据查询进行审核的整体逻辑:获取任务 Id,…

Java-数据结构-二叉树习题(2)

第一题、平衡二叉树 ① 暴力求解法 &#x1f4da; 思路提示&#xff1a; 该题要求我们判断给定的二叉树是否为"平衡二叉树"。 平衡二叉树指&#xff1a;该树所有节点的左右子树的高度相差不超过 1。 也就是说需要我们会求二叉树的高&#xff0c;并且要对节点内所…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证8)

为进一步测试通过请求头传递token进行身份验证&#xff0c;在main.htm中增加layui的数据表格组件&#xff0c;并调用后台服务分页显示数据&#xff0c;后台分页查询数据接口如下所示&#xff08;测试时&#xff0c;直接将数据写死到代码中&#xff0c;没有查询数据库&#xff0…

Linux系统 C/C++编程基础——使用make工具和Makefile实现自动编译

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周二了&#xff0c;距离除夕只有&#xff16;天了&#xff0c;新的一年就快到了&#x1f606; 本文是有关Linux C/C编程的make和Makefile实现自动编译相关知识点&#xff0c;后续会不断添加相关内容 ~~ 回顾:【Emacs编辑器、G…

68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)

<?php // 声明命名空间&#xff0c;遵循 PSR-4 自动加载规范&#xff0c;命名空间为 Home\Controller namespace Home\Controller;// 导入 Think\Controller 类&#xff0c;以便扩展该类 use Think\Controller;// 定义 IndexController 类&#xff0c;继承自 Think\Control…

可以自己部署的微博 Mastodon

Mastodon&#xff08;又称乳齿象、长毛象或万象&#xff09;是一个自由开源的去中心化的分布式微博客社交网络。它的用户界面和操作方式跟推特&#xff08;Twitter&#xff09;类似&#xff0c;但整个网路并非由单一机构运作&#xff0c;而是以多个由不同营运者独立运作的伺服器…

机器学习-核函数(Kernel Function)

核函数&#xff08;Kernel Function&#xff09;是一种数学函数&#xff0c;主要用于将数据映射到一个更高维的特征空间&#xff0c;以便于在这个新特征空间中更容易找到数据的结构或模式。核函数的主要作用是在不需要显式计算高维特征空间的情况下&#xff0c;通过内积操作来实…

AQS公平锁与非公平锁之源码解析

AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…