用starRTC實現對講系統


本文鏈接:https://www.cnblogs.com/obarong/p/13260626.html

名詞解釋:

  • AEC(agent event center):用戶事件中心。
  • VoIP(Voice over Internet Phone):網絡語音電話業務

項目:

一、用Docker搭建starrtc局域網服務器

環境

Win10最新
Docker Desktop最新

安裝Docker Desktop。

打開powershell,拉取容器鏡像

> docker pull starrtc/starrtc

默認下載到虛擬機位置C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx。約2GB多。

啟動容器

> docker run -d --privileged=true -it -p 80:80 -p 443:443 -p 1935:1935 -p 10086-10088:10086-10088 -p 19903-19941:19903-19941 -p 29991-29995:29991-29995 -p 19931:19931/udp -p 10086:10086/udp -p 10088:10088/udp -p 19935:19935/udp -p 19928:19928/udp -p 19941:19941/udp -p 44446:44446/udp --name starrtc starrtc/starrtc /bin/bash

檢查docker是否運行

> docker ps -a

打開CLI終端,執行命令,啟動mysql,php7,nginx

cd /root/
./start.sh

查看網址 http://localhost/demo/web/

如果能顯示,則服務器運行成功。

參考

docker for windows pull鏡像文件的安裝位置 - Rogn - 博客園
https://www.cnblogs.com/lfri/p/11621410.html

Docker部署服務端,web端,在線教育 · starrtc/starrtc-server Wiki
https://github.com/starrtc/starrtc-server/wiki/Docker部署服務端,web端,在線教育

二、發消息功能

到im目錄,修改index.html

cd /opt/nginx/html/demo/im
vim index.html

修改后

var privateURL = "192.168.3.3";

IP是主機的。

用管理員啟動服務端程序

cd /opt/nginx/html/starrtc-server/web-supported/
su
./start.sh

starrtc.conf里面的aecurl暫時不用改。

主機用Chrome打開 http://192.168.3.3/demo/im/

下載Android端APP,或者用源碼編譯運行。

修改IP

手機要和主機在同一局域網。

如果出現反復登錄和斷開連接,則退出APP並清后台,重啟APP。

成功發送消息

三、視頻對講功能

Android端比較簡單,只要設置正確,就可以視頻對講

web端很麻煩,要做SSL證書,要用HTTPS訪問。

實現了登錄

有時候web登錄不了,可能是APP在重連,清手機后台即可。

修改Chrome權限,允許HTTP訪問媒體 http://192.168.3.3/demo/web/ ,實現web一對一視頻。視頻有點卡,Android19不能和Mac對講。

暫時沒能實現HTTPS訪問web demo。

參考

Chrome 瀏覽器獲取音頻設備權限問題 Cannot read property getUserMedia of undefined_Monkey's bolg-CSDN博客_獲取瀏覽器的音頻權限
https://blog.csdn.net/QT_Port/article/details/106860099

四、配置SSL證書

生成證書

下載編譯好的openssl。官方只提供源碼,偷懶下載別人編譯好的,如果要保證安全性,還是要自己編譯。

配置Windows環境變量,把openssl的路徑放到系統變量Path的最前,防止引用了別的openssl。

查看openssl版本,如果是新版本,那說明路徑沒錯。

> openssl version
OpenSSL 1.1.1g  21 Apr 2020

創建目錄D:\projects\ca

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
openssl genrsa -out 192.168.3.3.key 2048
openssl req -new -key 192.168.3.3.key -out 192.168.3.3.csr

創建文件192.168.3.3.ext,添加內容

keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName

[ SubjectAlternativeName ]
IP.1=192.168.3.1
IP.2=192.168.3.3

生成crt

openssl x509 -req -in 192.168.3.3.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 192.168.3.3.crt -days 500 -sha256 -extfile 192.168.3.3.ext

替換服務端證書

crt 轉 pem

openssl x509 -in 192.168.3.3.crt -out test.pem

復制文件到docker容器

docker cp .\192.168.3.3.pem afbc1ea42d3f:/opt/nginx/html/starrtc-server/web-supported/test.pem
docker cp .\192.168.3.3.key afbc1ea42d3f:/opt/nginx/html/starrtc-server/web-supported/test.key

afbc1ea42d3f是容器ID,查看ID docker ps

打開容器CLI,進入web-supported目錄

cd /opt/nginx/html/starrtc-server/web-supported/

假設你的證書為test.key和test.pem,將web-supported目錄里面的所有key和pem都替換成你的key和pem,但文件名保持不變, 即:

rm -f starchatroom.key starmsg.key starsrc.key starvdn.key starvoip.key
cp test.key starchatroom.key && cp test.key starmsg.key && cp test.key starsrc.key && cp test.key starvdn.key && cp test.key starvoip.key
rm -f starchatroom.pem starmsg.pem starsrc.pem starvdn.pem starvoip.pem
cp test.pem starchatroom.pem && cp test.pem starmsg.pem && cp test.pem starsrc.pem && cp test.pem starvdn.pem && cp test.pem starvoip.pem

重啟服務端程序。

訪問 https://192.168.3.3:29991/ ,沒有提示不安全。

參考

starrtc騰訊雲部署連同android 與 web | BUG集散地
https://chrunlee.cn/article/starrtc-server-deploy.html

starRtc 私有部署_fengyhj的專欄-CSDN博客_starrtc
https://blog.csdn.net/fengyhj/article/details/93890569

附上一些報錯

  • web im不能獲取聊天室列表

解:
訪問一下 https://192.168.3.3:29991 ,再刷新im頁面。Mac信任根證書之后,才能訪問29991端口的網頁,im才能獲取聊天室列表。

  • Mate9,1080P在Mac不能通話。無解
  • web一對一通話無反應,按F12查看報錯
star_rtc_video.min.js:1 Uncaught TypeError: Cannot read property 'getUserMedia' of undefined
    at StarWebRTC (star_rtc_video.min.js:1)
    at new StarRtc.StarVideoSDK (star_rtc_lib.min.js:1)
    at new StarRtc.StarRoomSDK (star_rtc_lib.min.js:1)
    at StarRtc.StarSDK.r.getStarRoomSDK (star_rtc_lib.min.js:1)
    at StarRtc.StarSDK.r.getVoipRoomSDK (star_rtc_lib.min.js:1)
    at HTMLDivElement.callingVOIP (index.js:1891)
    at HTMLButtonElement.<anonymous> (jquery-ui.min.js:11)
    at HTMLButtonElement.dispatch (jquery-3.2.1.min.js:3)
    at HTMLButtonElement.q.handle (jquery-3.2.1.min.js:3)

解:
看第三節的參考。

  • 查看服務器的log
tail -f logs/msgServer.log

這是消息服務的log,其他服務同理。

報錯

     HANDSHAKE START -   before/accept initialization  - UNKWN
                LOOP -   before/accept initialization  - UNKWN
                LOOP -      SSLv3 read client hello A  - 3RCH_A
                LOOP -     SSLv3 write server hello A  - 3WSH_A
                LOOP -      SSLv3 write certificate A  - 3WSC_A
                LOOP -      SSLv3 write server done A  - 3WSD_A
                LOOP -               SSLv3 flush data  - 3FLUSH
[StarRTC 2020-07-02 15:58:07] ==asockSrvDisconnectFun== ,cfd = 22

解:
多連幾次。重啟APP、服務器。檢查配置。


免責聲明!

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



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