网络环境模拟工具部署与Android打通
Walker Xu

在实时音视频通信的过程中,经常会伴随着卡顿,延时等问题,相信大家都碰到过这种情况在微信或QQ视频时候画面冻住了或者语音丢失了,或者在使用我们远程助手的过程中帮助方操作了画面2秒甚至更久后才有响应,诚然有网络不好的因素造成的,尤其是国内的网络环境比较复杂,弱网的情况也比较多,我们思考的是如何在现有网络环境不可控的情况下,尽量提高用户的体验舒适度,拦在我们面前的是带宽(吞吐量),延时,丢包,抖动几座大山,这是业内都要面对的问题,都在优化的过程中不停的博弈,毕竟互联网发明出来的时候不是专门给实时通信使用的都是一些非实时需求。在客户端与服务器都有很多优化的方法。
针对带宽和延时
采用压缩率高的音视频编码算法,比如h264,或者对h264的压缩算法进行优化,或者采用压缩率更高的编码h265等
控制I帧的数量
尽量不使用B帧
动态分辨率
动态图像QP
带宽实时估算/控制
拥塞控制
针对丢包
FEC
丢包隐藏
丢包重传
针对抖动
jitter buffrer
在服务器端可以组建骨干网络,让用户能够就近接入,这对延时的提升是很大的,但是同样成本也是很大的,这种云服务不是我们现在的团队能玩的起的,所以与竞品对比客户端上我们可以处理甚至做的更好,但涉及到服务器端的优化,是暂时没有办法追赶的。比如锤子远程助手的方案供应商。
针对上边的优化,我们如何评价它的好坏是否有用,贴近用户的环境测试是很好的方法,但是用户的网络环境千差万别不可能全部测试到,如果照着某几种用户环境优化可能会出现跑偏的情况,着需要我们搭建一个稳定的测试环境,这个环境的核心是网络环境模拟工具,模拟各种网络情况,丢包,延时,乱序,错包,控制带宽等。
我相信这种环境不只对实时音视频通信有意义,对其他实时或非实时的网络应用也有重大意义比如游戏,流媒体等。有两种选择:
1.专用的网损设备,好处显而易见,坏处一样显而易见,经费不足,pass

clipboard.png
2.软件模拟,只有这一条路
有很多软件可以实现模拟,需要根据我们的需求进行选择,有的不满足我们的需求,或者有的要收费,都pass,最终我们选择了facebook开发的一款工具(6),进行部署,感谢facebook的开源。
charles proxy
Netlimiter for windows
Network emulator for windows
Wanem
Nistnet
Facebook ATC

下图是facebook ATC的工作原理,一台linux作为服务器和wifi热点,其他设备比如android手机作为被测软件运行设备,连接wifi热点,并通过浏览器连接至linux服务器,控制发往android手机的数据包的情况。这个服务器和热点可以支持多个设备同时连接,且分别控制,android手机,苹果手机或其他设备都可以使用。

clipboard.png
如上边所讲网络模拟测试环境的搭建,需要一台linux作为热点,并且要在该linux机器上进行网络环境模拟工具的部署。把linux搭建成热点参考文档:
leningrad03.ubuntu台式机如何用usb无线网卡共享网络.pdf
我们这里主要讲网络环境模拟工具的部署。
这个工具是基于python写的,所以要安装python2.7或以上的版本,然后安装pip
sudo apt-get install python-pip python-dev build-essential sudo pip install --upgrade pip
然后使用pip直接安装好ATC所有组件
pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
3.接下来部署Django的web工程,提供手机访问并用来配置和切换网络用的。
(1).使用django-admin生成一个新的django工程
django-admin startproject atcuicd atcui
(2).修改atcui/settings.py,加入ATC相关的内容(walker标签),172.xx.xx.xx是部署机器的ip地址

clipboard.png

(3).修改atcui/urls.py,urlpatterns 中加入atc的url页面

clipboard.png

(4).更新一下数据库
python manage.py migrate

OK,准备工作就绪,开始启动工作
.启动控制核心组件atcd需要无线网卡的名字wlan0
sudo atcd --atcd-lan wlan0
.启动Django
sudo python manage.py runserver 0.0.0.0:8000

好了,找台android手机连接,这个热点,并用浏览器访问
http://172.xx.xx.xx:8000
剩下的设置自己去摸索吧,也可以参考下边的截图,截图后还有更精彩的内容。

clipboard.png

clipboard.png

clipboard.png

clipboard.png

Iphone开发者也可以使用这个工具,不过apple已经给开发者在ios内置了类似的一个模块,打开开发者选项就可以看到network link conditioner

clipboard.png

感觉在对第三方开发者方面的工作ios又一次碾压了android,不过这也激发了我们的想法,把facebook ATC移植到android上。
第二期
简单调研了下facebook ATC网络控制的核心是基于linux的traffic control(tc)和iptables这两个工具实现的,而android是linux内核,移植的可能性是有的,准备有时间把移植工作作为第二期进行,如果能在android上直接控制还是不错的,毕竟搭建一个这样的环境还是要耗费不少精力的,现在还不好说成败。有可能值得尝试一下。

clipboard.png


WalkerXu
95 声望29 粉丝