视频传输

Slides are all from Professor Roger Zimmermann. Only for note use

简述

Internet traffic中80%都是由视频传输导致的

如果我们在一定程度内压缩图像,视觉上并不会有太大区别,但占用空间会大大降低
image

压缩方法

图像压缩

JPEG是图像压缩用到的标准方法
以下是JPEG压缩用到的技术
Discrete Cosine Transform
Quantization
Differential coding
Zig-zag ordering
Run-length encoding

视频压缩

第一种方法是motion JPEG:
对每一帧都做JPEG压缩
但这种方法压缩比较低,但有以下优点

  1. 有效保存了每一帧的信息,这样比较便于后续的精确修改
  2. 延迟低,失真少

第二种方法是使用motion compensation
实际上视频中有许多重复信息

  1. 空间上,同一帧内相邻像素有很多相同
  2. 时间上,相邻帧有很多相同
    image

我们可以用motion vector的方式来记录帧之间的变化
image

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

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

下图是一个完整的结构图
image

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

视频传输

视频传输有几种类型
下面两种更加需要低延迟
image

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

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

如果黑线碰到了蓝线,也就是buffer空了,就会开始有client等待情况

因为数据传输速度不稳定,但用户播放视频的速度是稳定的,我们需要控制好buffer size
buffer starvation: buffer填充到了一定程度才开始播放视频
如果buffer starvation太大,则client需要等待太久才能开始视频
如果太小,则可能buffer空掉(黑线碰到蓝线)

Live Streaming
在live streaming中,如果有的frame晚到了,就会被丢掉,也就是丢包
这种情况下,loss rate和latency是一个tradeoff
image

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

posted @ 2022-05-15 12:20  wcvanvan  阅读(320)  评论(0)    收藏  举报