音视频基础知识
1.音视频基础知识
1.1、什么是视频?
连续的图像变化每秒超过20帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,所以看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
单张静态的画面我们称之为帧,帧就是一张静止的画面。
1.2、什么是帧率?
帧率表示一秒钟视频画面变化的次数,也就是说一秒钟显示了多少幅连续的画面。帧率越高则画面连续性越好,同时视频包含的数据量也越大,对处理画面的设备性能要求也越高。
1.3、什么是像素?
每一帧画面的最基本单位,每一个像素(pixel)点组合在一起形成一帧画面。
1.4、什么是分辨率?
以像素为最小单位,横向纵向组成的一个矩形图像。描述这个图像的宽与高就是分辨率,通常按横向与纵向的乘积来表达,如:1920x1080,1280x720 。并且这种标准的分辨率会议行数来表示,记作:1080P、720P。
1.5、什么是分辨率的宽高比?
图像的宽度像素与高度像素之间的比值叫图像的宽高比。
古老的CRT显示器因电子枪扫描的范围问题,被设置成4:3。
进入LCD时代后,为获得更高的液晶面板切割效率,所以通常都会把面板做成16:9的比例。
1080P 宽高比 = 1920/1080 = 16/9
720P 宽高比 = 1280/720 = 16/9
相对于横屏,手机通常叫做竖屏,比例为9/16。
1.6、分辨率与显示器尺寸的关系?
显示器的尺寸与分辨率的关系不是完全相关,分辨率代表像素的多少,显示器的尺寸是显示像素的大小和像素多少的乘积关系。
1.7、常用的分辨率|帧率|宽高比有哪些?
720x576 i50 4:3 通常叫做576i
720x480 P60 16:9 通常叫做480P
800x600 P60 16:9
1024x768 P60 4:3
1280x720 P60 16:9 通常叫做720P
1440x900 P60 16:10
1920x1080 P60 16:9 通常叫做1080P
1920x1080 i50 16:9 通常叫做1080i
2560x1440 P60 16:9
3840x2160 P60 16:9 通常叫做4K或UHD
1.8、隔行与逐行
1080i与1080P中的i和P分别代表隔行扫描与逐行扫描。
逐行扫描:一帧画面显示时像素从左上角一行接一行逐行扫描输出。
隔行扫描:一帧画面,先扫描输出奇数行,再扫描输出偶数行,分成2次显示。它是一种在不消耗额外宽带的情况下将视频显示的感知帧速度加倍的技术。通俗讲就是没有增加数据量的基础上,可以提高视频的流畅性,比如i50 = p 25。可以理解为隔行是增加流畅性(增加帧率)牺牲清晰度(像素减半)。
1.9、视频为什么要压缩(视频编码)
以常见的1080P60的视频计算一下没有压缩时数据量的大小(按红绿蓝三原色各一个字节数据量计算)
一秒钟数据量:1920(宽)x 1080(高)x 60(每秒帧数)x 3(像素3原色字节)= 373.248MB = 2.98Gbs
一小时数据量:373.248MB x 3600秒 = 13.43T字节/小时
这个数据量很大,近3G的原始数据量在任何常规网络上都无法实现视频的传输。因此我们就需要一种数据处理方式将海量的原始图像数据压缩到可在互联网上传输的数据量,这个过程叫做视频的编码。
1.10、视频压缩原理
-
帧内压缩
(1)将帧画面进行分层压缩(Y层:亮度相关、cr层:颜色相关、cb层:颜色相关),人对黑白亮度非常敏感,对颜色不太敏感,所以Y层尽量减少压缩,cr层、cb层多压缩。
(2)宏块压缩:一帧画面可以分层很多方块,相同的方块可以压缩,不同的保留
-
帧间压缩
I帧:关键帧,记录一帧完整的数据
P帧:前向帧,记录本帧与前一帧不同的数据。
B帧:双向帧,记录本帧与前帧和下一帧不同的数据。
-
视频解码过程
媒体源 Source
解复用 Demux
视频流 音频流 Buffer
视频解码 音频解码 Decoder
视频显示 音频播放 同步 A/V Out
1.11、造成延时的原因
-
摄像机延时
专业广播摄像机与会议相机、监控摄像头延时不一样。
-
编码过程延时
视频预处理、编码过程需要缓冲,大约需要3帧延时;延时与输入帧率有关(P30与P60区别)
-
内网传输延时
有线可以忽略不计,WiFi无线延时大约在10~50ms不等(取决于无线环境,原因无线的碰撞干扰)
-
公网传输延时
点对点公网延时较小;通过CDN延时较大
-
解码缓冲延时
硬件编解码需要正确、连续、完整的数据,因此需要建立一个缓冲池将数据校验、排序、确保无丢包无大抖动
-
显示器延时
后端的显示设备不同,延时也可能不同。显示器延时一般在个位数毫秒级,但是某些品牌的电视机因为安卓系统的一层处理,可能达到几十毫秒
1.12、什么是I帧、P帧、B帧?
视频压缩中,每帧代表一幅精巧的图像。而在实际压缩时,会採取各种算法降低数据的容量,当中IPB就是最常见的。
简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。
-
I帧:
表示关键帧,你能够理解为这一帧画面的完整保留;解码时仅仅须要本帧数据就能够完毕(由于包括完整画面)
-
P帧:
表示的是这一帧跟之前的一个关键帧(或P帧)的区别,解码时须要用之前缓存的画面叠加上本帧定义的区别,生成终于画面。(也就是区别帧,P帧没有完整画面数据,仅仅有与前一帧的画面区别的数据)
-
B帧:
表示双向区别帧,也就是B帧记录的是本帧与前后帧的区别(详细比較复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得终于的画面。B帧压缩率高,可是解码时CPU会比较累~。
I和P的解码算法比較简单,资源占用也比較少,I仅仅要自己完毕即可了,P呢,也仅仅须要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,假设视频流仅仅有I和P,解码器能够无论后面的数据,边读边解码,线性前进,大家非常舒服。
但网络上的电影非常多都採用了B帧,由于B帧记录的是前后帧的区别,比P帧能节约很多其它的空间,但这样一来,文件小了,解码器就麻烦了,由于在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),并且,B帧不能简单地丢掉,由于B帧事实上也包括了画面信息,假设简单丢掉,并用之前的画面简单反复,就会造成画面卡(事实上就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。
一般平均来说,I的压缩率是7(跟JPG差点儿相同),P是20,B能够达到50,可见使用B帧能节省大量空间,节省出来的空间能够用来保存多一些I帧,这样在同样码率下,能够提供更好的画质。
以下举例说明:
在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8个视点,T0~T12 为 GOP的 13个时刻。每一个 GOP包括帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包括94 个 B帧。B 帧占一个 GOP 总帧数的 90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。下图測试序列 Race1 在不同 GOP 下的率失真性能对照。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战