文章      动态     相关文章     最新文章     手机版动态     相关动态     |   首页|会员中心|保存桌面|手机浏览

o2uzo

http://dgaty.xhstdz.com/como2uzo/

相关列表
文章列表
  • 暂无文章
推荐文章
全功能WebRTC应用程序AppRTC应用服务阿里云搭建测试总结并docker化提供镜像
发布时间:2024-11-19        浏览次数:9        返回列表

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

  • ​​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. 最后​​

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

之前说了很多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​​

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

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

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

参考:​​https://chromium.googlesource.com/external/webrtc/apprtc/+/098481a24a37529565fe4bb416a11c84d04370f4/README.md​​​​javascript:void(0)​​​​

自行搜索解决(个人感觉你可以将其当成git来学,虽然两者是不同的东西,但是我感觉分布式的思想和命令行操作这块两者惊人的相似​

  • 安装vim
  • 更新源
  • 安装ssh
  • 安装ifconfig工具
  • 安装git

复制以下源到sources.list

4.4.1 创建目录

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

4.4.2 安装JDK

4.4.3 安装node.js

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

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

4.4.5 安装google_appengine

4.4.6 安装go

安装go:

创建go工作目录

4.4.7 安装apprtc

4.4.8 安装coturn

4.4.9 安装nginx

默认安装目录:/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

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

4.5.1 coturn打洞+中继服务器

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

  • 1.命令行运行
  • 2.docker运行

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

4.5.2 collider信令服务器

  • 1.命令行运行方式

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

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

  • 2.docker运行

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

4.5.3 apprtc房间服务器

先安装python的request模块

  1. 安装pip
  1. 修改配置文件

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

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

  • 3.命令行启动
  • 4.docker启动运行

此时可以通过谷歌浏览器访问测试:​​

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

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

4.5.4 nginx代理

​​

  • 1.生成证书

之后需要输入国家省市地区公司名个人名邮件等,可以随意,这里是自签名证书,商用时需要申请域名证书,上节我们在阿里云上申请免费ssl证书已经总结过了。

  • 2.web代理

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

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

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

  • 3.配置websocket代理

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

重启nginx加载配置文件(​​)。

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

最终结果(大概443行):

然后重新build:

重新运行:

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

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

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

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

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

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

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

如果你是按照外部运行nginx,其它的服务运行在docker容器中的话可以直接使用我这里的镜像,修改其中的 ​​ 修改其中localhost的部分,修改为你的公网ip,修改后参考上面的编译运行方式重新运行启动(因为没有对turn进行配置,所以域名可能也不行,需要单独做域名配置)

测试Google浏览器443端口在Windows、MacOS、Android下是可用的(直接微信页面打开也可以),免费的ssl证书会报警告,不用理会。

目前我会在阿里云服务器上保留一段时间用于测试,各位i也可以测试一下:​​

MacOS:

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

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

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

鸿蒙OS平板:

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

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

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