写点什么

大学毕业做音视频开发,月入 20K,你呢,带你全面掌握高级知识点

用户头像
Android架构
关注
发布于: 8 小时前

5G 让所有人兴奋,用户期待,因为 5G 网络更快更稳定延迟更低。运营商和上下游产业也期待,大家都想在 5G 时代分一杯羹。


近几年抖音快手 B 站等 App 的火热,已经说明问题了。随着 WiFi 设施的全面普及,流量费用的进一步下降,使得我们随时随地刷视频成为了可能。回想起我大学时代,那个时候流量很贵,贵到什么程度呢?1M 流量要 10 块钱!大家想一想,1M 流量 10 块钱,1G 流量 1 万块钱,你还敢用 4G 刷视频么?4G 时代,大家刷短视频,5G 时代,大家刷长视频。基于这个判断,音视频相关技术是未来几年的热点,除了抖音快手,新的现象级客户端有可能会出现。


作为移动开发人员,如何跟上热点学习音视频技术呢?


今天主要介绍视频入门基础知识


[](


)视频编码基础知识


===========================================================================

[](

)视频和图像和关系


好了,刚才说了图像,现在,我们开始说视频。所谓视频,大家从小就看动画,都知道视频是怎么来的吧?没错,大量的图片连续起来,就是视频。



衡量视频,又是用的什么指标参数呢?最主要的一个,就是帧率(Frame Rate)。在视频中,一个帧(Frame)就是指一幅静止的画面。帧率,就是指视频每秒钟包括的画面数量(FPS,Frame per second)。



帧率越高,视频就越逼真、越流畅。

[](

)未经编码的视频数据量会有多大?


有了视频之后,就涉及到两个问题:


一个是存储;



二个是传输。



而之所以会有视频编码,关键就在于此:一个视频,如果未经编码,它的体积是非常庞大的。


以一个分辨率 1920×1280,帧率 30 的视频为例:


共:1920×1280=2,073,600(Pixels 像素),每个像素点是 24bit(前面算过的哦);



也就是:每幅图片 2073600×24=49766400 bit,8 bit(位)=1 byte(字节);



所以:49766400bit=6220800byte≈6.22MB。


这是一幅 1920×1280 图片的原始大小,再乘以帧率 30。


**也就是说:**每秒视频的大小是 186.6MB,每分钟大约是 11GB,一部 90 分钟的电影,约是 1000GB。。。


吓尿了吧?就算你现在电脑硬盘是 4TB 的(实际也就 3600GB),也放不下几部大姐姐啊!不仅要存储,还要传输,不然视频从哪来呢?如果按照 100M 的网速(12.5MB/s),下刚才那部电影,需要 22 个小时。。。再次崩溃。。。


正因为如此,屌丝工程师们就提出了,必须对视频进行编码。

[](

)什么是编码?


**编码:**就是按指定的方法,将信息从一种形式(格式),转换成另一种形式(格式)。**视频编码:**就是将一种视频格式,转换成另一种视频格式。



编码的终极目的,说白了,就是为了压缩。各种五花八门的视频编码方式,都是为了让视频变得体积更小,有利于存储和传输。


我们先来看看,视频从录制到播放的整个过程,如下:



首先是视频采集。通常我们会使用摄像机、摄像头进行视频采集。限于篇幅,我就不打算和大家解释 CCD 成像原理了。



采集了视频数据之后,就要进行模数转换,将模拟信号变成数字信号。其实现在很多都是摄像机(摄像头)直接输出数字信号。信号输出之后,还要进行预处理,将 RGB 信号变成 YUV 信号。


前面我们介绍了 RGB 信号,那什么是 YUV 信号呢?


简单来说,YUV 就是另外一种颜色数字化表示方式。视频通信系统之所以要采用 YUV,而不是 RGB,主要是因为 RGB 信号不利于压缩。在 YUV 这种方式里面,加入了亮度这一概念。在最近十年中,视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度。


所以,工程师认为,在我们的视频存储中,没有必要存储全部颜色信号。我们可以把更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。于是,就有了 YUV。


YUV 里面的“Y”,就是亮度(Luma),“U”和“V”则是色度(Chroma)。


大家偶尔会见到的 Y’CbCr,也称为 YUV,是 YUV 的压缩版本,不同之处在于 Y’CbCr 用于数字图像领域,YUV 用于模拟信号领域,MPEG、DVD、摄像机中常说的 YUV 其实就是 Y’CbCr。


![image](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


1cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xNTAwODM5LTIxY2ZlMDc4MGRhZWQyMjEuanBnP2ltYWdlTW9ncjIvYXV0by1vcmllbnQvc3RyaXB8aW1hZ2VWaWV3Mi8yL3cvNjAwL2Zvcm1hdC93ZWJw?x-oss-process=image/format,png)


▲ YUV(Y’CbCr)是如何形成图像的


YUV 码流的存储格式其实与其采样的方式密切相关。(采样,就是捕捉数据)


主流的采样方式有三种:


1)YUV4:4:4;



2)YUV4:2:2;



3)YUV4:2:0。



具体解释起来有点繁琐,大家只需记住,通常用的是 YUV4:2:0 的采样方式,能获得 1/2 的压缩率。


这些预处理做完之后,就是正式的编码了。


[](


)5、视频编码的实现原理


==============================================================================

[](

)5.1 视频编码技术的基本原理


前面我们说了,编码就是为了压缩。要实现压缩,就要设计各种算法,将视频数据中的冗余信息去除。当你面对一张图片,或者一段视频的时候,你想一想,如果是你,你会如何进行压缩呢?



▲ 对于新垣女神,我一 bit 也不舍得压缩…


我觉得,首先你想到的,应该是找规律。是的,寻找像素之间的相关性,还有不同时间的图像帧之间,它们的相关性。


**举个例子:**如果一幅图(1920×1080 分辨率),全是红色的,我有没有必要说 2073600 次[255,0,0]?我只要说一次[255,0,0],然后再说 2073599 次“同上”。



如果一段 1 分钟的视频,有十几秒画面是不动的,或者,有 80%的图像面积,整个过程都是不变(不动)的。那么,是不是这块存储开销,就可以节约掉了?



▲ 以上图为例,只有部分元素在动,大部分是不动的


是的,所谓编码算法,就是寻找规律,构建模型。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法。


通常来说,视频里面的冗余信息包括:




视频编码技术优先消除的目标,就是空间冗余和时间冗余。


接下来,就和大家介绍一下,究竟是采用什么样的办法,才能干掉它们。以下内容稍微有点高能,不过我相信大家耐心一些还是可以看懂的。

[](

)视频编码技术的实现方法


视频是由不同的帧画面连续播放形成的。


这些帧,主要分为三类,分别是:


1)I 帧;



2)B 帧;



3)P 帧。


**I 帧:**是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是 I 帧。


P 帧:“帧间预测编码帧”,需要参考前面的 I 帧和/或 P 帧的不同部分,才能进行编码。P 帧对前面的 P 和 I 参考帧有依赖性。但是,P 帧压缩率比较高,占用的空间较小。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
大学毕业做音视频开发,月入20K,你呢,带你全面掌握高级知识点