RV1126+FFMPEG推流项目(3)VI模块视频编码流程

饭宝  金牌会员 | 2025-1-16 05:27:40 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 898|帖子 898|积分 2694

 视频编码的流程:   

        本章节讲的是RV1126视频编码的流程,在整个项目之中视频编码功能是核心之一。视频编码流程主要分三步:VI的初始化VENC的初始化(硬件编码)绑定VIVENC节点开启VENC线程进行视频编码的收罗,留意一下这里的编码是硬件编码,不是利用ffmpeg软件编码
        rv1126有一份开辟手册,很多东西都是在内里找到了。
        视频收罗流程:

告急的结构体: 

        第一步要 rkmedia_function_init();该函数主要负责初始化rkmedia体系,确保体系准备就绪,可以执行后续的操作,它调用RK_MPI_SYS_Init()函数来进行实际的初始化工作
  1. //初始化所有rkmedia的模块
  2. int init_rkmedia_module_function()
  3. {
  4.     rkmedia_function_init(); //初始化rkmedia功能
  5. }
复制代码
        继续往下说之前,先来了熟悉几个告急的数据结构。RV1126_VI_CONFIG、RV1126_AI_CONFIG、RV1126_VENC_CONFIG、RV1126_AENC_CONFIG  这是个结构体都是本身封装的,对rv1126的一下api封装了一下都在rkmedia_config_public.h文件内里
        RV1126_VI_CONFIG:

  1. /**
  2. * @brief RV1126_VI_CONFIG 结构体定义
  3. *
  4. * 该结构体用于配置RV1126视频输入(VI)的相关参数。
  5. * 包含视频通道的ID和属性配置。
  6. */
  7. typedef struct
  8. {
  9.     unsigned int id;   ///< 视频通道ID,用于标识不同的视频输入通道
  10.     VI_CHN_ATTR_S attr; ///< 视频通道属性,包含通道的具体配置信息
  11. } RV1126_VI_CONFIG;
复制代码
        VI_CHN_ATTR_S:在rk1126的开辟文档内里


          RV1126_AI_CONFIG: 
  1. /**
  2. * @brief RV1126_AI_CONFIG 结构体定义
  3. *
  4. * 该结构体用于配置RV1126音频输入(AI)的相关参数。
  5. * 包含音频通道的ID和属性配置。
  6. */
  7. typedef struct
  8. {
  9.     unsigned int id;   ///< 音频通道ID,用于标识不同的音频输入通道
  10.     AI_CHN_ATTR_S attr; ///< 音频通道属性,包含通道的具体配置信息
  11. } RV1126_AI_CONFIG;
复制代码
        AI_CHN_ATTR_S:在rk1126的开辟文档内里


         RV1126_VENC_CONFIG:
  1. /**
  2. * @brief RV1126_VENC_CONFIG 结构体定义
  3. *
  4. * 该结构体用于配置RV1126视频编码(VENC)的相关参数。
  5. * 包含视频编码通道的ID和属性配置。
  6. */
  7. typedef struct
  8. {
  9.     unsigned int id;   ///< 视频编码通道ID,用于标识不同的视频编码通道
  10.     VENC_CHN_ATTR_S attr; ///< 视频编码通道属性,包含通道的具体配置信息
  11. } RV1126_VENC_CONFIG;
复制代码
       VENC_CHN_ATTR_S: 在rk1126的开辟文档内里
 

        RV1126_AENC_CONFIG: 
  1. /**
  2. * @brief RV1126_AENC_CONFIG 结构体定义
  3. *
  4. * 该结构体用于配置RV1126音频编码(AENC)的相关参数。
  5. * 包含音频编码通道的ID和属性配置。
  6. */
  7. typedef struct
  8. {
  9.     unsigned int id;   ///< 音频编码通道ID,用于标识不同的音频编码通道
  10.     AENC_CHN_ATTR_S attr; ///< 音频编码通道属性,包含通道的具体配置信息
  11. } RV1126_AENC_CONFIG;
复制代码
         AENC_CHN_ATTR_S:

开始编码: 

        在rkmedia_module_function.cpp(功能模块),另有一部分其他的源码,好比下面容器的一部分代码放在rkmedia_container.cpp (容器管理模块),主要功能是保存 VI 和 AI 初始化的设备节点,供多线程利用。这里就不上传了,不然就会很乱了,感兴趣的可以问我拿整个源码。
  1. int init_rkmedia_module_function()
  2. {
  3.     int ret;
  4.     rkmedia_function_init(); //初始化rkmedia功能
  5.     RV1126_VI_CONFIG rv_vi;
  6.     memset(&rv_vi, 0, sizeof(rv_vi));
  7.     //初始化rv_vi
  8.     rv_vi.id = 0; //视频通道ID
  9.     rv_vi.attr.pcVideoNode = COMS_DEVICE_NAME; //video视频节点路径
  10.     /*
  11.         VI捕获视频缓冲区计数,默认是3
  12.         比如说vi和摄像头直接基础没有缓存区,vi模块如果数度跟不上会造成数据的丢失
  13.         所以加上缓存区的,就可以减轻vi模块的压力,也是类似与一个生产着和消费着模型,主要是摄像头每时每刻都在采集数据不会停的
  14.         所以加上缓存去,就可以大大保存数据的完整性。至于为啥3,这是工程师的经验
  15.     */
  16.     rv_vi.attr.u32BufCnt = 3;
  17.     rv_vi.attr.u32Width = 1920;//视频输入的宽度,一般和CMOS摄像头或者外设的宽度一致
  18.     rv_vi.attr.u32Width = 1080;视频输入的高度,一般和CMOS摄像头或者外设的高度一致
  19.     rv_vi.attr.enPixFmt = IMAGE_TYPE_NV12; // 图形格式 和vi_chn_attr.enPixFmt保持一样
  20.    
  21.     /**
  22.      *  VI_CHN_BUF_TYPE_MMAP和VI_CHN_BUF_TYPE_DMA
  23.      *  VI_CHN_BUF_TYPE_DMA:vi模块直接和内存打交道,优点:速度快,缺点:如果硬件差的,可能会造成发热,频繁操作加快硬件损坏
  24.      * I_CHN_BUF_TYPE_MMAP:中间有一个虚拟内存,vi和内存不直接接触,优点:硬件使用时间会长,缺点:有一点点延迟,但是不影响
  25.      */
  26.     rv_vi.attr.enBufType = VI_CHN_BUF_TYPE_MMAP; //视频输入的图像格式,默认是NV12(IMAGE_TYPE_NV12)
  27.     rv_vi.attr.enWorkMode = VI_WORK_MODE_NORMAL; //VI的工作模式,默认是NORMAL(VI_WORK_MODE_NORMAL)
  28.     ret = rkmedia_vi_init(&rv_vi);
  29.     if(ret != 0)
  30.     {
  31.         printf("vi初始化失败\n");
  32.     }
  33.     else
  34.     {
  35.         printf("vi 初始化成功\n");
  36.         /**
  37.          * 设置容器的目的是为了后面开发,可以轻易拿到 vi的id,直接从容器里面拿
  38.          */
  39.         RV1126_VI_CONTAINER vi_container; //创建出容器
  40.         vi_container.id = 0;
  41.         vi_container.vi_id = rv_vi.id;
  42.         set_vi_container(0, & vi_container); //把vi_id设置到容器里面
  43.         
  44.     }
  45. }
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表