视频编码(持续更新)
来源:互联网 发布:宁波淘宝托管公司排名 编辑:程序博客网 时间:2024/05/18 16:17
1、为什要编码
编码的目的就是在最小图像或音频信息丢失情况下得到最大的数据压缩率,减轻带宽压力,例如:
一张1280*720的图片占用内存为:
每个像素由RGB组成,每个通道占用1byte,共3byte
带宽:以稳定的10Mbps带宽计算每秒传输的数据量
所以可以看出,10Mbps的带宽依然远远不能满足传输1280x720大小的图片。因为图片大小为2.64MB,网络传输最多每秒传输1.19MB,这样就会导致2秒多才看到一帧画面,整个视频流就会变得非常卡顿。
2、编码原理
去冗余。
2.1 数据冗余
2.2 视觉冗余
3、视频数据格式描述
3.1 YUV格式
YUV(Y:亮度,UV:色度和浓度) 有YUV4:4:4 YUV4:2:2 YUV4:2:1 YUV4:2:1
3.2 RGB格式
RGB(红,绿,蓝)
公式
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb
3、编码之前需要了解的基本概念
SPS:序列参数集(Sequence parameter set)
PPS:图像参数集(Picture parameter set)
SEI :附加增强信息(subjoin enhancement information)
VCL:视频编码层(Video Coding Layer)
NAL:网络提取层(Network Abstraction Layer)
NALU:网络提取层单元(Network Abstraction Layer Unit)
Slice:片(每一帧图像可以分为多个片)
MACROBLOCK:宏块
I帧:关键帧,包含完整的一幅画面的数据;解码时只需要本帧数据就可以完成
P帧:P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
B帧:B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU占用比较大。
补:各模块之间的关系图
补:各模块内部结构
4、编码流程
采集->编码
- 视频编码(持续更新)
- 蛋疼编码(持续更新)
- PHP 书籍 视频 共享[持续更新]
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...) .
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- ISF 视频下载地址(持续更新)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Mars视频之Handler笔记【持续更新】
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- Java自学视频整理(持续更新中...)
- FBX顶点变形目标通道
- <context:component-scan/> <mvc:annotation-driven /> 区别
- JS常用工具方法
- 仿淘宝搜索框
- 一次踩内存事件
- 视频编码(持续更新)
- 数组的方法
- 从app中切换到第三方地图
- scala版wordcount
- Tomcat虚拟目录与虚拟主机的配置
- tensorflow重复使用共享变量
- shell学习——基础命令
- PowerOJ1179-树链剖分
- Openjudge 2811 熄灯问题 枚举 爆搜