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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次