音视频开发继续学习

RGA模块

RGA模块定义

RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说:要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频,此时就要用到RGA模块了。

RGA模块结构体定义

RGA区域属性结构体

imgType:图像格式类型

u32X:RGA的X轴坐标

u32Y:RGA的Y轴坐标

u32Width:RGA的宽度

u32Height:RGA的高度

u32HorStride:虚宽,一般和宽度一样

u32VirStride:虚高,一般和高度一样

 

rga属性结构体

stImgIn:输入图像信息,一般填写的是原分辨率参数。比方说CMOS摄像头分辨率是1920*1080,则stImgIn分辨率就是1920*1080

stImgOut:输出图像信息,一般填写的是原分辨率参数。比方说要输出的是1280 * 720,则stImgOut分辨率就是1280 * 720

u16Rotation: 旋转角度,取值范围0, 90 ,180, 270

bEnBufPool使能缓冲池

u16BufPoolCnt:缓冲池计数

获取RGA的数据并保存

步骤如下:

初始化VI模块

设置VI模块并使能

启动VI模块

初始化RGA模块

 

绑定VI和RGA模块

 

创建线程

 

销毁 

视频编码原理讲解一:VCL层和NAL层的讲解

视频为什么要编码

在我们做音视频产品的时候,经常会把音视频数据进行网络传输,而此时音视频数据就需要进行编码(所谓编码就是指压缩)。因为在网络传输的时候,网络带宽有限,若此时网络传输的时候还用原始数据进行传输的时候,则会对网络带宽造成极大的负担。比方说一个分辨率为1280 * 720 帧率为30帧的视频,按照YUV420格式的计算,它每秒传输的数据量就是1280* 720* 30 * 3/2 ~= 39.5M,这个数据量是极其惊人的。所以此时,我们就要引入视频编码技术来压缩视频,让其体积大小能够大幅度缩小,这样在网络传输的时候就会大大降低网络负担。在音视频开发中,一般分为H264、H265这两种最常见的编码格式。H264的压缩比能够达到1:100,H265的压缩比能够达到1:200,但是目前业内由于HEVC技术还没完全成熟,所以绝大部分设备都是用H264进行压缩处理。

VCL层和NAL层的讲解

H264编码格式是目前业内最流行的视频编码格式,它是MPEG-4的第十个部分。H264具有高压缩率、高图像质量、网络适应性很强等特点。在同等的图像质量下,H264的压缩比远超绝大部分编码格式(HEVC除外)。在H264(HEVC)编码框架中分为两大层,一层是VCL(Video Coding Layer)、另外一层是NAL层(Network Abstraction Layer)。VCL层主要负责内容的表示(如下图),NAL层主要负责对H264数据进行打包和传输.

VCL层的知识点 

帧内压缩

也称之为空间压缩,当压缩一张图片的时候,若仅仅考虑帧的数据也不考虑相邻帧和帧之间的冗余数据,这样的方式就叫帧内压缩。在H264中I帧生成的原理就是帧内压缩,帧内压缩可以独立解码出一帧完整的图像而不需要参考任何帧,帧内压缩表现出来的数据是最大16 x 16的宏块(它也包括:4x4,8x8)。帧内压缩本质上是在空间的XY轴上进行压缩,它的压缩率比较小。下面9张图是9种不同的预测方式.

帧间压缩

帧间压缩是通过对比相邻两帧之间的数据进行压缩,并且进一步提高压缩量。用这种方法可以先编码出一个完整的图像1帧,紧接着2帧的数据就不编码出一张完整的图像,而是只写入和1帧的不同的数据,这样2帧数据的大小则会大大降低。以此类推,3帧的数据参考2帧数据,并且也只写入2帧不同的数据,帧间压缩表现出来的数据同样也是最大16 x 16的宏块(它也包括:4x4,8x8)。按照这样的方法,不停地循环下去。这样的方式,就是P帧B帧的实现方法。

变换量化

为了要让压缩的H264图像在网络传输中节省更多的码率,需要采用变换编码以及量化技术来消除图像信号中的相关性以及减小图像编码中的动态变换范围。变换编码的原理就是把图像时域信号变换成频域信号,在频域范围内,绝大部分信号集中在低频区域,相对时域信号,码率能够大幅度下降。而在H264中通常用下面方法进行处理:H264数据经过帧内压缩(16 * 16亮度、4 * 4亮度、8 * 8亮度)、帧间预测(4 * 4 ~ 16 * 16亮度)得到了残差值。这些残差值需要经过冗余的统计,并进行数据的变换和量化操作。

