文章目录

  • 1. 前言
  • 2. WebRTC资料准备
  • 3. AppRTC资料准备
  • 4. docker创建Ubuntu16.04镜像部署并导出
    • 4.1 安装docker
    • 4.2 docker获取Ubuntu16.04镜像
    • 4.3 准备工作
    • 4.4 安装AppRTC所需软件
      • 4.4.1 创建目录
      • 4.4.2 安装JDK
      • 4.4.3 安装node.js
      • 4.4.4 安装python和python-webtest(python2.7)
      • 4.4.5 安装google_appengine
      • 4.4.6 安装go
      • 4.4.7 安装apprtc
      • 4.4.8 安装coturn
      • 4.4.9 安装nginx
    • 4.5 配置与运行
      • 4.5.1 coturn打洞+中继服务器
      • 4.5.2 collider信令服务器
      • 4.5.3 apprtc房间服务器
      • 4.5.4 nginx代理
    • 4.6 解决跨域问题
  • 5. docker方式运行方案及实践
    • 5.1 导入导出镜像以及上传仓库
    • 5.2 不同容器运行不同服务测试
    • 5.3 一个容器运行所有服务
  • 6. 效果展示(MacOS、Windows和鸿蒙OS都可以)
  • 7. 最后

1. 前言

之前我们已经在阿里云服务器上搭建了turn/stun服务(https://juejin.cn/post/7122267115540709407),也使用webRTC测试过rtsp转webRTC播放视频(https://juejin.cn/post/7119334586089209869),实时性很好,这里我们再搭建官网的全功能WebRTC应用程序AppRTC应用服务做一下实时音视频通话的测试。

2. WebRTC资料准备

之前说了很多webrtc的内容,但是一直没有系统说过如何学习,其实就像很久前就说过的从官网了解并获取资料:https://webrtc.org/
借助 WebRTC,您可以为应用添加基于开放标准运行的实时通信功能。它支持在对等设备之间发送视频、语音和通用数据,使开发者能够构建强大的语音和视频通信解决方案。这项技术适用于所有现代浏览器以及所有主要平台的原生客户端。WebRTC 采用的技术是开放网络标准,以常规 JavaScript API 的形式在所有主流浏览器中提供。对于原生客户端(例如 Android 和 iOS 应用),可以使用具备相同功能的库。WebRTC 项目属于开源项目,受 Apple、Google、Microsoft 和 Mozilla 等公司支持。本页面由 Google WebRTC 团队维护。
示例:https://webrtc.github.io/samples/
WebRTC 有许多不同的用例,从使用摄像头或麦克风的基本 Web 应用,到更高级的视频通话应用和屏幕共享。我们收集了大量的代码示例,以便更好地说明该技术的工作原理及其用途。
使用指南:https://webrtc.org/getting-started/overview

3. AppRTC资料准备

GitHub:https://github.com/webrtc/apprtc/

AppRTC 房间+Web服务器使用python+js语言
AppRTC Collider信令服务器采用go语言
Coturn 采用C语言
在部署到公网时需要通过Nginx做Web和Websocket的代理连接
实际开发:把信令+房间管理都是写到一个服务器(我们后续可以尝试将这些服务都用go来实现)

4. docker创建Ubuntu16.04镜像部署并导出

参考:https://chromium.googlesource.com/external/webrtc/apprtc/+/098481a24a37529565fe4bb416a11c84d04370f4/README.md
https://blog.csdn.net/lingshengxueyuan/article/details/100519054
注:下列搭建过程是我在阿里云的ubuntu20上利用docker实践总结的,测试效果还可以,并且测试Windows、macOS(后续可能会在支持docker的openWRT或Android上实践,有需要的可以先照猫画虎尝试一下)上docker拉取镜像后改进使用都没有任何问题,大家可以放心使用。

4.1 安装docker

自行搜索解决(个人感觉你可以将其当成git来学,虽然两者是不同的东西,但是我感觉分布式的思想和命令行操作这块两者惊人的相似):https://blog.csdn.net/weixin_39510813/category_11255657.html?spm=1001.2014.3001.5482

4.2 docker获取Ubuntu16.04镜像

docker pull ubuntu:16.04
docker images
docker run -it ubuntu:16.04 /bin/bash

4.3 准备工作

  • 安装vim
  • 更新源
  • 安装ssh
  • 安装ifconfig工具
  • 安装git
apt-get update
apt-get install vim
# 1 在修改source.list前,最好先备份一份
mv /etc/apt/sources.list /etc/apt/sources.list.old
# 2 执行命令打开sourcse.list文件
vim /etc/apt/sources.list
# 3 复制更新源
apt-get update
# apt-get install openssh-server(我们是docker方式可以不需要)
# apt-get install net-tools
# apt-get install iputils-ping
apt-get install git

复制以下源到sources.list

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

4.4 安装AppRTC所需软件

4.4.1 创建目录

mkdir ~/webrtc
cd ~/webrtc

注意后续的目录,因为我们是docker中直接root用户,所有后续目录是/root/webrtc,后续的目录都是采用该目录。
安装需要的各种工具(除了apt之外还可以下载安装包或者源码自己编译安装)

4.4.2 安装JDK

# 先安装add-apt-repository命令支持
apt-get install python-software-properties
apt-get install software-properties-common
# 第一步:打开终端,添加ppa源
add-apt-repository ppa:openjdk-r/ppa
# 第二步:更新源
apt-get update
# 第三步:安装openjdk 8
apt-get install openjdk-8-jdk
# 第四步:配置openjdk 8为默认java环境
update-alternatives --config java
update-alternatives --config javac
# 最后,验证一下是否成功
java -version
# 返回
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

4.4.3 安装node.js

cd ~/webrtc
apt-get install wget
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
# 解压
tar -xvf node-v10.16.0-linux-x64.tar.xz
# 进入目录
cd node-v10.16.0-linux-x64/
# 查看当前的目录
pwd# 确认一下nodejs下bin目录是否有node 和npm文件,如果有就可以执行软连接,比如
ln -s /root/webrtc/node-v10.16.0-linux-x64/bin/npm /usr/local/bin/
ln -s /root/webrtc/node-v10.16.0-linux-x64/bin/node /usr/local/bin/
# 看清楚,这个路径是你自己创建的路径,我的路径是/root/webrtc/node-v10.16.0-linux-x64# 查看是否安装,安装正常则打印版本号
node -v
npm -v # 有版本信息后安装 grunt-cli,先进到nodejs的bin目录, 要和自己的目录匹配
cd /root/webrtc/node-v10.16.0-linux-x64/bin
npm -g install grunt-cli
ln -s /root/webrtc/node-v10.16.0-linux-x64/bin/grunt /usr/local/bin/grunt --version
# 显示grunt-cli v1.4.3#使用淘宝源替换npm,后续要执行npm时执行cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
ln -s /root/webrtc/node-v10.16.0-linux-x64/lib/node_modules/cnpm/bin/cnpm /usr/local/bin/

4.4.4 安装python和python-webtest(python2.7)

ubuntu 一般都会自带python 2.7 输入 python -v 输出版本则已经有了
如果没有则安装:

# 没有则输入下命令
apt-get install python
# python 安装之后安装 Python-webtest
apt-get install python-webtestpython -V
#Python 2.x

4.4.5 安装google_appengine

# 回到webrtc目录
cd ~/webrtc/
# 下载google_appengine
wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip
apt-get install unzip
unzip google_appengine_1.9.40.zip#配置环境变量:在/etc/profile文件最后增加一行,和自己路径保持一致
export PATH=$PATH:/root/webrtc/google_appengine
# 生效
source /etc/profile

4.4.6 安装go

安装go:

apt-get install golang-go
#检测go 版本
go version
#go version go1.6.2 linux/amd64

创建go工作目录

#创建go工作目录
mkdir -p ~/webrtc/goworkspace/src
#配置环境变量:在/etc/profile文件最后增加一行:
vim /etc/profile
export GOPATH=/root/webrtc/goworkspace
# 然后执行
source /etc/profile

4.4.7 安装apprtc

cd ~/webrtc/
# 先尝试使用github的下载连接
git clone https://github.com/webrtc/apprtc.git
# 如果github的连接下不了就用码云的链接
git clone https://gitee.com/sabergithub/apprtc.git
#将collider的源码软连接到go的工作目录下
ln -s /root/webrtc/apprtc/src/collider/collider $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidermain $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidertest $GOPATH/src#下一步在编译 go get collidermain: 被墙
#报错: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
#所以先执行:
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/net.git net
go install net
#如果git clone不行把代理关了再试下#编译collidermain
cd ~/webrtc/goworkspace/src
go get collidermain
go install collidermain

4.4.8 安装coturn

apt-get install libssl-dev
apt-get install libevent-dev# 返回webrtc目录
cd ~/webrtc
#git clone https://github.com/coturn/coturn
#cd coturn
#提供另一种安装方式turnserver是coturn的升级版本
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7./configure
make
make install

4.4.9 安装nginx

#安装依赖:gcc、g++依赖库
apt-get install build-essential libtool
#安装 pcre依赖库(http://www.pcre.org/)
apt-get install libpcre3 libpcre3-dev
#安装 zlib依赖库(http://www.zlib.net)
apt-get install zlib1g-dev
#安装ssl依赖库
apt-get install openssl#下载nginx 1.15.8版本
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/# 配置,一定要支持https
./configure --with-http_ssl_module# 编译
make#安装
make install

默认安装目录:/usr/local/nginx
启动:/usr/local/nginx/sbin/nginx
停止:/usr/local/nginx/sbin/nginx -s stop
重新加载配置文件:/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

4.5 配置与运行

4.5.1 coturn打洞+中继服务器

配置防火墙,允许访问3478端口(含tcp和udp,此端口用于nat穿透),实际还有带加密的端口;

  • 1.命令行运行
turnserver -L 0.0.0.0 -a -u admin:admin
#账号 admin 密码:admin 这一步随便给,但是后面配置apprtc时需要用到
#命令后加 & ,执行起来后按 ctr+c,不会停止apt-get install lsof
#开启新窗口 执行
lsof -i:3478
#输出大致这样的成功
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
turnserve 30299 root   16u  IPv4  61868      0t0  UDP *:3478
turnserve 30299 root   17u  IPv4  61869      0t0  UDP *:3478
turnserve 30299 root   32u  IPv4  61879      0t0  TCP *:3478 (LISTEN)
turnserve 30299 root   33u  IPv4  61880      0t0  TCP *:3478 (LISTEN)
  • 2.docker运行

我们后面会通过docker运行该服务,大致命令:

docker run -p 3478:3478 -t -i -d ubuntu-apprtc:1.0.0 turnserver -L 0.0.0.0 -a -u admin:admin

4.5.2 collider信令服务器

  • 1.命令行运行方式

配置防火墙,允许访问8089端口(tcp,用于客户端和collider建立websocket信令通信)

# 执行collider 信令服务器
sudo nohup $GOPATH/bin/collidermain -port=8089 -tls=false -room-server="http://192.168.2.143:8090" &

-room-server=“http://192.168.2.143:8090” 实际是连接房间服务器的地址(如果部署在本地可以使用localhost)

  • 2.docker运行

我们后面会通过docker运行该服务,大致命令:

docker run -t -i -d -p 8089:8089 ubuntu-apprtc:1.0.0 /root/webrtc/goworkspace/bin/collidermain -port=8089 -tls=false -room-server="http://www.xiaoyaoyou.xyz:8090"

4.5.3 apprtc房间服务器

先安装python的request模块

    1. 安装pip
cd /root/webrtc
wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg  --no-check-certificate
chmod +x setuptools-0.6c11-py2.7.egg
./setuptools-0.6c11-py2.7.egg
wget https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz
tar -xf pip-1.5.4.tar.gz
cd pip-1.5.4/
python setup.py install
pip install requests==2.20
    1. 修改配置文件

配置防火墙,允许访问8090端口(tcp,此端口用于web访问)
配置文件修改(主要是配置apprtc对应的conturn和collider相关参数)
vim /root/webrtc/apprtc/src/app_engine/constants.py
修改后(填的都是外网IP,为了适合更多数朋友测试,我这里用的是内网的环境,在公网部署填入公网IP或域名即可;stun/turn可以使用网上免费的,国内也有很多免费的,就可以本地不启动stun/turn服务了,wss服务主要是信令服务器需要,如果信令服务是跑在本地就使用本机地址,后面配置证书使用nginx代理即可)

# ICE_SERVER_OVERRIDE = None 注释掉# Turn/Stun server override. This allows AppRTC to connect to turn servers
# directly rather than retrieving them from an ICE server provider.
# ICE_SERVER_OVERRIDE = None
# Enable by uncomment below and comment out above, then specify turn and stun
ICE_SERVER_OVERRIDE = [{"urls": ["turn:localhost:3478?transport=udp","turn:localhost:3478?transport=tcp"],"username": "admin","credential": "admin"},{"urls": ["stun:localhost:3478"]}]ICE_SERVER_BASE_URL = 'https:localhost'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = 'localhost:8088'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{WSS_INSTANCE_HOST_KEY: 'localhost:8088',WSS_INSTANCE_NAME_KEY: 'wsserver-std',WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}]

