多媒体入门 | 青训营笔记

256 阅读6分钟

这是我参与「第四届青训营 」笔记创作活动的的第9天

在当今市时代,多媒体与我们息息相关,短视频,直播等等都是多媒体的运用之一,如今多媒体的发展蓬勃向上。

web多媒体历史

web多媒体发展历程.png

web多媒体入门

编码格式

图像的基本概念

图像分辨率: 用于确定组成一副图像的像素数据,就是指在水平和垂直方向上图像所具有的像素个数。

图像深度: 图像深度是指存储每个像素所需要的比特数。图像深度决定了图像的每个像素可能的颜色数,或可能的灰度级数。例如,彩色图像每个像素用 R,G,B三个分量表示,每个分量用8位,像素深度为24位,可以表示的颜色数目为2的24次方,既166777216个;一副单色图像存储每个像素需要8bit,则图像的像素深度为8位,最大灰度数目为2的8次方,既256个。

视频基本概念

分辨率: 每一帧的图像分辨率

帧率: 视频单位时间内包含的视频帧的数量

码率: 就是指视频单位时间内传输的数据量,一般我们用kbps来表示,即千位每秒

视频帧

I帧,P帧,B帧

视频帧分为三种:I帧,P帧,B帧

I帧: 即关键帧,属于帧内压缩。可以理解为该帧画面被完整保留,解码时只需要本帧数据就可以完成。

P帧: 表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

视频帧.png

上图中,第1帧为 I帧 ,在解码的时候值需要本帧自己的数据即可,而后面的 第二帧 为 P帧 ,需要先解码前面第一帧的数据才能解码该帧。后面 第三帧,第四帧等等的数据也是如此,需要先解码前面一帧的数据,才能解码本帧的数据。

B帧: 双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。

Snipaste_2022-08-13_16-03-46.png

上图的第3帧为 B帧 , B帧需要依靠前后的两帧数据(第2帧和第3帧),因此,上面解码的循序是 124365

GOP

GOP 即两个 I帧 之间的间隔。

Snipaste_2022-08-13_16-10-03.png

运用场景

首先,如果我们抛开 B帧 ,仅仅谈论 I帧和P帧

I帧所占的空间更大。

但是我们也不能将一个视频全部设置为 P帧 ,因为如果用户想要将视频跳转到某个时刻,那么浏览器必须从开头的 I帧 开始,一直解压到该帧。这样显然会增加解压的时间。

因此,我们常常将一个 GOP 的时间间隔设置为2s或者4s。

那么,B帧的作用是什么呢?

从上面的解释看,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进。

但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。

为什么要进行编码?

Snipaste_2022-08-13_16-25-25.png

看上面这张图,如果不进行编码,那么一个 1920 * 1080的 90 分钟视频,需要占据933个G的内存,这是手机和PC都不能接受的。

204d835fac0d4ffbb2bb5efccc75af2e_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

而视频经过编码后,所占的内存将大大缩小。这就是编码的意义。

如何编码

空间压缩

Snipaste_2022-08-13_16-30-20.png

上面这张图片中的小黑框,放大了之后,我们发现里面的内容基本上是一模一样的,那么我们只需要存储重复了多少次,这样就可以极大的压缩视频的体积。

时间压缩

Snipaste_2022-08-13_16-34-12.png

上面这张图片,我们发现,其实台球,台球桌甚至是视角的位置都没有发生改变,那么后1帧的数据和前1帧的数据十分的相似,那么我们只需要存储后1帧与前1帧不同的地方就可以了。

是不是看起来十分的眼熟,这在我们上面将的P帧也有所涉猎。

编码压缩

Snipaste_2022-08-13_16-42-18.png

我们之前说过,每一个像素在存储的时候都占用24位,但想上面这张图片,只有两个颜色,那么我们可以将蓝色存为1,白色存为0,那么原来一个像素需要24位,现在就只需要1位即可。

视觉压缩

Snipaste_2022-08-13_16-49-11.png

当我们用 10像素 来表示一张图片的时候,图片可能会十分的模糊,但是当我们用 1000 像素 和 100000像素 来表示一张图片的时候,我们的人眼可能观察不出来什么差别,这时候,我们就可以利用人眼的视觉来压缩这些视屏。

编码数据的处理流程

Snipaste_2022-08-13_16-55-40.png

编码的格式

Snipaste_2022-08-13_16-57-04.png

封装格式

5400e71b115246e187e697d55b430974_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

多媒体元素和扩展API

video和audio

<video controls poster="../2.png" muted width="720px" height="720px">
    <source src="../1.mp4#t=2,10" type="video/mp4">      
</video>

方法

Snipaste_2022-08-13_19-30-03.png

Snipaste_2022-08-13_19-30-15.png

属性

除了上面展示的属性,video和audio还有很多属性。

Snipaste_2022-08-13_19-10-50.png

Snipaste_2022-08-13_19-22-43.png

事件

Snipaste_2022-08-13_19-35-06.png

Snipaste_2022-08-13_19-35-18.png

更加详细的video属性和方法等,可以参考这一篇博客: 从零开发弹幕视频播放器1 - 掘金 (juejin.cn)

媒体源扩展API

Snipaste_2022-08-13_20-20-41.png

更加详细的内容请参考:流媒体视频基础 MSE 入门 & FFmpeg 制作视频预览缩略图和 fmp4 - 掘金 (juejin.cn)

多媒体的应用场景

Snipaste_2022-08-13_20-51-03.png

参考文献

(97条消息) 什么是I帧,P帧,B帧_Rachel-Zhang的博客-CSDN博客_i帧

【青训营】-🎨走进Web多媒体技术 - 掘金 (juejin.cn)

从零开发弹幕视频播放器1 - 掘金 (juejin.cn)

流媒体视频基础 MSE 入门 & FFmpeg 制作视频预览缩略图和 fmp4 - 掘金 (juejin.cn)

结语

文章如果有不正确的地方,欢迎指正,共同学习,共同进步。

若有侵权,请联系作者删除。