網絡環境模擬工具部署與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上直接控制仍是不錯的,畢竟搭建一個這樣的環境仍是要耗費很多精力的,如今還很差說成敗。有可能值得嘗試一下。