名词解释:
- 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-****博客_获取浏览器的音频权限
https://blog.****.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的专栏-****博客_starrtc
https://blog.****.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、服务器。检查配置。