熵编码

熵编码压缩是一种无损压缩模式,其实现原理是使用的编码模式来表示输入的数据,并达到压缩效果。常用的熵编码方式分别是变长编码(CAVLC)和算术编码(CABAC)。

变长编码(CAVLC):对出现概率大的符号,对出现概率小的符号提供长字节二进制码

算术编码(CABAC):采用一个浮点数代替一串输入符号,范围是[0,1)

具体的参考(https://blog.csdn.net/yanceyxin/article/details/82965656)

CABAC的编码压缩率远远大于CAVLC,CABAC具有更高的编码效果。

 视频编码原理讲解二:H264重点帧和GOP的讲解

帧的概念

在视频中,帧是视频传输的最小单位。一帧实际上静态图片,视频本质上是由连续的静态图片组成,我们经常耳熟能详的30帧、60帧实际上指的就是静态图片的数量。比方说30帧:它指的是1秒内有30张静态图片;而60帧,它指的是1秒内有60张静态图片。换言之,帧率越高,它所生成的静态图片就越多,视频质量就越好、视频的流畅度也更好。

 I帧

I帧就是我们常说的关键帧(NALU:00 00 00 01 65),它不需要参考任何帧就可以拥有一副完整的画面。

 P帧

P帧是前向预测帧,它需要根据本帧和相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。下面是P帧的图解:

从上面这张图我们可以看出来,P帧(1号)的压缩数据需要参考I帧的数据进行视频的压缩,而P帧(2号)需要参考P帧(1号)的数据进行视频压缩。换言之,P帧它需要不停地参考前面帧的数据才能够压缩本帧数据。

B帧

B帧属于双向预测的帧,它需要根据相邻的前一帧数据、以及后一帧数据的不同点来压缩本帧,换言之B帧只记录本帧和前后帧的差值。B帧的压缩比是三种帧里面最高的,压缩比能够达到200:1。B帧常用在高清电影的和蓝光影响的录制。

 

GOP的概念

GOP(Group of Pictures,中文名称是图像组)它是把一个图像序列中连续几个图像组成一个小组,它本质上是两个I帧的距离。通常来说,GOP的长度越长P帧/B帧的数量就会越多,压缩比更高,画面质量越好,所以在音视频开发中经常会用GOP的长度来改善画面质量。

闭合GOP

闭合GOP是指不对外开放的GOP结构,它的特点是GOP内的帧不可以参考其前后其他的帧,闭合GOP一般都是以I帧开头

开放GOP

允许其内的帧参考其他GOP内的帧,一般而言在有B帧的情况下才会出现open-gop

GOP的设置

一般是帧率的整数倍。比方说视频的帧率是30帧,则GOP的长度最好设置为30、60等。若帧率是60,则把GOP设置为60、120等。

视频编码原理讲解三:视频码率和视频码率控制模式

码率的概念

视频码率是数据传输时单位时间内传输的数据位数,对于视频来说视频码率的单位是kbps(千比特率)每秒。简单说,码率就是取样率,码率越高画面质量精度越高,处理的文件或者码流就越接近原始文件。视频码率传输的大小跟分辨率是息息相关的

什么是码率控制模式 

码率控制指的是利用编码中的一些特殊手段控制图像的压缩比例,使其画面质量在不同的场景中保持一个最优的状态。RV1126的码率控制方式,总共分为三种:分别是CBR固定码率控制模式、VBR可变码率控制模式、AVBR码率控制模式。

CBR固定码率控制模式

CBR指的是固定比特率,它指的是在统计时间内编码码率处于平稳状态。这种方式的特点是码率调节会相对比较缓慢,它不会跟着图像的质量的波动去改变码率。CBR控制模式一般用于网络流媒体视频编码。CBR的优点在于压缩速度非常快,并且码率很平稳不会出现码率跳变的情况。但缺点也很明显,就是它不会根据画面的波动对码率进行节省,这样的话会导致每秒空间的浪费。在RV1126的API里面,CBR一般用平均比特率去表示。

VBR可变码率控制模式

VBR指的是动态码率,它的作用是在统计时间内允许编码编率出现波动,这种波动可以使得编码图像质量变高。VBR的特点是它是随着图像的复杂程度的不同而变化。假设在编码到简单图像的时候它会节省码率,而如果编码到一些相对复杂的图像它的码率将会提升,VBR模式一般使用在DVD、蓝光、HD录播上面。VBR同样也有优缺点,VBR的优点是它的尽可能保证整个图像编码质量,利用VBR编码的图像很少会出现马赛克、画面丢失的情况。但缺点同样也很明显,使用VBR编码出来的图像它的体积是不固定的。所以,它会根据画面的复杂程度去决定视频文件的大小,另外还有的是使用VBR进行编码的时候它的编码算法复杂度会变高,这就会导致解码端的复杂度升高。

AVBR码率控制模式

AVBR全称叫适配式可变码率控制方式,它的很多思想跟VBR基本上是一致的。但它比VBR强大的一点是这种控制方式能够自动检测当前编码场景是静止画面还是运动画面。若当前画面是静止画面则会主动降低码率、若当前画面是运动画面则会把码率主动提升。AVBR适用于当前编码视频静止画面运动画面频繁出现的场景,所以AVBR码率控制方式经常用在大型体育比赛上面。

RV1126的视频编码模块的讲解

VENC模块的介绍

VENC模块是RV1126专门用于视频编码的模块,VENC模块提供了多种编码方式,分别是:H264/H265/MJPEG/JPEG。而在此次编码模块中,我们重点是讲解H264、H265编码模块(MJPEG/JPEG用的不多,所以就不作详细讲解)。

VENC结构体的定义

VENC_CHN_ATTRS是管理整个VENC模块的管理结构体,这里面它包含三个VENC子类结构体:分别是VENC_ATTR_S结构体(编码器基础属性结构体)、VENC_RC_ATTR_S结构体(编码码率控制属性结构体)、VENC_GOP_ATTR_S结构体(编码器GOP属性结构体)。

VENC_ATTR_S结构体(编码器基础属性结构体)

这个结构体主要是设置编码器的基础属性,比方说:分辨率、编码器类型、Profile等等

enType

编码器协议类型,下面是画框部分就是它支持的视频编码类型:包括RK_CODEC_TYPE_H264、RK_CODEC_TYPE_H265、RK_CODEC_TYPE_JPEG、RK_CODEC_TYPE_MJPEG

 imageType

输入图像类型,venc的imageType和VI的imageType必须保持一致

u32VirWidth

编码图像的虚宽,一般虚宽和宽度保持一致

u32VirHeight

编码图像的高度,一般高度和高度保持一致

 u32Profile

H264支持66:baseline、77: MP、100:HP。H265支持default:Main;

 bByFrame

RW,范围是[0,1],默认是0

u32PicWidth

编码图像宽度

 u32PicHeight

编码图像高度

enRotation

图像旋转角度,VENC_ROTATION_0, VENC_ROTATION_90, VENC_ROTATION_180,VENC_ROTATION_270。

编码器额外属性

VENC_ATTR_H264_S、VENC_ATTR_H265_S、VENC_ATTR_MJPEG_S、VENC_ATTR_JPEG_S

VENC_RC_ATTR_S结构体(编码码率控制属性结构体)

这个结构体主要设置码率控制属性,这其中包括:enRcMode、stH264Cbr(H264的CBR码率控制模式)、stH264Vbr(H264的VBR码率控制模式)、stH264Avbr(H264的AVBR码率控制模式)、stMJpegCbr(MJPEG的CBR模式)、stMJpegVbr(MJPEG的VBR模式)、stH265Cbr(H265的CBR码率控制模式)、stH265Vbr(H265的VBR码率控制模式)、stH265Avbr(H265的AVBR码率控制模式)

enRcMode:码率控制类型,下面是不同编码的控制码率类型(注意:编码类型必须要和码率控制的编码类型要一致,比方说:若enType是H264,那enRcMode对应的码率控制结构体是stH264Cbr、stH264Vbr、stH264Avbr结构体)。

 

 

2.2.6.1. u32SrcFrameRateNum:数据源帧率分子

2.2.6.2.u32SrcFrameRateDen:数据源帧率分母

2.2.6.3.u32DstFrameRateNum:目标帧率分子

2.2.6.4. u32DstFrameRateDen:目标帧率分子

2.2.6.5. u32BitRate:平均码率,取值范围[2000, 98000000]bps(比特数)

2.2.8. stH265Cbr:H265的CBR码率控制结构体

VENC_H265_CBR_S结构体的参数和VENC_H264_CBR_S参数一致

2.2.9. stH265Vbr:H265的VBR码率控制结构体

VENC_H265_VBR_S结构体的参数和VENC_H264_VBR_S参数一致

2.2.10. stH265AVbr:H265的VBR码率控制结构体

VENC_H265_AVBR_S结构体的参数和VENC_H264_AVBR_S参数一致

VENC_GOP_ATTR_S结构体(编码器GOP属性结构体)

这个结构体主要是设置编码器的GOP属性

2.3.1.1. VENC_GOPMODE_NORMALP:普通GOP模式

2.3.1.2. VENC_GOPMODE_TSVC:TSVC模式

2.3.1.3. VENC_GOPMODE_SMARTP:智能SMARTP模式

2.3.2. u32GopSize:编码GOP大小,可以理解为关键帧间隔数量

2.3.3. s32IPQpDelta:I帧相对于P帧的QP差值

2.3.4. u32BgInterval:长期参考帧间隔(SMARTP模式才会用到)

2.3.5. s32ViQpDelta:虚拟I帧相对于普通P帧的QP差值

通过多线程获取VENC的H264码流数据

步骤流程

VI模块不在演示,跟上面都是一样的

初始话VENC模块

绑定VI和VENC模块

创建线程

销毁

H265码流结构的分析 

H265的优势和特点

H265编码(也称之为HEVC编码),它是继H264之后所制定的一个全新的视频编码标准。H265保留了许多H264的技术,并在H264的基础上使用了全新的技术来改善编码质量和画面质量。H265的优势在于超高的压缩比(压缩比高达1:200)编码超高清的分辨率,如:4K分辨率(3840 * 2160)、8K分辨率(7680 * 4320),一般只有在编码超高清分辨率的时候才会用到H265编码,普通的分辨率如:1920 * 1080以下的分辨率只需要H264即可(这是由于H265虽然压缩比非常高,但是它的算法复杂程度也远超H264,对于一般播放器来说CPU运算也过于复杂)。

H265的帧内预测

H265的帧内预测比H264更加灵活,H264帧内预测只支持16 * 16的宏块。但是H265能够支持支持多种尺寸的宏块预测,包括4 * 48 * 816 * 1632 * 32多种宏块的预测。 下面我们来看看,两种编码格式的区别。

通过多线程同时获取H264和H265码流

步骤流程

初始化VI模块

初始化H264

初始化H265

绑定VI和H264

绑定VI和H265

创建线程

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

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

相关文章

LeetCode-3148. 矩阵中的最大得分

本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教. 1.题干 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻&…

提高办公效率,四款语音转文字工具推荐!

无论是在会议记录、采访速记还是日常笔记中,语音转文字技术都展现出了其独特的价值。接下来是就为大家推荐几款市面上广受好评的语音转文字工具! 365在线转文字 链接:https://www.pdf365.cn/ 365在线转文字是一款非常实用的在线语音转文字…

【Unity/网络】Unity和内网穿透的网络测试 —— 以聊天室为例

这两天在做那个CodeMonky的胡闹厨房的案例,一直困扰我的是关于Lobby和Relay的相关网络服务,需要挂加速器并且延迟不低,所以我一直在寻找一些其他替代方案,想起来之前做一个UEC的网络枪战时做过一个内网穿透的方法,所以…

机械行业数字化生产供应链产品解决方案(十二)

我们为机械行业提供的数字化生产供应链解决方案通过集成物联网、人工智能和大数据技术,打造了一套智能化的生产和供应链管理系统,实现了从设计、生产到物流的全程数字化、智能化。该系统通过实时数据采集与分析,优化生产计划和资源配置&#…

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第二篇:项目登录功能的实现

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

怎么等比例调整图片尺寸大小?调整图片尺寸的8个方法

在数字时代,图片已成为我们日常生活与工作中不可或缺的一部分。从社交媒体分享到专业设计项目,图片的质量和外观直接影响着信息的传达与接收。因此,在处理图片时,保持其原始的纵横比,即等比例调整图片尺寸,…

梅丽尔·斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越”

梅丽尔斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越” 2024-08-14 20:38 发布于:河北省 该中心将为美国演员工会和美国电视广播艺人协会的艺术家提供资源和机会,而且全部免费 同时命名的还有汤姆汉克斯和丽塔威尔逊放映室、妮可…

PHP 无参数RCE总结

在这篇文章中,我总结了在参与CTF比赛过程中积累的关于PHP无参数远程代码执行(RCE)的经验。由于一直以来时间有限,今天终于有机会整理这些知识点。 可能用到的函数(PHP的内置函数) localeconv() 函数返回一…

安美数字酒店宽带运营系统 weather.php 任意文件读取漏洞复现

0x01 产品简介 HiBOS酒店宽带运营系统是由安美世纪(北京)科技有限公司开发的一套专为酒店设计的宽带管理系统。该系统旨在提升酒店宽带服务的运营效率和安全性,为酒店客人提供稳定、高速、便捷的上网体验。 0x02 漏洞概述 安美数字酒店宽带运营系统 weather.php …

Ansible自动化运维中剧本角色(roles)来完成apache服务操作

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! Ansible…

Kafka服务端日志详解

文章目录 服务端日志Topic消息存储方式主体介绍log文件追加记录消息index和timeindex索引文件 日志文件清理Kafka的文件高效读写机制Kafka的文件结构顺序写磁盘零拷贝 合理配置刷盘频率客户端消费进度管理 服务端日志 Kafka的日志信息是通过conf/server.properties文件中的log…

互联网红利消退,AI 大模型接棒新红利

在科技发展的浪潮中,互联网曾经是推动经济增长和社会变革的强大引擎,为无数企业和个人带来了巨大的红利。然而,随着时间的推移,互联网红利似乎正在逐渐消退,而与此同时,AI 大模型正以其强大的创新能力和广泛…

搜索旋转排序数组

搜索旋转排序数组 没思路。 看了下全网的思路,一个个来o,多做点题就知道了二分不仅仅只能用在有序的数组中。 这道题很关键的一个值就是nums[0]。 法一:先用二分找到旋转点,旋转点两边都是的,判断要搜索的值在哪边,…

玩转haproxy --花十分钟看看,全是干货

Haproxy是一款开源集群软件(在上一篇文章中提到过集群的相关知识,往期点击http://t.csdnimg.cn/qWtQG)是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的,是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 …

Linux Day1 系统编程和文件操作

系统编程内容 文件I/O (输入/输出): 1)使用标准库函数如fopen, fclose, fread, fwrite, fgetc, fputc, fgets, fprintf, fscanf等进行文件操作。 2)使用open, close, read, write等系统调用来实现底层文件操作。 进程管理: 1)使用fork, e…

