使用WebRTC搭建1v1視頻聊天室


WebRTC建立通信過程

image

  • 基礎設施:必要的信令服務和 NAT 穿越服務
  • clientA 和 clientB 分別創建 RTCPeerConnection 並為輸出端添加本地媒體流。如果是視頻通話類型,則意味着,兩端都需要添加媒體流進行輸出。
  • 本地 ICE 候選信息采集完成后,通過信令服務進行交換。
  • 呼叫端(好比 A 給 B 打視頻電話,A 為呼叫端)發起 offer 信息,接收端接收並返回一個 answer 信息,呼叫端保存,完成連接。

實現1v1視頻聊天

信令服務器

對於上面的額所講到的信令服務器,我們可以采取搭建websocket服務器實現。更進一步,我們可以采用socketio來實現,因為它自帶room管理,可以給我們帶來很多便利。

NAT穿透

而NAT穿透,我們知道在WenRTC中是通過STUN/TURN協議實現的,我們可以自己搭建這種服務器,但比較繁瑣,可以參考https://webrtc.org.cn/stunturn_quick_guide/。作為測試,我們可以使用一些免費的服務器,可以從中選取。
例如:

{url:'stun:stun01.sipphone.com'},
{url:'stun:stun.ekiga.net'},
{url:'stun:stun.fwdnet.net'},
{url:'stun:stun.ideasip.com'},
{url:'stun:stun.iptel.org'},
{url:'stun:stun.rixtelecom.se'},
{url:'stun:stun.schlund.de'},
{url:'stun:stun.l.google.com:19302'},
{url:'stun:stun1.l.google.com:19302'},
{url:'stun:stun2.l.google.com:19302'},
{url:'stun:stun3.l.google.com:19302'},
{url:'stun:stun4.l.google.com:19302'},
{url:'stun:stunserver.org'},
{url:'stun:stun.softjoys.com'},
{url:'stun:stun.voiparound.com'},
{url:'stun:stun.voipbuster.com'},
{url:'stun:stun.voipstunt.com'},
{url:'stun:stun.voxgratia.org'},
{url:'stun:stun.xten.com'},
{
    url: 'turn:numb.viagenie.ca',
    credential: 'muazkh',
    username: 'webrtc@live.com'
},
{
    url: 'turn:192.158.29.39:3478?transport=udp',
    credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
    username: '28224511:1379330808'
},
{
    url: 'turn:192.158.29.39:3478?transport=tcp',
    credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
    username: '28224511:1379330808'
}

在創建RTCPeerConnection時可以作為選項設置。

https

WebRTC限制遠程訪問攝像頭等媒體設備時,必須使用https做安全訪問,本地測試可以使用http。但是由於我們現在是做1v1視頻聊天,因此一個https服務器是必須的。
無論采用golang,還是nodejs搭建web服務器,提供https訪問是很簡單的,如golang使用gin框架提供web服務時:

router.RunTLS(config.WebServerHostTLS, "ssl/server.crt", "ssl/server.key")

主要就是ssl證書的問題。如果你有購買域名,一般的雲服務提供商都有生成ssl證書的服務,但是如果沒有域名,我們可以使用openssl來創建測試證書。當然這樣的證書由於並為被認證,所以使用時瀏覽器還是會報安全警告,但是這對於我們測試來說足夠了。

openssl生成證書的過程可以參考:https://www.cnblogs.com/pzblog/p/9088286.html .

實現效果

image

演示地址: https://134.175.26.82:8082/static/demo/remote_chat.html.

倉庫地址:https://github.com/243286065/WebRTCDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM