P9 视频码率及其码率控制方式

前言 

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :本章主要讲解VI VENC模块和AI AENC模块的初始化及具体函数详解

01 什么是码率?

视频码率指的是数据传输单位数,也是指每秒钟传输的视频数据位数,单位是kbps千位/s。

通常来说码率越大,视频的精度越高。编码出来的视频文件,则会越接近原始YUV文件。

通常码率和分辨率息息相关。下面这张图就是分辨率和码率的关系

02 什么是码率控制方式?

码率控制指的是利用编码中的一些特殊手段控制图像的压缩比例,使其画面质量在不同的场景中保持一个最优的状态。

RV1126的码率控制方式,总共分为三种:

  1. CBR固定码率控制模式
  2. VBR可变码率控制模式
  3. AVBR码率控制模式。

2. 1. CBR控制码率详解

CBR指的是固定比特率,它指的是在统计时间内编码码率处于平稳状态。

这种方式的特点是码率调节会相对比较缓慢,它不会跟着图像的质量的波动去改变码率。

CBR控制模式一般用于网络流媒体视频编码。

  1. CBR的优点在于压缩速度非常快,并且码率很平稳不会出现码率跳变的情况。
  2. 但缺点也很明显,就是它不会根据画面的波动对码率进行节省,这样的话会导致每秒空间的浪费。在RV1126的API里面,CBR一般用平均比特率去表示。

从上图我们可以看出来,在RV1126的API里面。用

  • VENC_H264_CBR_S(H264的CBR控制模式)
  • VENC_MJPEG_CBR_S(MJPEG的CBR控制模式)
  • VENC_H265_CBR_S(H265的CBR控制模式)

2.2 H264_CBR结构体:

  1. u32Gop:关键帧间隔
  2. u32SrcFrameRateNum数据源帧率分子
  3. u32SrcFrameRateNum数据源帧率分母
  4. fr32DstFrameRateNum: 目标帧率分子
  5. fr32DstFrameRateDen 目标帧率分母
  6. u32BitRate:平均比特率[2000, 98000000]

2.3 H265_CBR结构体:

H265_CBR结构体的成员变量,跟H264_CBR结构体的成员变量是一样的。

2.4 MJPEG_CBR_S结构体:

  • u32Gop:关键帧间隔
  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32BitRate:平均比特率[2000, 98000000]

03 VBR控制码率模式详解

VBR指的是动态码率,它的作用是在统计时间内允许编码编率出现波动,这种波动可以使得编码图像质量变高。

VBR的特点是它是随着图像的复杂程度的不同而变化。假设在编码到简单图像的时候它会节省码率,而如果编码到一些相对复杂的图像它的码率将会提升。VBR模式一般使用在DVD上面。

VBR同样也有优缺点,VBR的优点是它的尽可能保证整个图像编码质量,利用VBR编码的图像很少会出现马赛克、画面丢失的情况。

但缺点同样也很明显,使用VBR编码出来的图像它的体积是不固定的。所以,它会根据画面的复杂程度去决定视频文件的大小,另外还有的是使用VBR进行编码的时候它的编码算法复杂度会变高,这就会导致解码端的复杂度升高。

在RV1126的API里面。

  1. VENC_H264_VBR_S(H264VBR控制模式)
  2. VENC_MJPEG_VBR_S(MJPEGVBR控制模式)
  3. VENC_H265_VBR_S(H265VBR控制模式)

VENC_H264_VBR_S结构体:

  • u32Gop:关键帧间隔
  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32MaxBitRate:最大比特率[2000, 98000000]

VENC_H265_VBR_S结构体:

H265_VBR结构体的成员变量,跟H265_CBR结构体的成员变量是一样的。

VENC_MJPEG_VBR_S的结构体:

  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32BitRate:平均比特率[2000, 98000000]

04 AVBR控制码率模式详解

AVBR全称叫适配式可变码率控制方式,它的很多思想跟VBR基本上是一致的。

但它比VBR强大的一点是这种控制方式能够自动检测当前编码场景是静止画面还是运动画面

若当前画面是静止画面则会主动降低码率、若当前画面是运动画面则会把码率主动提升。

AVBR适用于当前编码视频静止画面运动画面频繁出现的场景,所以AVBR码率控制方式经常用在大型体育比赛上面。

在RV1126的API里面。

  • VENC_H264_ AVBR_S(H264VBR控制模式)
  • VENC_MJPEG_AVBR_S(MJPEGVBR控制模式)
  • VENC_H265_AVBR_S(H265VBR控制模式)

4.1 VENC_H264_AVBR结构体:

  1. u32Gop:关键帧间隔
  2. u32SrcFrameRateNum数据源帧率分子
  3. u32SrcFrameRateNum数据源帧率分母
  4. fr32DstFrameRateNum: 目标帧率分子
  5. fr32DstFrameRateDen 目标帧率分母
  6. u32MaxBitRate:最大比特率[2000, 98000000]

VENC_H265_AVBR结构体和H264的也是一样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606382.shtml

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

相关文章

《微信小程序开发从入门到实战》学习七十五

6.8 文件API 6.8.4 删除文件API 使用wx.removeSavedFile可删除小程序中保存的本地文件。示例代码如下: // 获取文件列表 wx.getSavedFileList({ success(res) { if (res.fileList.length > 0) { // 删除第一个文件 wx.removeSavedFile({ filePath: res.fileLis…

react中使用 react-draggable 问题总结

react-draggable 是在使用 React 时经常用到的拖拽库,不过在使用时,下面是一些常见的问题,做此记录 1、在移动端中使用 react-draggable 进行拖拽操作时,在拖拽内部onClick事件是失效的 解决方案:使用onTouchStart来替换onClick事…

