音视频测试的基础概念

1 SDK

        SDK,全称Software Development Kit,即软件开发工具包,研发工程师为辅助开发某类软件的相关范例和工具的集合,使用SDK可提高开发效率,更方便简单的接入某个功能,避免重复造轮子。广义的SDK包括Kit和组件,这里我们指狭义的SDK,即只包含最基础的能力。

2 视频编码

        在Android系统下视频编码有硬编和软编两种方式。顾名思义,硬编是通过手机提供的硬件模块进行编码;软编就是通过软件程序进行编码。硬编的好处是编码快,不占用CPU资源。缺点是Android机型比较多,坑也比较多。软编正好与硬编相反,优点是无论什么机型都一样处理。缺点则是占用大量CPU资源。

2.1 视频硬编码

        视频硬编码使用非 CPU资源进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等,用来减轻cpu编码的压力。硬编的好处主要在于速度快,而且系统自带不需要引入外部的库,但是特性支持有限,而且硬编的压缩率一般偏低。低码率下部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。

2.2 视频软编码

软编码使用cpu来编码,可以利用c提供的很多编解码库。对于软编码来说,虽然速度比较慢,但是压缩率比较高,而且支持的H264特性也会比硬编码多很多,相对来说比较可控。硬编码会受硬件设备支持的影响。性能较硬编码低,低码率下质量通常比硬编码要好一点。

3 视频解码

3.1 视频硬解码       

硬解码曾经指不借助于CPU,而通过专用的子卡设备来独立完成视频解码任务。曾经的VCD/DVD解压卡、视频压缩卡等都隶属于硬解码这个范畴。而现如今,要完成高清解码已经不再需要额外的子卡,因为硬解码的模块已经被整合到显卡GPU的内部,所以目前的主流显卡(集显)都能够支持硬解码技术。

硬解就是硬件解码,是指将原来全部交由CPU来处理的视频数据的一部分交由GPU来做,而GPU的并行运算能力要远远高于CPU,这样可以大大的降低对CPU的负载,基本不需要CPU参与运算,为系统节约了很多资源开销。CPU的占用率较低了之后就可以同时运行一些其他的程序了,从而提升解码性能,但是如果处理器能力特别强,解码性能的提升便不明显。

但是硬编码面临着起步较晚,存在软件支持度较低、兼容性差等问题。

3.2 视频软解码

软解码即通过软件让CPU来对视频进行解码处理。最常见的视频软解码开源看就是FFmpeg。软解码占据cpu资源,但是当设备的硬件支持不足或者兼容性差时,最好采用软解码。

4 各种帧

4.1 帧数

        帧数就是该视频被视频编码软件解析为的图片的总数,在一秒内播放的帧数就是每秒帧数率。一般视频都会有默认每秒播放帧数,例如30、60、120等这种级别。这种情况下视频是正常播放的节奏。

        视频帧率(Frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简:FPS)或“赫兹”(Hz)。此词多用于影视制作和电子游戏。视频帧率(Frame rate)是用于测量显示帧数的量度。

        电脑中所显示的画面,都是由显卡来进行输出的,因此屏幕上每个像素的填充都得由显卡来进行计算、输出。

        当画面的分辨率是1024×768时,画面的刷新率要达到24帧/秒,那么显卡在一秒钟内需要处理的像素量就达到了“1024×768×24=18874368”。如果要求画面的刷新率达到50帧/秒,则数据量一下子提升到了“1024×768×50=39321600”。

        FPS与分辨率、显卡处理能力的关系如下:处理能力=分辨率×刷新率。这也就是为什么在玩游戏时,分辨率设置得越大,画面就越不流畅的原因了。分辨率建议设置为显示器分辨率,过高或过低可能造成画面变形。

        刷新频率:即屏幕刷新的速度。刷新频率越低,图像闪烁和抖动的就越厉害,眼睛疲劳得就越快。采用70Hz以上的刷新频率时才能基本消除闪烁,显示器最好稳定工作在允许的最高频率下,一般是85Hz。

        在显示器内部,有一些振荡电路。人们通常所说的刷新频率,指的就是振荡电路的频率。刷新频率的计算公式是:水平同步扫描线X帧频=刷新频率。普通显示器的刷新频率在15.75kHz-95kHz间。15.75kHz是人体对显示器最低要求的刷新频率,是由525(线)X30(fps)=15.75kHz计算所得。由此,我们可以逆推出显示器扫描一条水平线的周期:众所周知,周期和频率是倒数关系,即1/频率=周期。在这里,1/15.75kHz= 63.5us(微秒),也就是说在每帧525线、每秒30帧的模式下,显示器扫描一条水平线的周期是63.5微秒。

        实际参考:在游戏过程中一般人能接受的最低FPS约为30Hz,基本流畅等级则需要>60Hz。

