网络环境模拟工具部署与Android打通
Walker Xupython
在实时音视频通讯的过程当中,常常会伴随着卡顿,延时等问题,相信你们都碰到过这种状况在微信或QQ视频时候画面冻住了或者语音丢失了,或者在使用咱们远程助手的过程当中帮助方操做了画面2秒甚至更久后才有响应,诚然有网络很差的因素形成的,尤为是国内的网络环境比较复杂,弱网的状况也比较多,咱们思考的是如何在现有网络环境不可控的状况下,尽可能提升用户的体验温馨度,拦在咱们面前的是带宽(吞吐量),延时,丢包,抖动几座大山,这是业内都要面对的问题,都在优化的过程当中不停的博弈,毕竟互联网发明出来的时候不是专门给实时通讯使用的都是一些非实时需求。在客户端与服务器都有不少优化的方法。
针对带宽和延时
采用压缩率高的音视频编码算法,好比h264,或者对h264的压缩算法进行优化,或者采用压缩率更高的编码h265等
控制I帧的数量
尽可能不使用B帧
动态分辨率
动态图像QP
带宽实时估算/控制
拥塞控制
针对丢包
FEC
丢包隐藏
丢包重传
针对抖动
jitter buffrer
在服务器端能够组建骨干网络,让用户可以就近接入,这对延时的提高是很大的,可是一样成本也是很大的,这种云服务不是咱们如今的团队能玩的起的,因此与竞品对比客户端上咱们能够处理甚至作的更好,但涉及到服务器端的优化,是暂时没有办法追赶的。好比锤子远程助手的方案供应商。
针对上边的优化,咱们如何评价它的好坏是否有用,贴近用户的环境测试是很好的方法,可是用户的网络环境千差万别不可能所有测试到,若是照着某几种用户环境优化可能会出现跑偏的状况,着须要咱们搭建一个稳定的测试环境,这个环境的核心是网络环境模拟工具,模拟各类网络状况,丢包,延时,乱序,错包,控制带宽等。
我相信这种环境不仅对实时音视频通讯有意义,对其余实时或非实时的网络应用也有重大意义好比游戏,流媒体等。有两种选择:
1.专用的网损设备,好处显而易见,坏处同样显而易见,经费不足,passlinux
2.软件模拟,只有这一条路
有不少软件能够实现模拟,须要根据咱们的需求进行选择,有的不知足咱们的需求,或者有的要收费,都pass,最终咱们选择了facebook开发的一款工具(6),进行部署,感谢facebook的开源。
charles proxy
Netlimiter for windows
Network emulator for windows
Wanem
Nistnet
Facebook ATCandroid
下图是facebook ATC的工做原理,一台linux做为服务器和wifi热点,其余设备好比android手机做为被测软件运行设备,链接wifi热点,并经过浏览器链接至linux服务器,控制发往android手机的数据包的状况。这个服务器和热点能够支持多个设备同时链接,且分别控制,android手机,苹果手机或其余设备均可以使用。ios
如上边所讲网络模拟测试环境的搭建,须要一台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地址web
(3).修改atcui/urls.py,urlpatterns 中加入atc的url页面算法
(4).更新一下数据库
python manage.py migrate数据库
OK,准备工做就绪,开始启动工做
.启动控制核心组件atcd须要无线网卡的名字wlan0
sudo atcd --atcd-lan wlan0
.启动Django
sudo python manage.py runserver 0.0.0.0:8000django
好了,找台android手机链接,这个热点,并用浏览器访问
http://172.xx.xx.xx:8000
剩下的设置本身去摸索吧,也能够参考下边的截图,截图后还有更精彩的内容。ubuntu
Iphone开发者也可使用这个工具,不过apple已经给开发者在ios内置了相似的一个模块,打开开发者选项就能够看到network link conditionerwindows
感受在对第三方开发者方面的工做ios又一次碾压了android,不过这也激发了咱们的想法,把facebook ATC移植到android上。
第二期
简单调研了下facebook ATC网络控制的核心是基于linux的traffic control(tc)和iptables这两个工具实现的,而android是linux内核,移植的可能性是有的,准备有时间把移植工做做为第二期进行,若是能在android上直接控制仍是不错的,毕竟搭建一个这样的环境仍是要耗费很多精力的,如今还很差说成败。有可能值得尝试一下。