和声网agora结缘还得追溯到公司之前的一个项目需求,那个项目的最基本的业务需求就是防溯源追踪、防窃密,总而言之一句话,我在视频通信的同时,需要做到安全可靠。需要用到多人视频通话技术,所以在此文章简单的介绍一下技术选型和改进。

项目要求多名参会的人员需要进行实时通话以及通话内容的保密,并且保证在弱网环境下不丢包,时延可控,不至于出现明显的卡顿影响通话质量问题。查阅了很多资料,发现很多视屏通话的技术会出现严重的音频丢包的情况,反馈到使用者端就是视频卡顿和对话错乱,除此外,画质噪声,信噪比过低,严重影响通话体验和通话内容质量。后来抱着试试看的想法,尝试在GitHub上寻找一下有无开源的,并且在视频通话质量可靠的视频技术支持方案,最终幸运的淘到了声网Agora,一个可靠的开源项目https://github.com/AgoraIO。

发现这个开源项目后,开始尝试基于这个视频技术支持来开发和作进一步的改进,来实现项目的匿名通信以及通信可靠的业务需求。在学习声网agora的时候,发现文档真的很给力,全面而且接地气,短时间内就能够对项目的大概框架结构有了大致了解,简单的描述一下基于声网agora的开发流程体验。

整个项目的大致流程如下图示:

声网Agora的Web的流量接入我们自己开发的匿名通信系统,流量经过国内的VPN代理服务器,然后经过国外的代理服务器,从国外的代理服务器接入全球的网络,达到地址不可溯源追踪,实时变化的效果,这样保证了通话的体验可靠的同时,也保证了通话的安全可靠,完美的契合了项目的业务需求。

项目开发分为两个大的模块:第一个模块匿名通信系统的环境搭建以及相关程序开发,第二步,在此基础上加以整个agora的可靠视频技术支持。

首先介绍一下第一个模块部分匿名通信系统的大致流程:

1 、程序的安装与配置

1.1 Tap虚拟网卡安装

执行openvpn-install-2.4.6-I602.exe,如下窗口选择TAP Virtual Ethernet Adapter。

2、安装成功后,在windows配置中的网络连接:

说明:修改TAP网卡名称

1.2 TAP网卡配置

1、Media Status属性改为Always Connected

2、IP地址配置建议如下:

说明:域名应配置为8.8.8.8。IP地址可自定义配置。

TAP卡高级配置,接口跃点数设置为一个数,这里建议为6(不可以配置为自动约点)。

1.3接入程序的安装

1、接入程序依赖的动态链接库文件安装。将下述文件复制到系统的动态库文件夹C:\Windows\System32,如下图所示:

ucrtbased.dll

vcruntime140d.dll

2、创建接入程序文件夹,将接入程序复制到相应的文件夹下,如下图。

badvpn-tun2socks.exe

goproxy.exe

proxy.crt

proxy.key

其中proxy.crt和proxy.key证书文件必须和接入服务器一致。

1.4修改本地路由表

1、以管理员运行cmd,查看物理网卡配置。

2、输入如下命令,修改本地临时路由表。

route add 0.0.0.0 mask 0.0.0.0 10.0.0.1 metric 6

route add 47.244.17.247 192.168.3.1 metric 5

删除原缺省路由:route delete 0.0.0.0 mask 0.0.0.0 192.168.3.1

其中47.244.17.247为远端接入服务器ip,10.0.0.1为本地TAP卡网关IP。

执行前路由表信息如下:

执行后,路由表信息如下所示:

注意:

2接入程序的运行

2.1在windows本地运行代理

以管理员运行cmd,在命令行窗口(窗口1)接入程序文件夹下执行如下命令:

.\goproxy.exe socks -T tls -P 47.244.17.247:33080 -t tcp -p 192.168.1.185:8080 -Cproxy.crt -K proxy.keyalways

47.244.17.247:33080为接入服务器socks代理的ip和port。

192.168.1.185:8080为windows本地socks代理的ip和port。

窗口1显示如下:

2.2在windows本地运行隧道

以管理员运行另一个cmd,在命令行窗口(窗口2)接入程序文件夹下执行如下命令:

.\badvpn-tun2socks.exe --tundev tap0901:TAP:10.0.0.2:10.0.0.0:255.255.255.0 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 192.168.1.185:8080 --udpgw-remote-server-addr 127.0.0.1:7300 --udpgw-transparent-dns

tap0901:TAP网卡硬件ID

TAP:TAP网卡名称

10.0.0.2:TAP网卡IP地址

–socks-server-addr:本地代理服务器ip:port,与2.1中启动的本地代理一致。

执行上述命令后,窗口2显示如下:

窗口1显示有本地连接,内容如下:

2.3验证

启动chrome浏览器,分别访问屏蔽网站Google、facebook、Twitter、youtube,显示如下:




利用baidu、ipinfo.io查询本地ip,显示如下:

第二个模块agora的简单介绍:

音视频的通话流程大致如下图所示

1、进入社区平台,申请开发者的APP ID,完成相关注册;

2、项目引入,引入agora的SDK,两种方式:

文件引入:import AgoraRTC from ‘agora-rtc-sdk’

npm安装:npm install agora-rtc-sdk

3、添加配置文件、初始化类对象、获取Token,签名认证、连接服务、配置会话

4、本着拿来主义原则,在看明白agora-rtc-client.js文件的前提下,基于ES6的class类的写法,设计了包括参数设置、加入频道、发布本地流、订阅远端流等基本通话机制;基于promise的函数回调,可以直接拿来用回调的返回数据流,将数据流接入匿名通信系统,实现整个模块的整合。

后期整合起来的系统体验感真的很棒,以前很多网络的数据,都是需要自己实验测试,现在这些都集成在Agora系统里面,比如水晶球等,提供网络质量、音频与视频质量等多种数据的监控服务,用户的体验感很棒,同时也增加了我们项目产品的说服力。水晶球工具的功能比我想象的更强大,不仅有对应的某一时间段内的通话记录,而且每一次通话的监控信息,通话质量面板也是有的,通过这个分析工具,极大的方便了客户的使用监测,非常的接地气,毕竟让客户去做专业的网络监测,没有一点网络基础,真的很难做到的。

除此之外,Agora规范的安全协议,为后期的开发已经运营提供了极大的便利,同时在对用户的数据隐私、安全保护上做的也非常到位。

总体来说,文档接地气,详尽。短时间里面就可以弄明白这套系统的技术架构,并且音视频稳定可靠,为后面的开发夯实了基础。但是也有不尽如意的地方,由于系统使用的是WebRtc技术,导致环境的兼容上面走了很大的弯路,比如运行时发现有了‘Video/audio streams not supported yet’的报错问题,还有部署的协议限制。总体而言,大力推荐。