4.2 I

        I帧又称帧内编码帧,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,可以简单理解为一张静态画面。视频序列中的第一个帧始终都是I帧,因为它是关键帧。

4.3 P

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

        关于P帧的预测与重构,P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。

        P帧有如下特点:
  (1)P帧是I帧后面相隔1~2帧的编码帧;
  (2)P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
  (3)解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
  (4)P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
  (5)P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
  (6)由于P帧是参考帧,它可能造成解码错误的扩散;
  (7)由于是差值传送,P帧的压缩比较高。

4.4 B

        B帧即Bidirectionally predicted picture(双向预测编码图像帧)。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

        关于B帧的预测与重构,B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。采用运动预测的方式进行帧间双向预测编码。

        B帧有如下特点:
  1.B帧是由前面的I或P帧和后面的P帧来进行预测的;
  2.B帧传送的是它与前面的I帧或P帧和后面的P帧之间的预测误差及运动矢量;
  3.B帧是双向预测编码帧;
  4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
  5.B帧不是参考帧,不会造成解码错误的扩散。

        从上面的看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。那么为什么还要引入B帧?

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

4.5 GOP

        H264是一种视频编解码协议。在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

        一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。

        在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。两个I帧之间形成一组图片,就是GOP(Group Of Picture)。

5 其他概念

5.1 音视频文件码率

        视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。

        但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真,围绕这个核心衍生出来的cbr(固定码率)与vbr(可变码率),都是在这方面做的文章,不过事情总不是绝对的,举例来看,对于一个音频,其码率越高,被压缩的比例越小,音质损失越小,与音源的音质越接近。

        编码的码率也可以理解为编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。

5.2 视频分辨率

        VGA:Video Graphics Array(视频图像分辨率),单位英寸中所包含的像素点数。分辨率是用于度量图像内数据量多少的一个参数,通常表示成ppi(每英寸像素Pixel per inch)那个视频的320X180是指它在横向和纵向上的有效像素,窗口小时ppi值较高,看起来清晰;窗口放大时,由于没有那么多有效像素填充窗口,有效像素ppi值下降,就模糊了。

5.3 帧率、分辨率和码率的关系

5.3.1 帧率、分辨率和码率的概念总结

        为了了解视频的码率、帧率、分辨率。我们先来看看视频编码的基本原理:视频图像数据有极强的相关性,也就是有大量的冗余信息。其中冗余信息可以分为空域冗余信息和时域冗余信息。压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术。视频文件一般涉及到三个参数:帧率、分辨率和码率。

        帧率:FPS(每秒钟要多少帧画面);   以及Gop(表示多少秒一个I帧)

        码率:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。

        分辨率:单位英寸中所包含的像素点数; VGA:Video Graphics Array(视频图像分辨率)

5.3.2 三者的对应直播质量的影响因素

  • 帧率

        影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。帧率就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。

  • 分辨率

        (矩形)图片的长度和宽度的有效像素,即图片的尺寸。影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。

  • 码率

        把每秒显示的图片进行压缩后的数据量。影响体积,与体积成正比:码率越大,体积越大,码率越小,体积越小。(体积=码率X时间) 帧率X分辨率=压缩前的每秒数据量(单位是字节。) 压缩比=压缩前的每秒数据量/码率 (对于同一视频源并采用同一种视频编码算法,压缩比越高,画面质量越差。)

5.3.3 三者之间的关系

重点:清晰度

在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。

在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。

关于一个视频流的数据量:

