- 先上地址
android端:
GitHub - logan39522361/webrtc_android: A webrtc android demo.
ios:
目前由于缺少mac設備,所以無法開展
pc端(h5)與信令服務器(java):
GitHub - logan39522361/webrtc_signaling_server: A webrtc demo,signaling funcion.
【覺得好的記得star+fork,關注量夠的會繼續更新多人視頻】
- 本專案實作情況:
1、使用coturn作為STUN服務器,完成NAT檢測與流媒體中繼
2、使用自研信令服務器(java springboot)
3、客戶端目前開發了安卓與h5,實作了app to app、app to pc、pc to pc的點對點通信,還沒有實作多人視頻
ps:
1、pc的h5使用谷歌自帶的adapter.js可以使用螢屏共享功能,在有攝像頭或者麥克風的情況下也可以實作視頻通話
2、目前pc自測過chrome支持良好,理論上火狐應該也行,safari應該需要打開一些設定才行(缺少蘋果設備無法測驗)
- webrtc介紹
- I、webrtc是啥
webrtc的前世今生
大白話就是兩大點:
1、webrtc:是由谷歌主導且開源的流媒體傳輸、編解碼的框架,
2、傳輸方式:在非對稱型NAT的情況下,客戶使用自己的帶寬實作點對點流媒體傳輸(降低服務器壓力),在對稱型NAT的情況下使用服務器中繼傳輸,

- II、webrtc主要技術堆疊
1、NAT型別檢測服務器
2、流媒體中繼服務器
2、信令交換服務器
3、客戶端流媒體編解碼(谷歌買了一家專門做音視頻的編解碼公司,并開源了其代碼,一般app使用這個公司的c庫實作,谷歌瀏覽器自帶這個c庫)
- 實作具體步驟
環境:
服務器:centos7.9 jdk1.8
pc端:win10 jdk1.8
安卓端:android9.0
- 具體步驟01 coturn服務器搭建
1、安裝依賴
yum install git && yum install gcc && yum install gcc-c++ && yum install openssl && yum install openssl-devel && yum install libevent2 && yum install libevent-devel
2、獲取原始碼
wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
3、編譯與安裝
tar -zxvf 4.5.1.1.tar.gz && cd coturn-4.5.1.1 && ./configure && make && make install
4、修改配置
cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
vim /usr/local/etc/turnserver.conf
5、設定檔案內容:
listening-port=3478
listening-ip=【你的centos服務器局域網ip】
listening-device=eth0
tls-listening-port=5349
external-ip=【你的外部ip】
user=admin_test:123456
cli-password=123456
log-file=/app/logs/turn.log
pidfile=/app/logs/pid_turnserver
6、生成證書
cd /usr/local/etc/
openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes
7、啟動
coturn turnserver -o -a -f -v -r shenzhen -user=admin_test:123456 -c /usr/local/etc/turnserver.conf
8、安裝完成后使用 ice測驗,檢測stun服務器是否啟動成功(Chrome瀏覽器在測驗的時候有問題,請用Firefox瀏覽器測驗!)

填寫自己的服務器資訊點擊add Server
然后點擊gather
出現done即表示成功

- 具體步驟02 啟動信令服務器
啟動springboot即可
- 具體步驟03 啟動app與h5客戶端進行通話
- h5與h5通信(螢屏共享)
1、 打開信令服務器專案的other目錄的webrtc_share.html ,修改 :
ws_url 為你的websocket地址
ice_config 變數為你自己coturn的配置
2、打開兩個 webrtc_share.html
兩個頁面分別點擊step01準備peer
客戶A輸入客戶B的id,客戶A點擊step02建立連接
3、效果如下:

- app與h5通信(app攝像頭與麥克風,h5為螢屏共享)
1、使用android studio打開安卓專案,修改 com.kiddo.webrtcdemo.cons.UrlCons ws、http、stun、turn資訊為你的配置
2、pc端打開webrtc_share.html
2.1 修改 :
ws_url 為你的websocket地址
ice_config 變數為你自己coturn的配置
2.2 然后,點擊step01準備peer,記得一定要點擊“分享系統中的音頻”,因為sdp協議需要有對等關系,在螢屏共享這一塊我還沒改好兼容性,其實是可以不共享音頻的,后續會進行優化

3、編譯并打開app,重繪用戶串列,點擊呼叫即開始通話,如下:

安卓端,效果如下:

pc端,效果如下:

- 走過的坑和一些題外話
1、app的實作底層是谷歌編譯的c庫,有兩個版本:
libjingle_peerconnection(已過時,ios用黑蘋果親測過有些功能已無法使用)
GoogleWebRTC 目前安卓與ios都使用這個
2、sdp協議這一塊大家一定要吃透,特別是有需要不同業務、不同終端情況下建立通信的情況
比如pc端(h5)只使用麥克風與app端使用攝像頭+麥克風進行通話時,如果h5是發起方(create offer),h5在getUserMedia之后,需要手動修改sdp,加上 addTransceiver("video", {direction: "recvonly"}); 使sdp里帶有video資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389000.html
標籤:其他
上一篇:FP增長演算法
