视频传输
Slides are all from Professor Roger Zimmermann. Only for note use
简述
Internet traffic中80%都是由视频传输导致的
如果我们在一定程度内压缩图像,视觉上并不会有太大区别,但占用空间会大大降低

压缩方法
图像压缩
JPEG是图像压缩用到的标准方法
以下是JPEG压缩用到的技术
Discrete Cosine Transform
Quantization
Differential coding
Zig-zag ordering
Run-length encoding
视频压缩
第一种方法是motion JPEG:
对每一帧都做JPEG压缩
但这种方法压缩比较低,但有以下优点
- 有效保存了每一帧的信息,这样比较便于后续的精确修改
- 延迟低,失真少
第二种方法是使用motion compensation
实际上视频中有许多重复信息
- 空间上,同一帧内相邻像素有很多相同
- 时间上,相邻帧有很多相同
![image]()
我们可以用motion vector的方式来记录帧之间的变化

我们采用的方法如下
将帧分为三种:
I-frame:储存当前帧完整的信息
P-frame:储存motion vector,根据I-frame生成图像
B-frame:根据I-frame和P-frame生成
下图中红色为I-frame,蓝色为P-frame,白色为B-frame

然后我们将视频做一个层级结构,给每一级加一个header来记录信息
sequence header记录整个视频的信息
我们会将视频分为很多段,每一段叫做一个group of pictures(gop),每个gop会有一个I-frame,和一个gop header
每一帧又会有一个pic header
一帧下又有slice,MacroBlock等等结构
下图是一个完整的结构图

我们需要选用合适数量的gop,因为一个gop只有一个I-frame,
网络传输中存在丢失I-frame的可能,如果gop太少(太长),可能会导致整段视频丢失
如果gop比较多,会使得更加安全,而且每一个gop内的generation loss会降低,但需要储存的信息更多了
视频传输
视频传输有几种类型
下面两种更加需要低延迟

Stored Streaming
下图是一个stored streaming的结构

在stored streaming中,网络并不稳定,每一帧的延迟是不一样的,所以传输到client side的数据会先存在buffer,再按照固定帧率播放

如果黑线碰到了蓝线,也就是buffer空了,就会开始有client等待情况
因为数据传输速度不稳定,但用户播放视频的速度是稳定的,我们需要控制好buffer size
buffer starvation: buffer填充到了一定程度才开始播放视频
如果buffer starvation太大,则client需要等待太久才能开始视频
如果太小,则可能buffer空掉(黑线碰到蓝线)
Live Streaming
在live streaming中,如果有的frame晚到了,就会被丢掉,也就是丢包
这种情况下,loss rate和latency是一个tradeoff

我们还可以通过一些手段来修补丢包情况


浙公网安备 33010602011771号