名詞解釋:
- AEC(agent event center):用戶事件中心。
- VoIP(Voice over Internet Phone):網絡語音電話業務
項目:
- starrtc-web:前端,視頻聊天
- starrtc-webim:前端,發消息
- starrtc-server:后台
一、用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、服務器。檢查配置。
