用starRTC实现对讲系统

时间:2024-04-17 19:52:22

本文链接: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-****博客_获取浏览器的音频权限
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、服务器。检查配置。