码率如果为10Mb/s,代表1秒钟有10M bit的视频数据,对于YUV422格式的1080P视频而言,一帧图像是 1920x1080x2x8/1024/1024 = 31.64Mbit,1秒钟30帧图像的话,则有949.2Mb/s,可见其数据量之大,不压缩根本无法网上传播,所以一定要经过视频压缩处理,不要以为1080P的视频就一定是高清的,清晰度还跟视频码率密切相关,对于1080P的视频而言,蓝光视频的码率是20Mb/s,一般下载的视频码率大都是10Mb/s,一些IPCamera/无人机的码率是2~8Mb/s,而很多视频网站的码率甚至低于5M/s,其实有时还不如高码率的720P清晰。

5.3.4 三者及三者关系的实际意义

好的画质是分辨率、帧率和码率三者之间的平衡!

  • 码率不是越大越好

        如果不做码率大小上的限制,那么分辨率越高,画质越细腻;帧率越高,视频也越流畅,但相应的码率也会很大,因为每秒钟需要用更多的数据来承载较高的清晰度和流畅度。这对云服务厂商而言这是好事(收入跟流量呈正比),但对您可能意味着更多的费用开支。

  • 帧率不要超过24

        如果限定一个码率,比如800kbps,那么帧率越高,编码器就必须加大对单帧画面的压缩比,也就是通过降低画质来承载足够多的帧数。如果视频源来自摄像头,24FPS已经是肉眼极限,所以一般20帧的FPS就已经可以达到很好的用户体验了。

        目前来看这个是不对的,因为针对高端机型而言,其基础配置和核心芯片都支持60fps的帧率配置,足够让用户拥有更优秀的用户体验。

        另外帧率、分辨率一般是根据机型+芯片决定的,能采用硬解一般是优先硬解。

  • 分辨率不盲目攀高

        如果限定一个码率,比如800kbps,那么分辨率越高就会让编码器越 “为难" ,可以想象,它必须拆东墙补西墙,通过减少色彩信息或者引入马赛克这种“鱼目混珠”的手段来承载足够多的像素点。所以,同样的是2G的一个电影文件,1080p画质的版本可能不如720p画质的版本看起来更清晰。

        如果您之前没有太多音视频编码的实战经验,我们比较建议您使用demo里的设置参数。

5.3.5 具体的计算衡量方式以及更细致的说明

码率(Bitrate)、帧率(FPS)、分辨率和清晰度的联系与区别_pc9319的博客-CSDN博客_bitrate

5.4 视频推流

        推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是糟糕。

        常见的推流协议有RTMP,HLS,WebRTC,目前我们喜欢使用的quic。下面这个图对于理解视频的推流和拉流比较有用,借助此图进行理解。

图5-1 视频推流与拉流

5.5 视频拉流

拉流是指服务器已有直播内容,客户端用指定地址进行拉取的过程。

 图5-2 直播的推流与拉流

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ChatGPT: 对于学习音频处理,我会推荐你去学习音频数字信号处理的相关知识,比如常用的音频特征提取方法(如 MFCC)以及常用的音频识别技术(如深度学习)。此外,你还可以寻找一些开源的音频处理库(如 Librosa、PyAudio、pydub 等),它们可以帮助你更快地实现音频处理的功能。 ### 回答2: 如果你想学习音频方面的知识和技能,我有一些推荐可以帮助你入门。首先,建议你从音频基础知识开始学习。了解音频的基本概念,如音频信号的采样率、位深度、声道数等。可以通过阅读相关的书籍或者搜索在线教程来学习这些基础内容。 其次,了解音频处理和编辑的常用工具和软件。这包括音频录制设备、数字音频工作站(DAW)以及音频编辑软件。一些广泛使用且功能强大的软件包括Adobe Audition、Avid Pro Tools和Apple Logic Pro等。你可以通过在线视频教程或参加音频工作坊来学习这些工具的基本操作和功能。 另外,学习音频的混音和后期制作技术也很重要。掌握音频混音的基本原理和技巧,学会调整音频的音量平衡、增加深度和宽度等效果。此外,了解音频的压缩、均衡和混响等处理方式也是很有帮助的。 最后,练习和实践是提高音频技能的关键。尝试录制和处理不同类型的音频,如音乐、语音和环境音效等。对于语音测试来说,你可以选择一些有挑战性的测试项目来进行练习,如去除噪音、提升音频质量等。通过不断实践和反思,你将逐渐提升你的音频技能。 总之,学习音频需要有耐心和实践经验。始终保持学习的热情,并且不断探索和尝试新的技术和工具,将会有助于你在音频领域取得进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值