外包做了1个月,技术退步一大半了。。。

先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Doris 在工商信息商业查询平台的湖仓一体建设实践(02)

信息服务行业可以提供多样化、便捷、高效、安全的信息化服务,为个人及商业决策提供了重要支撑与参考。本文以某工商信息商业查询平台为例,介绍其从传统 Lambda 架构到基于 Doris Multi-Catalog 的湖仓一体架构演进历程。同时通过一系列实践,展示了如何保证数据的准确性和实时…

Java课程设计个人博客

目录 引言:在此说明在本次课设过程中所遇到的困难! 一、项目搭建的问题 Q1:Web项目应用啥么编译器编写? Q2:如何创建Web项目(MAVEN)? Q3:Tomcat服务器开头控制台显示乱码如何解决? Q4:Tomcat服务器怎么设置项目的…

2024最新腾讯云CVM服务器和轻量应用服务器有什么区别?

腾讯云轻量服务器和云服务器CVM该怎么选?不差钱选云服务器CVM,追求性价比选择轻量应用服务器,轻量真优惠呀,腾讯云服务器网txyfwq.com活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元…

过滤器和拦截器

上篇文章我们学习了 Session 认证和 Token 认证,这篇我们来学习一下过滤器和拦截器,过滤器和拦截器在日常项目中经常会用到。 一、过滤器 1.1、理论概念 过滤器 Filter 是 JavaWeb 三大组件(Servlet、Filter、Listener)之一&am…

Mac 环境多JDK安装与切换

一、下载jdk 去Oracle官网上下载想要安装的jdk版本,M芯片选择arm架构的.bmg格式的文件。 https://www.oracle.com/java/technologies/downloads/。 二、安装jdk 2.1 双击下载的文件,安装步骤一步步点继续就好。 2.2 安装完成后会在/Library/Java/JavaV…

【Linux Shell】9. 流程控制

文章目录 【 1. if else 判断 】1.1 if1.2 if else1.3 if elif else1.4 实例 【 2. case 匹配 】【 3. 循环 】3.1 for 循环3.2 while 循环3.3 until 循环3.4 无限循环3.5 跳出循环3.5.1 break 跳出所有循环3.5.2 continue 仅跳出当前循环 【 1. if else 判断 】 1.1 if fi 是…

国际新产品开发专业认证-NPDP

👑NPDP认证是美国产品开发管理协会(PDMA)所发起的新产品开发专业认证,是国际公认的wei一的新产品开发专业认证。 ✍🏻NPDP考试每年考2次,分别在每年的5月和11月。考试一共200道单选题,做对150道及格通过考试。 &#x…

应用层

title: 应用层 date: 2023-12-20 21:03:48 tags: 知识总结 categories: 计算机网络 应用层:负责最直观的应用请求的封装、发起 一、域名系统DNS 连接在互联网上的主机不仅有IP地址,还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机的名字…

亲测有效:腾讯云免费服务器30天申请流程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

【Unity】如何在Unity中使用C#的NuGet 包资源

【背景】 Unity的脚本语言是C#,而C#有很多功能和能力可以通过nuget包提供。有没有办法把这些能力结合到Unity中一起使用呢?如果可以,那将大大扩展Unity中各类功能实现的便捷性。 【方法】 答案是:你可以! 获取Nuge…

uniapp使用tcp和udp的区别和例子

在Node.js中,主要有三种socket:TCP,UDP和Unix域套接字。以下分别介绍这TCP/UDP的使用方法和示例: TCP socket TCP socket提供了可靠的、面向连接的通信流,适用于需要可靠传输的应用,例如Web浏览器的HTTP请…

[实践总结] java XML解析防止外部实体注入

防止部实体注入 /*** 增加防止部实体注入逻辑*/ public static void setReaderFeature(SAXReader reader) throws SAXException {// 禁用DTDreader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);// 禁用外部DTDreader.setFeature(&qu…

cpu缓存一致性

文章目录 cpu缓存一致性缓存的出现:多核之后带来的缓存一致性问题,如何解决LOCK 指令(刚好可以实现上述的目标)LOCK 指令特性内存屏障特性编译器屏障的作用MESI协议为什么有了 MESI协议 还需要 内存屏障问题:总结&…

创建第一个SpringMVC项目,入手必看!

文章目录 创建第一个SpringMVC项目,入手必看!1、新建一个maven空项目,在pom.xml中设置打包为war之前,右击项目添加web框架2、如果点击右键没有添加框架或者右击进去后没有web框架,点击左上角file然后进入项目结构在模块…

gem5学习(9):构建gem5——Building gem5

目录 一、Requirements for gem5 二、Getting the code 三、Your first gem5 build 1、gem5 binary types 四、Common errors 1、gcc版本过低 2、使用非默认版本的python 3、未安装M4宏处理器 4、Protobuf版本过低 前面的gem5学习(3)—&#xf…

基于Java SSM框架实现游戏论坛平台系统项目【项目源码+论文说明】

基于java的SSM框架实现游戏论坛平台系统演示 摘要 本论文主要论述了如何使用java语言开发一个游戏论坛平台的设计,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构、ssm 框架和 java 开发的 Web 框架,基于Werkzeug WSGI工具箱和…

react antd EditableProTable - 可编辑表格

与编辑表格外的内容联动 value 同 dataSource,传入一个数组,是 table 渲染的元数据 T[] undefined onChange dataSource 修改时触发,删除和修改都会触发,如果设置了 value,Table 会成为一个受控组件。 (value:T[])>void undefined recordC…