這次的需求,准備做的是一個類似與QQ視頻一樣的點對點視頻聊天。這幾天了解了一些知識后,決定使用HTML5新支持的WebRtc來作為視頻通訊。客戶端使用支持HTML5瀏覽器即可。服務器段需要提供兩個主要的服務功能,一個是信令服務器(Signaling Server),一個是NAT穿透服務器(ICE Server)。簡單的框架圖如下:
1.安裝e2esoft vcam 虛擬攝像頭
由於我本地是台式電腦,沒有攝像頭,另一方面,為了調試的方便,安裝這個虛擬攝像頭。
我是在這里下載的http://www.loveliao.com/downfiles/VCam_v4.5.exe
2.安裝信令服務器
網上信令服務器大多是以nodejs寫的。這里以skyrtc為例,進行演示。
1 apt-get install nodejs npm 2 git clone https://github.com/LingyuCoder/SkyRTC-demo 3 cd SkyRTC-demo 4 npm install 5 nodejs server.js
這樣瀏覽器訪問本地http://localhost:3000就可以訪問了。(主要chrome好像46以上版本,除了本地localhost和127.0.0.1本地調試外,其他的訪問方式,必須要https。否則不能運行。PC端和移動端好像都是這樣) Chrome報錯如下:
這里准備用Firefox進行演示。移動端也是用Firefox進行演示。
手機端,用Firefox瀏覽器查看的效果。
3.安裝coturn(開源的iceserver)
這個跟谷歌開源的rfc5766-turn-server 是類似的,這里我使用coturn
1 git clone https://github.com/coturn/coturn 2 cd coturn 3 ./configure 4 make 5 make install
安裝后在coturn/examples/etc 目錄下使用該命令執行
turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535 --user=ling:ling1234 --user=ling2:ling1234 -r demo
這樣就啟動好了,默認的監聽端口是3478
4.修改WebRtc 客戶端配置
修改Skyrtc-demo/public/SkyRTC-client.js
免費公開的stun+turn 服務器 : https://gist.github.com/yetithefoot/7592580
5.運行,查看效果
root@debian-srv:~/workspace/SkyRTC-demo# nodejs server.js
瀏覽器打開兩個頁面
一個PC端 一個移動端
親測,移動4G可以跟我當前的網絡穿透成功,但是移動3G不行。其他的網絡網絡運營商沒有測試。單靠這些,做着玩玩還可以,距離產品還差十萬八千里呢。當下的網絡還是比較復雜的,IPv4告急,有些ISP分配的IP的還有可能是內網的,有些大機構的網絡還是對稱性NAT。而對於對稱型NAT是基本不能穿透的。要經過轉發, 而轉發視頻對帶寬的消耗是很大的。真的是希望IPv6早點普及。
參考資料:
webrtc資料:
https://segmentfault.com/a/1190000000439103
https://bitbucket.org/webrtc/codelab/overview
https://github.com/LingyuCoder/SkyRTC-demo
http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/
http://www.mamicode.com/info-detail-513556.html
https://simplewebrtc.com/
https://gist.github.com/yetithefoot/7592580
ICEServer資料
https://github.com/coturn/coturn
http://www.cnblogs.com/lingdhox/p/4209659.html