RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集
前面两篇已经交代AI和AENC模块的配置,这篇就让这两个模块绑定起来,绑定的原因是,Aenc从Ai模块拿到采集的原始数据进行编码。
使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定,其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32ChnId 是通道号,通道号则从容器 AENC 容器获取。开启 AENC 线程采集每一帧视频编码数据并存储到音频队列。
绑定的函数是有rv1126通过的, RK_MPI_SYS_Bind,先来认识一下这个数据结构。

看到RK_MPI_SYS_Bind的参数是两个需要绑定模块,这两个数据结构,在之前说视频模块绑定的时候,已经说过了这两个参数。这里我偷懒一下,不说了。
{//1.VI和VENC绑定//1.1定义出AI和AENC模块MPP_CHN_S ai_channel;MPP_CHN_S aenc_channel;//1.2先把容器里面的id获取出来RV1126_AI_CONTAINER ai_container;get_ai_container(0, &ai_container);RV1126_AENC_CONTAINER aenc_container;get_aenc_container(0, &aenc_container);ai_channel.s32ChnId = ai_container.ai_id;ai_channel.enModId = RK_ID_AI; //这里用的AI模块,选AIaenc_channel.s32ChnId = aenc_container.aenc_id;aenc_channel.enModId = RK_ID_AENC;//这里用的AENC模块,选AENC//AI和VENC绑定ret = RK_MPI_SYS_Bind(&ai_channel, &aenc_channel);if(ret != 0){printf("AI和VENC绑定失败\n");}else{printf("AI和VENC绑定成功\n");}
}
绑定之后就开启线程,开始获取一帧一帧数据包。
//线程参数AENC_PROC_PARAM * aenc_proc_param = (AENC_PROC_PARAM*)malloc(sizeof(AENC_PROC_PARAM));aenc_proc_param->aenc_id = aenc_channel.s32ChnId;//2.创建AENC线程,获取音频编码数据pthread_t a_pid;ret = pthread_create(&a_pid, NULL,audio_aenc_thread, (void*)aenc_proc_param);
线程处理流程:
//获取编码数据的线程
void* audio_aenc_thread(void* args)
{int ret;//线程分离,自己回收资源pthread_detach(pthread_self());MEDIA_BUFFER mb = NULL;定义一个媒体缓存区,用于接受编码器的输出数据AENC_PROC_PARAM* aenc_arg = static_cast<AENC_PROC_PARAM*> (args);free(args);//一直循环在这里拿数据while(1){//获取音频编码器的数据mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_ADEC, aenc_arg->aenc_id, -1);if(!mb){printf("获取编码器数据失败\n");break; //推出循环}//获取成功printf("获取编码器数据成功\n");//为音频包分配一个内存audio_data_packet_t *audio_packet =(audio_data_packet_t*) malloc(sizeof(audio_data_packet_t));if(!audio_packet){perror("音频包分配内存失败\n");}memset(&audio_packet, 0, sizeof(audio_packet)); //清空内存//把拿到的音频编码数据拷贝packet包里面去memcpy(audio_packet, RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb));//把包的长度拷贝进去audio_packet->audio_frame_size = RK_MPI_MB_GetSize(mb);//把packet放到队列里面去 audio_queue->putAudioPacketQueue(audio_packet);//释放缓存区,方便下一个包使用RK_MPI_MB_ReleaseBuffer(mb);}//到这里就是获取缓存区失败,或者编码器里面没有内容了//释放绑定的接口,和释放AI和AENC模块MPP_CHN_S ai_channel;MPP_CHN_S aenc_channel;ai_channel.enModId = RK_ID_AI;ai_channel.s32ChnId = 0 ; //我只有一个是通道,如果有多个通道可以把ai的通道号一起传进来aenc_channel.enModId = RK_ID_AENC; aenc_channel.s32ChnId = aenc_arg->aenc_id; //AI的通道号已经被传了进来,所以不用在容器里面拿ret = RK_MPI_SYS_UnBind(&ai_channel, &aenc_channel);if(ret != 0 ){printf("解绑失败\n");}printf("解绑成功\n");ret = RK_MPI_AENC_DestroyChn(aenc_arg->aenc_id);if(ret != 0 ){printf("AENC销毁失败\n");}printf("AENC销毁成功\n");ret = RK_MPI_AI_DisableChn( 0 );if(ret != 0){printf("关闭AI模块势能失败\n");}printf("关闭AI模块势能成功\n");return nullptr;}
相关文章:
RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集
前面两篇已经交代AI和AENC模块的配置,这篇就让这两个模块绑定起来,绑定的原因是,Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定,其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...
excel实用工具
2. 命令 2.1 查找 vloopup...
基于.Net Core+Vue的文件加密系统
1系统架构图 2 用例图 管理员角色的用例: 文件分享大厅:管理员可以访问文件分享大厅,下载文件。个人信息管理:管理员可以更新自己的个人信息,修改密码。用户管理:管理员负责创建、更新或删除用户账户&…...
工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率
项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件,拥有多种属性,是机器视觉系统中的核心部件,具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …...
深入理解 Windows Server 的核心功能:现代 IT 架构的基石
深入理解 Windows Server 的核心功能:现代 IT 架构的基石 在现代 IT 基础架构中,Windows Server 一直扮演着不可或缺的角色。它不仅是一个强大的服务器操作系统,更是企业级解决方案的核心支柱。从中小型企业到跨国公司,Windows Server 提供了从身份管理到高可用性的一系列…...
WEB渗透技术研究与安全防御
目录 作品简介I IntroductionII 1 网络面临的主要威胁1 1.1 技术安全1 2 分析Web渗透技术2 2.1 Web渗透技术的概念2 2.2 Web漏洞产生的原因2 2.3 注入测试3 2.3.1 注入测试的攻击流程3 2.3.2 进行一次完整的Sql注入测试4 2.3.3 Cookie注入攻击11 3 安全防御方案设计…...
智能学习平台系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…...
Java学习,List移动元素
Java实现List中元素的循环移动(即将列表中的元素向右或向左移动指定数量的位置),可以使用多种方法。 List元素移动指定位置: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class…...
Linux-----线程同步(资源竞争和同步锁)
目录 资源竞争(背景) 锁(解决方式,实现同步) 互斥锁 读写锁 自旋锁 资源竞争(背景) 竞态条件 当多个线程并发访问和修改同一个共享资源(如全局变量)时,…...
当当网书籍信息爬虫
1.基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页…...
React实现拖拽特效
前言 最近,我看到一个工程师的个人网站上,采用了拖拽作品集的互动特效,既有趣又吸引眼球。经过一些研究,我发现其实借助一些现成的套件,就能轻松实现这样的效果。今天就带大家一起看看,如何通过 Framer Mo…...
【竞技宝】LOL:ning直播再次锐评
北京时间1月18日,目前英雄联盟LPL2025正在如火如荼的进行之中,很多队伍都已经打完了新赛季的首场比赛,其中就包括AL战队,AL在休赛期进行了大幅度的人员调整,整体实力相比之前增强了不少,在16日的比赛中,AL3-0轻松击败LGD拿下了赛季开门红,而AL的打野选手tarzan在本场比赛中表现…...
ThreeJS能力演示——界面点选交互能力
1、支持界面点选 点选模型整体思路是:根据camera位置作为起始点,叠加鼠标相对位置作为偏置,摄像头方向作为射线方向。 根据射线方向中的遇到的3D物体列表,第一个遇到的物体作为被点选的物体。 // 鼠标事件处理let selectedObjec…...
flutter的web页面
有几个服务器 有几个后台 直接通过web端进去虽然说很方便,但… 于是把web页面镶嵌到应用里面去, 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了,活的列表可以通过io去获取 import package:flutter/material.dart; imp…...
2025.1.17——三、SQLi regexp正则表达式|
题目来源:buuctf [NCTF2019]SQLi1 目录 一、打开靶机,整理信息 二、解题思路 step 1:正常注入 step 2:弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3:根据过滤名单构造payload step 4:regexp正则注…...
虚幻基础2:gameplay框架
能帮到你的话,就给个赞吧 😘 文章目录 ue框架:gameplay组成game modeactorcomponent player controllergame state 工作流程 ue框架:gameplay 组成 game mode 游戏类型和规则。可以控制游戏的开始与结束以及一些其他功能。 ac…...
使用 Go 语言生成样式美观的 PDF 文件
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
鸿蒙-点击Notification通知并打开App的具体页面
意图通知 获取router事件中传递参数并跳转 目前点击通知消息打开应用的指定页面,通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数,然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面&a…...
非科班转码第5年零241天
文章目录 非科班转码第5年零241天第一份工作鸭梨山大同事的帮助第二份工作新公司学到很多出海计划 非科班转码第5年零241天 第一份工作 2019年5月24日,我从机械工程转码后找到第一份工作——图像算法工程师,能得到这份工作纯属偶然,当时公司…...
数据库:MongoDB命令行帮助解释
MongoDB命令: mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程,负责数据存储和管理。mongos 是分片集群的路由进程,负责将请求路由到正确…...
探索开源软件 FireGeo:地理空间数据处理的新选择
探索开源软件 FireGeo:地理空间数据处理的新选择 在地理空间数据处理的领域中,开源软件正以其独特的优势逐渐崭露头角,为众多专业人士和爱好者提供了丰富多样的工具。FireGeo 作为其中一款开源软件,正吸引着越来越多人的关注&…...
告别双流!用Vision Transformer (ViT) 搭建单流目标跟踪器OSTrack,实测速度提升40%
单流目标跟踪新范式:ViT驱动的OSTrack实战解析 在计算机视觉领域,目标跟踪技术正经历着从传统双流架构向单流范式的革命性转变。当我们面对复杂场景中的实时跟踪需求时,传统方法的性能瓶颈日益凸显——特征提取与关系建模的割裂处理导致计算冗…...
Pixel Aurora Engine部署教程:Nginx反向代理+HTTPS配置像素AI服务公网访问
Pixel Aurora Engine部署教程:Nginx反向代理HTTPS配置像素AI服务公网访问 1. 项目介绍与准备 Pixel Aurora Engine是一款基于AI扩散模型的高端像素艺术生成工具,采用复古8-bit游戏风格界面设计。通过本教程,您将学会如何通过Nginx反向代理和…...
从HTTP到gRPC:etcd v2与v3 API调用差异及Postman实战解析
1. etcd v2与v3 API的核心差异解析 第一次接触etcd时,你可能和我一样被网上的v2教程坑过——照着文档发送HTTP请求却总是返回404错误。这其实是因为etcd v3默认关闭了v2 API支持,而大多数中文教程还在用陈旧的v2示例。让我们先理清这两个版本的本质区别&…...
别再手动调格式了!用C#和FastReport.Net搞定标签批量打印与90度旋转(附完整源码)
C#与FastReport.Net实战:打造高可用的标签批量打印与旋转解决方案 在仓储管理、物流配送和零售价签打印等场景中,开发人员经常需要处理各种规格的标签打印需求。传统的手动调整方式不仅效率低下,而且难以应对频繁变化的业务需求。本文将分享如…...
使用圣女司幼幽-造相Z-Turbo为MATLAB科学计算可视化生成示意图
使用圣女司幼幽-造相Z-Turbo为MATLAB科学计算可视化生成示意图 如果你用MATLAB做科研或者工程计算,肯定遇到过这样的烦恼:辛辛苦苦算出来的数据,最后要画图放进论文或者报告里时,总觉得那些图表有点“干巴巴”的,不够…...
融合多尺度特征与注意力机制的YOLOv5红外小目标检测优化方案
1. 红外小目标检测的技术挑战 红外遥感图像中的小目标检测一直是计算机视觉领域的难点问题。与可见光图像相比,红外图像具有低对比度、高噪声、目标尺寸小等特点,这使得传统检测算法难以取得理想效果。在实际应用中,军事侦察中的无人机识别、…...
QT5实战:如何用QTreeView打造层级分明的下拉菜单(附完整代码)
QT5实战:用QTreeView构建层级下拉菜单的工程化实现 在桌面应用开发中,标准的下拉菜单往往难以应对复杂的层级数据展示需求。想象一下文件浏览器中的树形目录、多级分类的商品筛选器,或是组织架构中的部门-人员选择场景——这些都需要更强大的…...
STM32驱动SG90舵机:从PWM原理到蓝牙远程控制实战
1. 认识SG90舵机与PWM控制 第一次拿到SG90这个小家伙时,我差点以为是个玩具电机。直到把它接上STM32,看到它能精准地停在指定角度,才意识到这玩意儿在机器人、智能家居里有多实用。SG90是一种微型舵机,三根线分别接电源࿰…...
为什么选择Practical Modern JavaScript:探索ES6未来发展方向
为什么选择Practical Modern JavaScript:探索ES6未来发展方向 【免费下载链接】practical-modern-javascript 🏊 Dive into ES6 and the future of JavaScript 项目地址: https://gitcode.com/gh_mirrors/pr/practical-modern-javascript Practic…...
