zoukankan      html  css  js  c++  java
  • 用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:ProgramDataDockerDesktopvm-dataDockerDesktop.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:projectsca

    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、服务器。检查配置。

  • 相关阅读:
    Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题
    Android项目实战(五十四):zxing 生成二维码图片去除白色内边距的解决方案
    关于RecyclerView嵌套导致item复用异常,界面异常的问题
    191114
    191112
    191111
    191110
    191109
    191108
    191107
  • 原文地址:https://www.cnblogs.com/obarong/p/13260626.html
Copyright © 2011-2022 走看看