做视频网站教程,重庆网站模版建设,自己买服务器做网站,服装设计效果图RGA模块
RGA模块定义
RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说#xff1a;要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频#xff0c;此时就要用到RGA模块了。
RGA模块结构体定义
RGA区域属性结构体 imgType要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频此时就要用到RGA模块了。
RGA模块结构体定义
RGA区域属性结构体 imgType图像格式类型
u32XRGA的X轴坐标
u32YRGA的Y轴坐标
u32WidthRGA的宽度
u32HeightRGA的高度
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的压缩比能够达到1100H265的压缩比能够达到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的宏块(它也包括4x48x8)。帧内压缩本质上是在空间的XY轴上进行压缩它的压缩率比较小。下面9张图是9种不同的预测方式. 帧间压缩
帧间压缩是通过对比相邻两帧之间的数据进行压缩并且进一步提高压缩量。用这种方法可以先编码出一个完整的图像1帧紧接着2帧的数据就不编码出一张完整的图像而是只写入和1帧的不同的数据这样2帧数据的大小则会大大降低。以此类推3帧的数据参考2帧数据并且也只写入2帧不同的数据帧间压缩表现出来的数据同样也是最大16 x 16的宏块(它也包括4x48x8)。按照这样的方法不停地循环下去。这样的方式就是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的编码压缩率远远大于CAVLCCABAC具有更高的编码效果。 视频编码原理讲解二H264重点帧和GOP的讲解
帧的概念
在视频中帧是视频传输的最小单位。一帧实际上静态图片视频本质上是由连续的静态图片组成我们经常耳熟能详的30帧、60帧实际上指的就是静态图片的数量。比方说30帧它指的是1秒内有30张静态图片而60帧它指的是1秒内有60张静态图片。换言之帧率越高它所生成的静态图片就越多视频质量就越好、视频的流畅度也更好。 I帧
I帧就是我们常说的关键帧(NALU00 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支持66baseline、77: MP、100HP。H265支持defaultMain; bByFrame
RW范围是[0,1]默认是0
u32PicWidth
编码图像宽度 u32PicHeight
编码图像高度
enRotation
图像旋转角度VENC_ROTATION_0, VENC_ROTATION_90, VENC_ROTATION_180VENC_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. stH265CbrH265的CBR码率控制结构体
VENC_H265_CBR_S结构体的参数和VENC_H264_CBR_S参数一致
2.2.9. stH265VbrH265的VBR码率控制结构体
VENC_H265_VBR_S结构体的参数和VENC_H264_VBR_S参数一致
2.2.10. stH265AVbrH265的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_TSVCTSVC模式
2.3.1.3. VENC_GOPMODE_SMARTP智能SMARTP模式
2.3.2. u32GopSize编码GOP大小可以理解为关键帧间隔数量
2.3.3. s32IPQpDeltaI帧相对于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 * 4、8 * 8、16 * 16、32 * 32多种宏块的预测。 下面我们来看看两种编码格式的区别。 通过多线程同时获取H264和H265码流
步骤流程 初始化VI模块 初始化H264 初始化H265 绑定VI和H264 绑定VI和H265 创建线程