webrtc音视频学习:一种理解音视频架构的方法

最近公司在开发音视频方面的项目,这款产品类似于腾讯会议,供应商与买家之间,通过线上渠道,进行面对面的交流,客服在线上会议过程中,充当主持人的角色,沟通两者的需求和产品知识。

音视频开发最开始对我来说,还挺陌生的,而且通过接触,发现要学习相关的技术,其实对于初学者来说,有一定的难度和门槛。

我最开始是学习java,有了这个基础后,开始做移动开发,主攻android方向,刚好参与到公司音视频产品客户端的开发中。

其实音视频开发这一块,要学懂学通学透,确实有难度。但我们学习任何一门知识,都是如此,从简单到复杂,从整体到局部,正所谓纲张目举,有了一个路线图,了解一门技术的整体架构,无异于对之后的细节学习,有着莫大的帮助。

最近看了不少资料,后续也会写一些关于音视频开发方面的文章,和大家一起分享学习的心得,以求相互促进,期待能够交到良师益友。

言归正传,先来说说音视频系统在抽象角度的一个架构,用一张图来表示,就是这样的:

webrtc音视频学习:一种理解音视频架构的方法

此图来源于李超的《WebRTC音视频实时互动技术:原理、实战与源码分析》一书,目前国内的互联网上,专业全面介绍WebRTC的书籍,寥寥无几,相信从事音视频开发的工作人员,也是对这方面嗤之以鼻,这本书大家有空可以看看,在微信读书里面就能搜索到。

这个图将音视频的一个整体架构,进行了很大程度的抽象。当然,在实际的过程中,有着非常多的细节,需要学习和处理,可能比你想象的更加繁杂和精妙。

但是我在学习的过程中,为了理解这个架构,想到了一个场景,用来辅助自己理解这个框架。

我们理解一个事物,往往会去对应的现实世界,寻找一个原理或流程相似的场景,来对其进行理解,以加强记忆深度和理解宽度,就像计算机语言一样,都是对现实世界的抽象。

我用来加强理解的方式,是将这个架构,看成现实世界的网购系统。

音视频系统大部分情况下,需要达到的目的,是为了将现实场景还原到另一个地方,以实现面对面交流的效果,这是音视频存在的本质。

而要达到这种面对面的效果,我们就需要采用诸多的技术手段,来确保音视频的采集,传输,编解码等工作,都在性能不错的状态下发挥作用。

这整个过程,非常像是现实世界的网购系统。网购系统,有生产者,传输者,消费者等角色,而这些角色,也正好和音视频会议或其他类型的音视频系统,有着相对应的角色和功能。

下面,我就具体说说两者的相似处,以求在宏观上,能够理解音视频系统的整个过程。

进货:音视频的采集

想必网购剁手这种行为,我们都有过。而网购的起点,是卖家通过工厂或者其他供应商,将商品拿来,然后卖给买家(消费者),这个过程就是商品的采集过程。这就相当于音视频系统中,音视频数据,经过麦克风和摄像头,被采集到设备中,以PCM(音频)、YUV(视频)的格式呈现。

而进货的过程,其实就是将原本已经客观存在的商品,拿过来而已,而音视频系统,在采集音视频之前,客观的场景,其实已经存在了,比如你实时直播的是一场演唱会,一场相声表演等。

你通过摄像头和麦克风,将画面和声音捕捉后,那么你与消费者,或者说是系统另一端的用户,便开始建立了实时而奇妙的连接,你们的故事,从采集开始。

打包:音视频的编码

商家采购了商品后,不大可能直接就将商品给到买家,在物理空间相对遥远的情况下,商家需要将商品打包,然后交给物流公司,运输到消费者,即买家的手中。

如果直接发给消费者,要是贵重的东西,磕磕碰碰难免,消费者拿到手的商品,不是自己想要的商品,或者是已经残缺的次品,那他铁定是要退货的。

于是商家就需要将商品精心牢固的打包起来。

这个时候,卖家将商品打包的过程,相当于音视频的编码过程,而在实际的音视频系统中,编码的过程,恰好就是为了传输的效率和便捷。

如果不进行编码,直接将采集到的数据发送到远端,那对不起,你可能永远也没法看到实时呈现的画面,因为经过编码的音视频数据,能够很大程度上,缩小数据的体积,打个比方,你采集到的数据是每帧1M,你一秒钟最少得二三十帧,才能产生实时的画面效果,这么一算,芭比Q了,一分钟得最少1.5G左右的流量。

你就是中东土豪,手机流量也经不住这么损耗呀!

于是得对视频进行压缩,和其他一些技术处理,再传到远端。正如我们的快递包裹,得经过打包,要是易碎物品,还得垫些防震垫,泡沫等东西,防止传输过程中,出现意外磕碰。

这东西必须在技术上,这么处理,毕竟音视频的传输,是没有买运费险的。

物流:音视频的网络传输

商家将商品打包完毕以后,便将商品交给物流公司,物流公司按照包裹上的目的地,对包裹进行分类,然后一起运输到买家的所在地。

运输的过程,相当于经过编码的音视频数据,经过网络,传输到对端。

物流公司拿到需要传输给消费者的快递时,他们会对打包好的包裹进行分拣。

根据包裹上留下的信息,对包裹进行分类,比如送到湖南的包裹归纳到一起,送到河南的又归到另一堆去。

分拣好后,物流公司根据最佳线路进行运输,以期提高效率,降低成本。

比如一车从浙江送到湖南的货物,这时公司里面有一辆车是到湖北,一辆车是到云南,那么物流公司自然会选择从浙江到湖北的路线,顺便将湖南的货物带过去,这是选择最佳线路的过程。

音视频的传输一样有这样的优化机制,选择最佳线路,传输音视频数据。

拆包:音视频的解码

吭哧吭哧,运输车将包裹运输到目的地以后,勤劳的快递小哥,将包裹原封不动的送到消费者的手中,此时他们拿到的,是经过包装的商品。

消费者拿到自己心仪已久的包裹后,自然得拆开来看看,里面的商品有没有损坏,是不是自己买的东西。

于是需要拆开包裹来看看,这个过程,就相当于音视频的解码过程。解码以后,数据还是原来那份数据。

但有时总有例外,我买的是一个塑料娃娃,你给我发个变形金刚模型,那不是我想要的,音视频传输过程中,也会存在丢包,丢帧等现象。

这些存在瑕疵的数据,和原本的数据,有着出入,于是需要进行重传或通过其他方式对数据进行修正。

这些操作,都是为了确保消费者在解开包裹后,确定看到的,就是自己当初想要的商品或想要看到的实时画面。

消费:音视频的渲染

消费者拿到自己的包裹后,一看,嗯,不错,这就是我要的东西,于是心情愉快的拿着自己的东西开始使用起来。

比如一个美女,买的是一条漂亮的裙子,那么她自然要美美的穿出去炸街,这个过程,就是这个商品的使用过程,也就是音视频数据的渲染过程,将音视频数据,通过扬声器,显示器呈现出来,就是对端的消费过程。

各位,音视频的整体架构,是不是非常像一次美妙的网购经历,如果这么理解,那么整个架构是不是就非常容易被记住了!?

当然,这是在宏观层面的理解,如果是深入到细节部分,那自然有着莫大的区别。

比如鲸鱼和鲫鱼都是鱼类,但他们个体上的差异,却是千差万别的。

希望这个理解方式,能够对您学习音视频系统,有哪怕一点点的小帮助。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(1)

相关推荐

发表回复

登录后才能评论