进到apprtc目录(这个web后端后面我们尝试改成go实现来替代python实现):

#编译
cd /root/webrtc/apprtc
cnpm install
grunt build
npm install --dev coffeescript
grunt build#如果cnpm安装报错:
npm uninstall -g cnpm // 首先卸载 cnpm
npm install cnpm@7.1.0 -g // 安装指定版本 cnpm
  • 3.命令行启动
/root/webrtc/google_appengine/dev_appserver.py --host=0.0.0.0 --port=8090 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check
  • 4.docker启动运行
docker run -t -i -d -p 8090:8090 ubuntu-apprtc:1.0.0 /root/webrtc/google_appengine/dev_appserver.py --host=0.0.0.0 --port=8090 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check

此时可以通过谷歌浏览器访问测试:http://localhost:8090

虽然可以访问网页,但是无法进入房间无法获取音视频权限,还需要后续配置ssl。

#检查
lsof -i:8090
#输出下列内容
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13744 root    8u  IPv4  58173      0t0  TCP *:8090 (LISTEN)

4.5.4 nginx代理

注意:nginx我们这里暂时不使用docker方式,直接安装到本机进行代理配置,方便使用云服务器的证书,当然,你也可以选择docker方式,docker运行我们后面再说明,其实大差不差。

  • 1.生成证书
