实时音视频通信是个啥,资料挺多,看起来并不轻松,在这里简单地撸一
前言
作为微信的一名用户,不止一次地使用过语音通话和视频通话。语音通话就像打电话一样,在微信里点开来,对方接通,通话开始;但又和打电话又有所不同,需要双方贡献一点流量,电话费都省了;视频通话更是牛掰,可以清晰地看到对方的面貌和状态,见面聊天两不误,路费也省了。最重要的是,对于用户的使用,没有半点门槛,一学就会,真是一个好功能呀!
那么,这个语音、视频通话到底是如何实现的呢?又会涉及到哪些技术?有没有什么开源的框架呢?资质一般的程序员是不是可以按照开源框架的API就能开发这个功能呢?
一系列问号在心中升起,无意中来到了即时通信网,看了一篇又一篇的文档,从概念到流程,流程中每个环节涉及到的技术,再到最后的实现,走马观花地过了一遍,才对实时音视频通信有了一个粗略的印象。
相关概念
想要了解实时音视频通信,还需要从概念撸起,想要知道要了解哪些概念,还得先说一说音视频通话的流程。
打开终端的麦克风或摄像头,最先开始的信息采集(声音信息、图像信息的采集),然后进行信息的压缩(不压缩太大,不利于存储和传输),在进行信息的编码,接着是信息的传输,接收到信息的一方先解码,最后是信息的展示,这样才走完一个流程,当然一次音视频通话,是有N个这样的流程组成。
流程中的每一步,从第一步到最后一步,都需要采用专业的技术做处理。一句话高度概括:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体。参考资料:http://www.52im.net/thread-228-1-1.html
采集
在实时语音通话时,需要采集音频信息;在进行实时视频通话时,不仅要采集音频信息,还需要采集图像信息,图像信息要连续采集,才能构成连续播放的动画。
参考资料:http://www.52im.net/thread-955-1-1.html
压缩
未经压缩的音视频数据量巨大,不仅存储困难,而且传输困难;压缩也是多方面的压缩,空间内容、时间内容、编码内容、视觉内容、知识内容等这几大方面;压缩分为有损压缩、无损压缩,每种压缩又有相关的对应技术。
编解码
编解码是经常使用的技术,在实时音视频通信里也少不了;实时音视频通信里的编解码,还需要追溯一些概念,图像和视频的区别。什么是图像?什么是视频?
图像有二维三维之分;二维的,是指纹理和亮度信息;三维的,除了纹理、亮度信息,还有深度信息。视频,则是由多幅图像构成,包含运动信息,是连续的图像,又称为运动图像。具体参考资料:http://www.52im.net/thread-229-1-1.html
编解码技术也有很多,编解码里涉及的知识面也很广,视频编解码之预测技术介绍一文,又讲解了很多要点,主流视频编码技术H.264是个啥,还得参考主流视频编码技术H.264。
涉及的协议
RTP(Real-time Transport Protocol,实时传输协议)是用于Internet上针对多媒体数据流的一种传输层协议,建立在UDP协议上。RTP用来传送具有实时属性的数据,RTCP,是RTP的姐妹协议,但和RTP一起协作将多媒体数据打包和发送,并监控服务质量并传送正在进行的会话参与者的相关信息。
SRTP、SRTCP,在RTP、RTCP的基础上加了安全因素。
RTSP(Real Time Streaming Protocol)是用来控制声音或影像的多媒体串流协议,与RTP最大的区别在于:RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。
此处忽略两个。
HLS(HTTP Live Streaming) 协议,苹果发布的,主要应用于ios系统的基于HTTP的流媒体传输协议。参考资料:http://www.52im.net/thread-267-1-1.html
开源的框架有没有?
有,开源实时音视频技术WebRTC,名字里带了个Web,不会是基于浏览器的吧?没错,就是基于浏览器的。这样说,还不适合移动端,并且有些浏览器也不支持,IE就不支持它,苹果也是最近才发文说Apple Safari浏览器开始支持该技术的。
在2011年时,Google将购买的WebRTC项目开源,WebRTC在被Google开源之前,其价值就已经得到了充分的认可,比如QQ就使用了WebRTC的部分技术。Google既然开源了,是不是就可以使用这个框架进行开发了?结果不是太乐观,请看图文。
来自http://www.52im.net/article-126-1.html 来自http://www.52im.net/article-126-1.html
既然作者给出了这样的建议,那么基于WebRTC开源项目的二次开发,困难重重,阻力很大呀!
WebRTC是实时通讯RTC中很小的一部分,RTC又是啥,参考资料:http://www.52im.net/thread-1034-1-1.html
个人是这么想的,最好能有个半成品,然后在上面进行二次开发,这样就不需要太多的技术积累,也不会受限于第三方,那么有没有基于WebRTC的半成品,来降低开发成本呢?
即时通讯网的大牛给出了一个半成品:
移动端实时音视频聊天框架:RainbowAV,但是不能用,服务端是用C++写的,咱只会Java呀,要哭了。
在痛苦中,又去看了几篇文章:
专访微信视频技术负责人:微信实时视频聊天技术的演进
微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术
即时通讯音视频开发(十二):多人实时音视频聊天架构探讨
既然如此,能力有限,基于开源框架的开发已成泡影,购买别人的半成品也不适合,那就只能用第三方的SDK了。
国内有几家,阿里云、腾讯云、百度云、华为云,一家一家的对比过去,哪个更合适呢?
阿里云音视频通信RTC(Real-Time Communication),有些文档在2020-04-07更新,对接文档地址:https://help.aliyun.com/product/61399.html?spm=5176.cnrtc.0.0.2edb376cql9TRk&aly_as=82evfx1wq
腾讯云实时音视频 TRTC,21年的技术积累,有文档在2020-04-15更新;
对接文档地址:https://cloud.tencent.com/product/trtc
百度的实时音视频通讯RTC,有文档在2020-02-06更新;
对接文档地址:https://cloud.baidu.com/doc/RTC/s/3jxbg8u8n
华为的实时音视频 HRTC,30年的技术积累,参数设置很详细,有文档在2020/03/31更新,对接文档地址:https://support.huaweicloud.com/qs-hrtc/hrtc_03_0001.html
这一路文档看下来,不由感叹,技术之路真是漫长呀,其演变过程也是其漫漫修远兮,不知经过了多少人的共同努力,才换来了今天的成果,在前人栽树的基础上,将功能再接再厉做的更完善一点,为社会所用,才不辱技术之人的历史使命。