安卓用户专属福利:OfficeSuite中文高级版,让你的工作更轻松!

OfficeSuite – 世界顶级移动办公软件!Google Play商店下载最多的办公软件应用,迄今为止,智能手机平台上,功能最强大、兼容性最好的移动Office办公套件。创建,查看和编辑Word,Excel和PowerPoint文档&#x…

ThinkPHP5漏洞分析之代码执行

漏洞概要 本次漏洞存在于 ThinkPHP 的缓存类中。该类会将缓存数据通过序列化的方式,直接存储在 .php 文件中,攻击者通过精心构造的 payload ,即可将 webshell 写入缓存文件。缓存文件的名字和目录均可预测出来,一旦缓存目录可访问…

python自动化笔记:os模块和异常处理

目录 一、os模块1.1、常用方法1.2、其他方法(了解即可) 二、异常处理 try except2.1、语法格式1:2.2、语法格式2:指定异常类别,捕获异常2.3、语法格式3:try-finally 语句无论是否发生异常都将执行最后的代码…

SQL每日一练-0814

今日SQL题难度:🌟☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表:Employees 和 Departments,记录了员工和部门信息。…

【机器学习】ImageNet的基本概念以及如何使用ImageNet数据集

引言 ImageNet是一个大型的图像数据库,它根据WordNet的层级结构(目前仅限于名词)组织,其中每个层级节点都由成百上千张图像来描绘。这个项目对计算机视觉和深度学习研究的发展起到了重要作用 文章目录 引言一、ImageNet的基本概念…