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

相关文章

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