mkdir -p ~/cert
cd ~/cert
# CA私钥
openssl genrsa -out key.pem 2048
# 自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095

之后需要输入国家省市地区公司名个人名邮件等,可以随意,这里是自签名证书,商用时需要申请域名证书,上节我们在阿里云上申请免费ssl证书已经总结过了(https://blog.csdn.net/weixin_39510813/article/details/125886341?spm=1001.2014.3001.5502)。

  • 2.web代理

反向代理apprtc,使之支持https访问,如果http直接访问apprtc,则客户端无法启动视频音频采集(必须得用https访问)
– 配置web服务器
(1)配置自己的证书

// 注意证书所在的路径
ssl_certificate /root/cert/cert.pem
ssl_certificate_key /root/cert/key.pem

(2)配置主机域名或者主机IP
server_name 192.168.2.143;
完整配置文件:/usr/local/nginx/conf/conf.d/apprtc-https-proxy.conf

upstream roomserver {server localhost:8090;
}
server {listen 443 ssl;ssl_certificate /root/cert/cert.pem;ssl_certificate_key /root/cert/key.pem; charset utf-8;# ip地址或者域名server_name localhost;location / {# 转向代理的地址proxy_pass http://roomserver$request_uri;proxy_set_header Host $host;}
}

编辑nginx.conf文件,在末尾}之前添加包含文件

  include /usr/local/nginx/conf/conf.d/*.conf;
}
  • 3.配置websocket代理

ws是不安全的连接 类似http
wss是安全的连接,类似https
完整配置文件:/usr/local/nginx/conf/conf.d/apprtc-websocket-proxy.conf

map $http_upgrade $connection_upgrade {default upgrade;'' close;
}
upstream websocket {server localhost:8089;
}server {listen 8088 ssl;ssl_certificate /root/cert/cert.pem;ssl_certificate_key /root/cert/key.pem;server_name localhost;location /ws {proxy_pass http://websocket;proxy_http_version 1.1;proxy_connect_timeout 4s; #配置点1proxy_read_timeout 6000s; #配置点2,如果没效,可以考虑这个时间配置长一点proxy_send_timeout 6000s; #配置点3proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}
}

重启nginx加载配置文件(/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf)。

4.6 解决跨域问题

浏览器通话跨域问题 :pushState
Messages:Failed to start signaling: Failed to execute ‘pushState’ on ‘History’
解决方法:
修改文件apprtc/src/web_app/js/appcontroller.js

vim /home/lqf/webrtc/apprtc/src/web_app/js/appcontroller.js
#搜索  displaySharingInfo_ 大概是445行displaySharingInfo_函数第一行添加roomLink=roomLink.replace("http","https");

最终结果(大概443行):

AppController.prototype.displaySharingInfo_ = function(roomId, roomLink) {roomLink=roomLink.replace("http","https");this.roomLinkHref_.href = roomLink;this.roomLinkHref_.text = roomLink;this.roomLink_ = roomLink;this.pushCallNavigation_(roomId, roomLink);this.activate_(this.sharingDiv_);
};

然后重新build:

cd ~/webrtc/apprtc
grunt build

重新运行:

/root/webrtc/google_appengine/dev_appserver.py --host=0.0.0.0 --port=8090 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check

5. docker方式运行方案及实践

docker运行这里我们可以有三种方式:

  • 1.可以将我们安装的这些内容导出并导入为一个新的统一镜像,在新镜像中分别运行各个服务,根据运行不同的服务形成不同的容器,但是这显然有的服务没有运行,该镜像会比较大,好处是在部署的服务器上利用该镜像可以随时运行其它服务;
  • 2.在统一镜像中一次性运行所有服务,这对服务器的性能要求高一些,但是部署难度会降低,直接一个docker命令运行所有服务,而且达到开箱即用的效果;
  • 3.将不同的服务形成不同的镜像,一个镜像只包含一个服务的依赖,这样做带来了docker镜像管理的难度,我们需要学习一些docker管理的软件,但这是docker希望的样子,更符合云化和微服务化的要求和目的,我们可以利用集群的能力避免服务宕机可能带来的风险;

我们这里由于只做初步测试将使用第一种和第二种方式。

5.1 导入导出镜像以及上传仓库

实际上我们也可以通过Dockerfile方式构建镜像,但是上述依赖太复杂了,写Dockerfile比较麻烦,我通常喜欢拉取一个基础镜像,然后bash进入后安装依赖,之后导出再导入形成一个新镜像(后续可以尝试第三种方式并根据不同的服务形成四个Dockerfile,这样更符合docker的设计目的,尽可能的将可复用的内容都单独容器化)。

#docker export -o 指定路径及镜像包名 容器名
docker export -o .\ubuntu-apprtc.tar naughty_banzai
#docker import 包名及路径 镜像名:版本tag
docker import ubuntu-apprtc.tar ubuntu-apprtc:1.0.1
#查看镜像
docker images
#登录
docker login
#添加tag:docker tag image1:tag 用户名/image1:tag版本
docker tag ubuntu-apprtc:1.0.1 19930128/ubuntu-apprtc:1.0.1
#docker push 用户名/image1:latest
docker push 19930128/ubuntu-apprtc:1.0.1
#之后可以利用pull在其它服务器上拉取现成的镜像修改运行容器了

docker hub上传失败的话可以选择国内的免费仓库,比如阿里云的,请自行搜索如何上传阿里云仓库
阿里云镜像上传参考地址:https://docs.docker.com/

5.2 不同容器运行不同服务测试

docker run -t -i -p 8090:8090 ubuntu-apprtc:1.0.1 /root/webrtc/google_appengine/dev_appserver.py --host=0.0.0.0 --port=8090 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_checkdocker run -t -i -p 8089:8089 ubuntu-apprtc:1.0.1 /root/webrtc/goworkspace/bin/collidermain -port=8089 -tls=false -room-server="http://localhost:8090"docker run -p 3478:3478 -t -i -d ubuntu-apprtc:1.0.1 turnserver -L 0.0.0.0 -a -u admin:admin

使用三个容器运行三个服务并将端口映射出来,之后在外部使用nginx做代理进行https\wss的代理即可。

5.3 一个容器运行所有服务

我们也可以将coturn打洞中继服务默认运行在镜像内,或者直接使用一些免费的stun/turn服务;之后信令服务和nginx代理在容器内直接以服务运行,docker外部只暴露web服务启动即可(或者使用bash -c将上述三条命令放到一起启动一个容器即可)。

6. 效果展示(MacOS、Windows和鸿蒙OS都可以)

如果你是按照外部运行nginx,其它的服务运行在docker容器中的话可以直接使用我这里的镜像,修改其中的 **vim /root/webrtc/apprtc/src/app_engine/constants.py**
修改其中localhost的部分,修改为你的公网ip,修改后参考上面的编译运行方式重新运行启动(因为没有对turn进行配置,所以域名可能也不行,需要单独做域名配置)
测试Google浏览器443端口在Windows、MacOS、Android下是可用的(直接微信页面打开也可以),免费的ssl证书会报警告,不用理会。
目前我会在阿里云服务器上保留一段时间用于测试,各位i也可以测试一下:https://www.xiaoyaoyou.xyz:443
MacOS:

Windows(微信直接打开链接也可以,Google浏览器打开也可以):

鸿蒙OS平板:

Android和ios使用浏览器都报了错误,房间链接失败了,看着似乎是信令的问题,后面我们分析源码的时候再来试一下(而且退出房间后似乎ws/wss链接断开不及时,退出后再次使用一个房间号很可能会提升房间已满)。

7. 最后

docker的好处就在这里了,一次部署,只要在支持docker的环境再次部署就容易多了,再也不同担心部署过程中的环境依赖问题了,这让运维实施和开发都少了头疼的一件事(在我环境上是好的.)。

全功能WebRTC应用程序AppRTC应用服务阿里云搭建测试总结并docker化提供镜像相关推荐

  1. centos7 设置阿里云yum源、docker源和docker镜像加速

    centos7 设置阿里云yum源和docker源及镜像加速 1 背景 2 yum源设置 2.1 备份yum文件 2.2 下载yum文件 2.3 清理缓存 2.4 生成新缓存 3 docker 源设置 ...

  2. 云应用程序架构:阿里云国际版服务器托管注意事项

    传统Web托管中的通用应用程序或Web应用程序通常总是被证明是一个挑战.无论是设计结构还是可扩展的架构,以支持趋势和需求.典型的宿主方案遵循三层体系结构,并将其划分为表示层.持久性层和应用层.借助内置 ...

  3. 微信小程序录音直传阿里云OSS并语音识别

    前言 如题:做一个录音文字识别功能,知识点有三个,分别是微信小程序的录音功能.录音文件直传阿里云OSS.使用阿里云的录音文件识别接口返回识别后的文字 一.微信小程序录音 官方文档:微信小程序全局唯一的 ...

  4. 如何将nodejs项目程序部署到阿里云服务器上

    将nodejs项目程序部署到阿里云服务器上 一.概述 二.具体步骤 1.拥有自己的服务器 2.下载Xshell 3. oneinstack配置web环境 4. XShell连接远程主机 5.更新系统软 ...

  5. 微信小程序上传阿里云OSS,返回204,400,403,405,解决方案

    目录 微信小程序上传阿里云 ==OSSAccessKeyId,policy,signature==如何获取呢? 配置Bucket跨域访问 配置外网域名到小程序的域名白名单 上传报错(返回400,403 ...

  6. 阿里云数据中台加速场景化 Quick系列产品新增猛将

    "数据猿作为"2020云栖大会"官方受邀媒体,为大家带来了此次盛会中最精彩的报道内容. 提示:点击文末"阅读原文"可关注数据猿最新推出的[产业图谱+企 ...

  7. 基于阿里云搭建的适合初创企业的轻量级架构--架构总结

    ----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变.快速部署.持续集成并可以适应多种情况的架构便显得尤为重 ...

  8. 如何基于阿里云搭建适合初创企业的轻量级架构?

    ----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变.快速部署.持续集成并可以适应多种情况的架构便显得尤为重 ...

  9. 阿里云搭建自己的anki服务器

    阿里云搭建自己的anki服务器 @[Toc](阿里云搭建自己的anki服务器) 背景 需要买一台云服务器 云服务器 远程登录 一些准备工作 关于操作系统的适应 我踩的一些坑 搭建过程 打开端口 输入命 ...

最新文章

  1. Struts2中Action接收参数
  2. 【Scala】Scala-调用Java-集合
  3. 用Python实现最速下降法求极值
  4. 使用循环语句判定用户账号密码输入三次是否正确
  5. css知识笔记(一)——基础知识、选择器、元素分类
  6. 实验二十四、OSPF 在NBMA 环境中点到点的配置
  7. 利用云计算打造政务信息化及应急指挥云平台
  8. 优贝共享数据交易所网_2020.10.4号币圈简报:优贝兼职视界卖单积压,耀健康上涨...
  9. 采用Kruskal算法生成最小生成树,并采用并查集的合并优化和查询优化。
  10. 中断处理函数_ARM的中断处理 [二]
  11. 原生js调用json方法
  12. 签名别人的公钥以及验证签名的公钥
  13. 边开发就能边测试?一招教你在linux服务器配置Jenkins持续集成神器
  14. 【LaTeX】pdfTex error: pdflatex.exe (file simhei.ttf): cannot open TrueType font file for reading解决方案
  15. vs2012 链接内置数据库 sql express 出现error 26 解决方法
  16. 光模块测试CEI-28G-VSR 浅析1---背景基础介绍
  17. matlab 矩阵 三维矩阵相乘,将三维矩阵与二维矩阵相乘
  18. ubuntu upgrade problem
  19. 《算法导论》第16章-贪心算法 16.1-活动选择问题(含C++代码)
  20. html中js左右图片切换效果,JS实现图片切换特效

热门文章

  1. 100个G以上的超大文件的下载方法
  2. 如何使用ChromeHeadLess 技术实现后台对前台页面截屏
  3. webpack面试题整理
  4. linux如何退出root用户
  5. HR面需要准备的问题
  6. Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例
  7. 最新麦芒装饰装修小程序源码3.2.59版+全开源/支持三端
  8. 零基础学习接口测试-接口文档
  9. 一天一个 Linux 命令(30):hdparm 命令
  10. 洛谷P8873-E-梅莉的市场经济学