webrtc 低延迟视频流研究测试

背景

  • 之前试过nginx+rtmp的视频推流服务器,https://blog.csdn.net/IOT_SHUN/article/details/79684856 ,虽然画面清晰度很好,多客户的不会卡顿,但是延迟很高,
  • 查阅资料发现基于webrtc的技术可以很好的解决这一问题,所以今天搭建一个webrtc的服务

webrtc介绍

常用的webrtc开源服务器技术

  • 大而全的Kurento
  • 务实主义的Licode
  • 小而美的Mediasoup
  1. Kurento 在应用中有哪些问题,或者说,哪些是优势,哪些是劣势呢,我们看下面:

优势:
文档齐全无论API使用文档,还是部署文档都很齐全
功能强大,强大的路径和计算机视觉处理
模块化编程,方便扩展,这是对开发者很友好的地方
使用方便,客户端服务端都有专门的API 组件 接入系统,而且服务器端提供了J2EE node.js两种接口文档,覆盖很齐全

劣势:
代码太多太庞大,可能需要开发者有足够的功力才能驾驭这把屠龙刀
还一个重要原因就是性能比较差

  1. Mediasoup

优势:
性能优秀
支持很多的WebRTC 新特性(PlanB UnifiedPlan simulcast)
同时支持ORTC和WebRTC 的互通

劣势:
功能比较少
代码和架构相对来比较晦涩一点
信令模块只提供node.js 版本

  1. Licode 作为WebRTC 服务器有很多优势:

优点
功能齐全扩展方便,鉴权,存储,融合通信一应俱全
代码扩展简单,预留了足够的扩展接口
部署简单,一键脚本安装,很方便

缺点:
内部模块说明比较少
性能一般
服务端只提供的node.js 版本

Kurento

今天只研究测试Kurento,因为只能在ubuntu安装,但是好在可以用docker,

Ubuntu下本地安装Kurento

1.卸载kurento,使用aptitude卸载软件包,它具有更好的删除算法,删除了Kurento安装的所有依赖项

sudo aptitude remove kurento-media-server

2.确保已安装GnuPG

sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
gnupg

输入完gnupg回车后:
在这里插入图片描述
3.定义系统中安装了哪个版本的Ubuntu,仅运行以下行之一

DISTRO="xenial"  # KMS for Ubuntu 16.04 (Xenial)
DISTRO="bionic"  # KMS for Ubuntu 18.04 (Bionic) //由于使用的是Ubuntu18.04服务器,所以选择这个1

4.将Kurento存储库添加到您的系统配置中

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83

回车后依次输入下面命令并回车:

sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.13.0 $DISTRO kms6
EOF

5.安装KMS

sudo apt-get update && sudo apt-get install --yes kurento-media-server

6.针对KMS服务常用命令

sudo service kurento-media-server start //启动kms
sudo service kurento-media-server stop //停止kms
sudo service kurento-media-server restart //重启kms

这里我们选择启动kms服务:sudo service kurento-media-server start

7.检查KMS服务是否开启

curl -i -N \
    -H "Connection: Upgrade" \
    -H "Upgrade: websocket" \
    -H "Host: 127.0.0.1:8888" \
    -H "Origin: 127.0.0.1" \
    http://127.0.0.1:8888/kurento

docker部署

#安装最新版kurento
docker pull kurento/kurento-media-server:latest
#启动镜像
docker run --name kms -d -p 8888:8888  kurento/kurento-media-server:latest

#查看KMS日志
docker logs kms
#实时查看:
docker logs -f kms

应用实践

注意安装npm https://blog.csdn.net/weixin_55719805/article/details/128094550

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

image
image

官方历程
git clone https://github.com/Kurento/kurento-tutorial-node.git

kurento有几个重要的配置文件:
/etc/kurento/kurento.conf.json
/etc/kurento/modules/kurento/MediaElement.conf.ini
/etc/kurento/modules/kurento/SdpEndpoint.conf.ini
/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
/etc/kurento/modules/kurento/HttpEndpoint.conf.ini
/etc/default/kurento-media-server

建议大家看看里面的内容,比如修改监听端口,配置stun/turn server地址等,都可以在里面找到答案。

不需要客户端浏览器直接播放
前端 https://github.com/lulop-k/kurento-rtsp2webrtc.git
更新20240118

测试发先node运行hellow-world,本地有图像,远程没有图像
教程 https://doc-kurento.readthedocs.io/en/6.13.2/tutorials/node/tutorial-helloworld.html
debug

  • 安装turn
    apt install coturn
    引用
后面想了一下,发现是因为 Kurento 服务 和 我的浏览器 这两个 peer 端根本不在同一个局域网, 所以要借助 turn server 来转发。 但是我之前安装完 turn server 之后,并没有在 kerento 上进行配置。而对应的 demo 的 server.js 也没有连接 turn server 的代码。

虽然 demo 没有配置 turnserver ,但是教程文档确实有写, 看了一下文档: How to configure STUN/TURN?, 发现有两种配置方式:

一种是直接在 kms 服务的配置文件 /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini 中直接配置默认的 turn server 转发,然后重启 kms 服务
另一种是在浏览器端连接 kms 的时候,动态指定 turn server 地址,这种方式也是可以的,具体 API 文档: setTurnUrl
我用的是第二种,也就是连接的时候,动态指定 turn server 的地址,代码修改如下: server.js 加上一行代码就行了, 原先的代码是这样子:

参考资料

https://juejin.cn/post/6844904050148769800
https://blog.csdn.net/qq_29928745/article/details/107644884
https://kebingzao.com/2020/06/19/webrtc-sfu-kurento/

posted @ 2024-01-16 10:30  学不会xuebuhui  阅读(81)  评论(0编辑  收藏  举报
Language: javascript