目录
0、概述
本文介绍了视频编码原理、H264编码格式、RTP/RTSP/SDP,适合新手入门,从视频编码到rtsp实时流传输,帮助新手理解。
1、视频编码
是指压缩编码。在计算机的世界中,一切都是0 和1 组成的,音视频的数据量庞大,如果按照裸流数据存储的话,那将需要耗费非常大的存储空间,也不利于传送。而音视频中,其实包含了大量0 和1 的重复数据,因此可以通过一定的算法来压缩这些0和1 的数据。特别在视频中,由于画面是逐渐过渡的,因此整个视频中,包含了大量画面/像素的重复,这正好提供了非常大的压缩空间。因此,编码可以大大减小音视频数据的大小,让音视频更容易存储和传送。
那么,未经编码的原始音视频,数据量至底有多大?以一个分辨率1920×1280,帧率30 的视频为例:共:1920×1280=2,073,600(Pixels 像素),每个像素点是24bit;也就是:每幅图片2073600×24=49766400 bit,8 bit(位)=1 byte(字节);所以:49766400bit=6220800byte≈6.22MB。这是一幅1920×1280 图片的原始大小(6.22MB),再乘以帧率30。也就是说:每秒视频的大小是186.6MB,每分钟大约是11GB,一部90 分钟的电影,约是1000GB。
1.1 组织
音视频编解码的国际标准
ITU(国际电信联盟)
ISO/IEC
JVT(Joint Video Team,视频联合工作组)
1)ITU 提出了H.261、H.262、H.263、H.263+、H.263++,这些统称为H.26X 系列,主要应用于实时视频通信领域,如会议电视、可视电话等;
2)ISO/IEC 提出了MPEG1、MPEG2、MPEG4、MPEG7、MPEG21,统称为MPEG系列。
3)ITU 和ISO/IEC 一开始是各自捣鼓,后来,两边成立了一个联合小组,名叫JVT(JointVideo Team,视频联合工作组)。
1.2 视频编码原理
原始视频压缩的目的是去除冗余信息,可以去除的冗余包括:
空间冗余:图像相邻像素之间有较强的相关性
时间冗余:视频序列的相邻图像之间内容相似
编码冗余:不同像素值出现的概率不同
视觉冗余:人的视觉系统对某些细节不敏感
知识冗余:规律性的结构可由先验知识和背景知识得到
视频编码技术优先消除的目标,就是空间冗余和时间冗余。
数据压缩是怎么分类的?
无损压缩(Lossless):
压缩前、解压缩后图像完全一致X=X',压缩比低(2:1~3:1)。典型格式例如:Winzip,JPEG-LS。
有损压缩(Lossy):
压缩前解压缩后图像不一致X≠X',压缩比高(10:1~20:1),利用人的视觉系统的特性。典型格式例如:MPEG-2,H.264/AVC,AVS。
形象的比喻就是把每帧都作为一张图片,采用JPEG 的编码格式对图片进行压缩,这种编码只考虑了一张图片内的冗余信息压缩,如图1,绿色的部分就是当前待编码的区域,灰色就是尚未编码的区域,绿色区域可以根据已经编码的部分进行预测(绿色的左边,下边,左下等)。
编码就是为了压缩。要实现压缩,就要设计各种算法,将视频数据中的冗余信息去除。
举个例子:如果一幅图(1920×1080 分辨率),全是红色的,我有没有必要说2073600次[255,0,0]?我只要说一次[255,0,0],然后再说2073599 次“同上”。
但是帧和帧之间因为时间的相关性,后续开发出了一些比较高级的编码器可以采用帧间编码,简单点说就是通过搜索算法选定了帧上的某些区域,然后通过计算当前帧和前后参考帧的向量差进行编码的一种形式,通过下面两个图2 连续帧我们可以看到,滑雪的同学是向前位移的,但实际上是雪景在向后位移,P 帧通过参考帧(I 或其他P 帧)就可以进行编码了,编码之后的大小非常小,压缩比非常高。