OWT (Open WebRTC Toolkit) 5.0 初体验与开发环境搭建

2023-11-22 15:08

本文主要是介绍OWT (Open WebRTC Toolkit) 5.0 初体验与开发环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

OWT是Intel前些年开源的基于互联网的视频会议解决方案,可以支持WebRTC和SIP终端。这几年WebRTC应用的特别广泛,使用OWT可以快速搭建一个WebRTC视频会议系统。OWT最初仅支持MCU模式,也就是服务器混流,客户端仅可订阅一路音视频即可,后来新版本也支持SFU模式。

OWT 项目地址 https://github.com/open-webrtc-toolkit , 包含服务器端 OWT-Server 和 各种客户端程序。

我是做服务器开发的,后续主要分享 OWT-Server 相关的内容,因认知有限,有错误欢迎提出,有问题尽可留言交流。

从代码结构上讲,OWT-Server 底层业务使用 C++ ,对WebRTC库就行封装,ICE协商部分使用的 libnice 库。 上层业务逻辑使用的 Node.js 编写的。作为一个C++ 码农,不得不说用Node.js写业务真是比C++爽太多了~

Demo 体验

对于学习来说,先跑个demo看看现象,才能知道这玩意能不能满足需求。

我用目前最新的OWT-Server 5.0 版本,编译打包后制作了一个docker镜像,里面包含了Web端的Demo,拉下来直接run应该就可以体验了。

先来个最简单的,使用host模式哦~ 省的映射端口了。

docker run -d --name owt-demo --network host lmshao/owt-server

Web 观看地址:https://localhost:3004/ 。注意是https的,因为是默认假的证书,所以浏览器有提醒,确认一下就可以了。正常入会如下图显示,中间大方块是一路mix媒体流,上面小图是本地回显。
OWT-demo
关于这个镜像的使用可以参考 docker hub : lmshao/owt-server。

不使用host网络模式启动容器
3004 是web端口,8080是webrtc信令端口,15672是RabbitMQ web控制台管理端口,3300是会议配置web控制台端口。这种模式启动应该只能在本机web参会,不能在同一局域网其他机器入会。

docker run -d --name owt-demo \-p 3004:3004 \-p 8080:8080 \-p 15672:15672 \-p 3300:3300 \lmshao/owt-server

开发环境搭建

正常流程

之所以强调是正常流程,是因为OWT用到很多第三方库,最重要的是WebRTC库需在在线安装配置,众所周知的原因,境内的服务器是没法正常使用的。可以看下面 “曲线救国” 章节介绍。

如果用的是境外的服务器或者用小飞机之类的代理工具,就可以按照Github owt-server页面README进行配置就好了,主要由下面几个步骤。官方指定系统Ubuntu 18.04 或者CentOS 7.6,我亲自试了Ubuntu20.04默认会报一些错误。

下载OWT-Server

OWT-Server git clone 或者直接下载 Release 包。

安装第三方依赖

这一步非常慢,并且需要连谷歌等外网!

scripts/installDepsUnattended.sh
编译C++代码
scripts/installDepsUnattended.sh
打包发布
scripts/pack.js -t all

如果要把官方web demo打包进去的话,可以使用下面命令

scripts/pack.js -t all --install-module --app-path ${webrtc-javascript-sdk-sample-conference-dist}

--install-module指定是打包的时候安装node.js依赖,${webrtc-javascript-sdk-sample-conference-dist}目录是 owt-client-javascript 打包生成的dist目录。具体 owt-client-javascript 打包方法直接看它的README吧。

曲线救国

上不了外网安装依赖失败的看这里,编译报错八成也是因为安装依赖报错了。
这个方法也适用于把代码 COPY 到别的路径编译不通过。

摸索到一个好方法,就是在境外服务器上下载安装依赖后,把文件夹直接拿过来使用。没有境外服务器可以在 Vultr 上买一个按时间付费的服务器,用完直接删除,也就几毛钱的事。

假设你已经在别的服务器上执行 scripts/installDepsUnattended.sh 安装完了依赖,把代码COPY到了你的服务器。这时候你直接编译已经是会报错的,因为有一些依赖里面使用的是绝对路径,导致还是找不到相应第三方库,即使已经在你的 owt-server 目录里面了。

安装依赖后第三方库的信息在这个build/libdeps/build/lib/pkgconfig目录下面,可以看看里面.pc文件中的库的路径是绝对路径。然后把这些库里面的所有路径都设置为你当前代码所在的路径就应该可以了。

举个栗子,假如你第一次安装依赖的时候owt目录为/root/owt-server-5.0,那你.pc文件里面应该就有/root/owt-server-5.0字样,可以sed命令全替换为当前路径。
比如:

# 可以先备份一下build/libdeps/build/lib/pkgconfig 防止改呲花了
cd owt-server-5.0
sed -i "s;/root/owt-server-5.0;$PWD;g" build/libdeps/build/lib/pkgconfig/*.pc

现在应该就可以正常编译了。如果还是有一些库链接不到,那就 find 它所在的目录,然后直接 export LD_LIBRARY_PATH=/XXXX 或者export PKG_CONFIG_PATH,实在不行最简单粗暴的方法就是在线安装那个库,前提是仓库里有那个库。

后记

OWT server 是模块化的框架,也就是说信令模块,混流模块和会控等模块是分离的,可以分布式集群化部署。其他优点可以去看其他的介绍类文章,或者LiveVideoStack大会PPT。

OWT 作为一个开源的视频框架,完全可以在此基础上增加一些业务逻辑进行商用。近两年的LiveVideoStack大会,好像每次都有人专门讲OWT的应用。

OWT 媒体层使用C++开发,上层业务逻辑使用Node.js开发,写业务逻辑是真的快,接触OWT后我也是新学的Node.js,使用 Node.js 唯一不香的是 OWT 内部数据结构 代码中没有定义,不像C++看个头文件就知道这个结构里面都是啥,这点对于初学者来说不是很友好。

后续有时间再细致聊聊这两三年中遇到的坑,简单的问题可以留言交流。

这篇关于OWT (Open WebRTC Toolkit) 5.0 初体验与开发环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410990

相关文章

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t