1、图像基本知识
图像的组成:像素、RGB(每个像素由三个发光二极管组成)、分辨率(横纵向像素的个数乘积)
PPI每英寸的像素数
DPI每英寸的点数,有可能一个点有多个像素
PPI>300 就属于视网膜级别,就是很清晰,基本上看不出小像素了
分辨率:x轴像素*y轴像素个数
常见宽高比:16:9/4:3
帧率:每秒钟采集/播放的图像的个数(动画25帧/s ,实时通信一般15帧/s就够了)
RGB码流:
这个3其实就是RGB
RGB码流 = 分辨率*3(Byte)*帧率(25帧)
但是一般要乘以8才是平常说的码流(69*8=552M)
2、YUV介绍
3、YUV与RGB的关系
4、YUV格式(YUV4:2:0最常见)
所以YUV4:2:0的数据量为:
YUV4:2:0的存储格式
上面格式就I420
YV12就是I420中v和u互换位置
码流(下面格式乘以8,因为传输的是比特,下面计算的是字节)
5、YUV实战
ffmpeg生成yuv文件
项目实战(直接在上一节音频程序修改)
音频是:0 ,摄像头是0,桌面是1,摄像头及音频是0:0
6、h264视频编码基础知识(压缩视频)
YUV与h264的压缩比(YUV约为55.2Mbps)
做视频开发,可以参考下面网址,看看码流如何设置
https://docs.agora.io/cn
GOP概念
GOP就是将相似的图像分成一组,比如向下面这几个图,背景基本一样,主要就望远镜区别,基本就可以保存变化的地方就行
1)帧的分类(I帧/P帧/B帧,实时通信一般使用I帧跟P帧,因为B帧解码需要占用过多cpu;大量音视频转码一般就使用B帧多,因为减少存储空间)
I帧跟前后帧无关
p帧跟前面帧有关
B帧跟前后帧都有关
IDR帧是I帧
在每个IDR帧都会SPS和PPS参数
2)H264压缩技术
宏块
有损压缩
无损压缩
。。。自己查资料(比较难)
3)H264码流分层
NAL层(因为有编号,可以一定程度上解决乱序、重传、丢包问题)