为什么要编码?
看下面这张图,一个90分钟的视频就需要933G,而我们的手机大多256G、128G,PC端也很少有超过933G的,显然如果不通过编码的话,视频实在是太耗费空间了。
编码格式
- 空间冗余:存储相似以及相同的像素值,然后只需要记下来重复多少次即可,可以大大节省空间。
- 时间冗余:两个十分相近的时间,图像基本是一样的以及类似的,可能会有99%的相同部分和1%的不同部分,这时我们可以把1%的不同部分记下来,再在播放时还原就好了。
- 编码冗余:一般情况下,我们存储彩色像素需要24bit,而如果像素中只有很少的颜色,比如蓝和白,这时我们可以用1表示蓝色,用0表示白色,这样用1位就可以表示存储,大大节约空间,这样我们成为编码冗余。
- 视觉冗余:一般针对于人们的视觉系统,因为我们的视觉系统并不是所有颜色都可以看到的,以及对于高频的像素并不是那么敏感的,例如100个像素看足球和10000个像素看足球,我们是可以看出有明显区别的,而将10000个像素和100000个像素做对比,我们会发现基本上是一样的,看不出足球有什么区别。
不同编码
265编码可以播放4K视频,266编码用于VR,AR和8K
AVS编码是由于知识产权问题,我国自己出了一套编码。
封装格式
定义:存储音视频、图片或者字幕信息的一种容器。
多媒体元素和扩展API
<video>标签
<video>中直接写入src<video>中嵌套<source>,和第一种区别是可以嵌套多个视频格式,如果第一种格式不支持,可以换下一种视频格式。
<audio>标签和 <video>标签用法一样,以下是二者的五种方法和属性:
MSE
MSE创建过程
mp4和fmp4的区别
mdat文件中存储所有视频和音频的裸流数据 moov相当于一个封装信息,我们一般称为源数据封装信息。 fmp4中有多个moov和m,说明fmp4对于流式播放是比较友好的。