互动直播之WebRTC服务器Kurento实战

这篇具有很好参考价值的文章主要介绍了互动直播之WebRTC服务器Kurento实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Kurento

Kurento的主要组件是Kurento媒体服务器(KMS),负责媒体传输,处理,记录和播放。KMS建立在出色的GStreamer多媒体库之上,并提供以下功能:

  • 网络流协议,包括HTTP,RTP和WebRTC。
  • 支持媒体混合和媒体路由/调度的组通信(MCU和SFU功能)。
  • 对实现计算机视觉和增强现实算法的过滤器的通用支持。
  • 媒体存储支持WebM和MP4的写入操作以及GStreamer支持的所有格式的播放。
  • GStreamer支持的任何编解码器之间的自动媒体转码,包括VP8,H.264,H.263,AMR,OPUS,Speex,G.711等。

kurentor,webrtc,服务器,运维

Kurento设计原则

Kurento的设计基于以下主要原则:

  • 分开的媒体和信令平面信号和媒体是两个独立的平面,以便应用程序可以分别处理多媒体处理的那些方面。
  • 媒体和应用服务的分配 Kurento Media Server和应用程序可以在不同的机器之间并置,升级或分布。 一个应用程序可以调用多个Kurento Media Server的服务。相反的情况也适用,即Kurento Media Server可以满足多个应用程序的请求。
    适用于云 Kurento适合集成到云环境中以充当PaaS(平台即服务)组件。
    媒体管道 通过媒体管道链接媒体元素是一种挑战多媒体处理复杂性的直观方法。
    应用开发 开发人员无需了解内部Kurento Media Server的复杂性:所有应用程序都可以以开发人员喜欢的任何技术或框架部署,从客户端到服务器。从浏览器到云服务。
    端到端通信能力 Kurento提供端到端通信功能,因此开发人员无需处理在客户端设备上传输,编码/解码和呈现媒体的复杂性。
    完全可处理的媒体流 Kurento不仅支持交互式人际通信(例如具有对话呼叫推送/接收功能的Skype),而且还支持人机(例如通过实时流传输的视频点播)和人机(例如远程视频录制) ,多传感器数据交换)通信。
    媒体的模块化处理 通过媒体元素和管道实现的模块化允许通过“面向图形”的语言定义应用程序的媒体处理功能,其中应用程序开发人员可以通过链接适当的功能来创建所需的逻辑。
    可审核的处理 Kurento能够为QoS监视,计费和审计生成丰富而详细的信息。
    无缝IMS集成 Kurento旨在支持无缝集成到电话运营商的IMS基础架构中。
    透明媒体适配层 Kurento提供了透明的媒体适配层,以使在屏幕大小,功耗,传输速率等方面具有不同要求的不同设备之间的融合成为可能。
  • Kurento模块体系

Kurento被设计为可插入框架,Kurento中的每个插件都称为一个模块,可以使用新的自定义模块扩展Kurento Media Server。更多信息,请阅读Kurento模块部分。

kurentor,webrtc,服务器,运维

kurentor,webrtc,服务器,运维

Kurento模块分为三类:

  • 主要模块 与Kurento Media Server开箱即用合并:
    • kms-core:Kurento Media Server的主要组件。
    • kms-elements:Kurento Media Elements的实现(WebRtcEndpoint,PlayerEndpoint等)
    • kms-filters:Kurento过滤器的实现(FaceOverlayFilter,ZBarFilter等)

内置模块 Kurento团队开发的额外模块,用于增强Kurento Media Server的基本功能。到目前为止,有四个内置模块,分别是:

  • kms-pointerdetector:基于颜色跟踪检测视频流中指针的过滤器。
  • kms-chroma:过滤器,它在顶层使用颜色范围并使之透明,从而在后面显示另一个图像。
  • kms-crowddetector:用于检测视频流中人聚集的过滤器。
  • kms-platedetector:用于检测视频流中的车牌的过滤器。
  • 定制模块 Kurento Media Server的扩展,提供了新的媒体功能。

2. 安装 EPEL 镜像源

yum update
# RHEL/CentOS 7:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
# RHEL/CentOS 8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 

3. 安装docker

# 卸载旧版本(如果安装过旧版本的话)
yum remove docker  docker-common docker-selinux docker-engine
# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 可使用阿里云docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker
yum install docker-ce docker-ce-cli containerd.io
#启动 docker
systemctl start docker
#开机自启
systemctl enable docker

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

4. 安装kurento

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

Kurento媒体服务器的端口(KMS)过程中默认监听8888客户端WebSocket连接。
容器运行后,您可以使用docker logs命令获取其日志输出: docker logs --follow kms >"kms-$(date '+%Y%m%dT%H%M%S').log" 2>&1
要检查KMS是否已启动并正在侦听连接,请使用以下命令:
 

curl \
    --include \
    --header "Connection: Upgrade" \
    --header "Upgrade: websocket" \
    --header "Host: 127.0.0.1:8888" \
    --header "Origin: 127.0.0.1" \
    http://127.0.0.1:8888/kurento

您应该得到类似于以下内容的响应:

HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0

忽略“ Server Error ”消息:这是预期的,它实际上证明KMS已启动并正在侦听连接。

5. 安装coturn

#安装依赖
yum install -y openssl-devel libevent-devel git

#clone 源码
git clone https://github.com/coturn/coturn.git 
cd coturn 
./configure 
make 
sudo make install

# 启动turnserver
nohup turnserver -L 0.0.0.0 -a -u kurento:kurento123pwd -v -f -r zhaolong.org &
#然后查看相应的端口号3478是否存在进程
sudo lsof -i:3478

kurentor,webrtc,服务器,运维

这样就说明已经可以启动了,接下来我们先停掉turnserver,重新配置。 turnserver 默认加载配置文件是etc/turnserver.conf或/usr/local/etc/turnserver.conf。

cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes

turnserver 默认使用的是SQLite数据库,如果是需要使用MySQL或者PostgreSQL,需要先初始化数据库,sql位置在/usr/local/share/turnserver/schema.sql

修改的turnserver.conf内容:
 

# 设置转发的ip(局域网ip),如果不设置,他会自己选择默认的
relay-ip=xx.xx.xx.xx

# 转发的外网ip(本机外网ip),用于NAT 地址映射
external-ip=xx.xx.xx.xx

# 转发的线程数,其实默认不设置最好
relay-threads=5

#UDP 最小端口和最大端口
min-port=40000
max-port=60000

# WebRTC 的消息里会用到
fingerprint

# WebRTC 认证需要
lt-cred-mech

#中继服务器的监听器IP地址
listening-ip=0.0.0.0

#静态账号
user=kurento:kurento

# 统计状态信息的redis db
redis-statsdb="ip=xx.xx.xxx.xx dbname=3 password=xxxx port=6379 connect_timeout=30"

# 用户登录域
realm=zhaolong.org

# 证书
cert=/usr/local/etc/turn_server_cert.pem

# 证书key
pkey=/usr/local/etc/turn_server_pkey.pem
 
# 输出log 
log-file=stdout

mobility

重新启动turnserver

nohup turnserver >> /var/tmp/turn.log &

记得开放使用的端口:

kurentor,webrtc,服务器,运维

可以用这个网址去测试stun和turn的有效性: webrtc.github.io/samples/src…

测试stun 测试stun的时候不需要输入账号密码,只需要输入stun:

kurentor,webrtc,服务器,运维

测试turn需要输入turn地址,以turn:开头,以及账号密码

kurentor,webrtc,服务器,运维

5. 配置kurento服务器

进入kurento的镜像编辑kurento的配置文件:

#进入镜像
docker exec -it kms /bin/bash
#安装vim
apt-get update
apt-get install vim
#进入配置文件夹
cd /etc/kurento/modules/kurento/
#编辑配置文件
vim WebRtcEndpoint.conf.ini

修改stun 和turn 信息

stunServerAddress=xx.xx.xx.xx
stunServerPort=pp
turnURL=username:userpwd@xx.xx.xx.xx:pp?transport=tcp

重启kurento容器

#查看当前启动的容器
docker ps 
docker restart  {kurento容器ID}

6. kurento-hello-world

git clone https://github.com/Kurento/kurento-tutorial-java.git
cd kurento-tutorial-java/kurento-hello-world
vim src/main/resources/static/js/index.js

在函数function uiStart()里,增加一个叫iceservers的变量,格式如下:

var iceservers={
    "iceServers":[
        {
          urls:"stun:xx.xx.xx.xx:3478"
        },
        {
          urls:["turn:xx.xx.xx.xx:3478"]
            username:"xxxx",
            credential: "xxxx"
        }
    ]
  }

再修改底下的options变量:

const options = {
    localVideo: uiLocalVideo,
    remoteVideo: uiRemoteVideo,
    mediaConstraints: { audio: true, video: true },
    onicecandidate: (candidate) => sendMessage({
      id: 'ADD_ICE_CANDIDATE',
      candidate: candidate,
    }),
      configuration: iceservers //修改在这里,增加了一个configuration的key
  };

启动项目

mvn -U clean spring-boot:run -Dkms.url=ws://xx.xx.xx.xx:8888/kurento

启动完之后用谷歌或者火狐浏览器打开demo页面https://localhost:8443/点击start启动

kurentor,webrtc,服务器,运维

至此,最简单的HelloWorld已经完成。

原文 互动直播之WebRTC服务器Kurento实战 - 掘金

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 文章来源地址https://www.toymoban.com/news/detail-833426.html

到了这里,关于互动直播之WebRTC服务器Kurento实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用于WebRTC的coturn服务器的搭建

    前言:         自己在研究WebRTC相关内容,在远端连接老是绕不开搭建ICE服务器,搜索了无数文章和方法,还是久久无进展,最后头皮嗯嘛了才成功,故想总结一下我的搭建步骤,供大家参考,避免少走弯路!!! 1、前期准备 准备一个自己的公网服务器,可以是阿里云或其

    2024年01月24日
    浏览(34)
  • python实现/直播服务器/聊天服务器/的多种解决方案

    在Python中,您可以使用以下技术栈来实现直播服务器: Flask:Flask是一个轻量级的Web框架,可用于构建直播服务器的后端。您可以使用Flask编写API端点来处理直播流的控制和管理。 Django:Django是一个功能强大的Web框架,提供了许多内置功能和插件,可用于构建复杂的直播服务

    2024年02月11日
    浏览(29)
  • 使用Swoole协程实现 WebRTC 信令服务器

    一、 什么是WebRTC WebRTC技术是激烈的开放的Web战争中一大突破-Brendan Eich, inventor of JavaScript。 简单来说,WebRTC 是一个音视频处理+及时通讯的开源库。在实时通信中,音视频的采集和处理是一个很复杂的过程。比如音视频流的编解码、降噪和回声消除等。由Google发起开源,其中

    2024年03月26日
    浏览(38)
  • 用Owncast构建直播服务器

    什么是 Owncast ? Owncast 是一个开源的自托管解决方案,具有高度可定制性和灵活性,可以在几分钟内部署在本地或云端,是独立于任何供应商或服务提供商的广播视频、课程、演示文稿、游戏、谈话或任何其他内容的解决方案。 Owncast 和老苏在 2020 年前写过 LiveGo 是同类应用

    2024年02月01日
    浏览(24)
  • 基于ESP32搭建物联网服务器十二(使用MQTT协议与ESP32互动)

    在之前的文章中:基于ESP32搭建物联网服务器十一(用WEB页面控制引脚(GPIO)功能)_esp32webserver 控制io_你的幻境的博客-CSDN博客 已经简单地介绍了MQTT协议,对比于其它网络协议,MQTT协议在物联网的开发中,它的特点使它适用于大多数受限的环境。例如网络代价昂贵,带宽低、不可

    2024年02月02日
    浏览(34)
  • WebRTC+Kamamilio+rtpengine+Websocket SIP服务器搭建教程

    发现国内使用SIP的资料真的很少,由于公司需要使用语音视频电话,在网上找了一大圈也没找到相关案例,最后自己折腾出一个方案,故此分享出来。 开始之前不得不介绍一下这五个东西。 Kamamilio 是 OpenSER 的前身,是C语言写的一个Sip服务,支持在 在Linux/UNIX系统上运行,优

    2024年02月15日
    浏览(60)
  • 直播APP源码搭建:核心的服务器系统

      在现代科技的推动下,网络衍生出了各种各样的技术,每个技术都被应用到需要的APP上,直播APP源码搭建出来的APP就是其中的一个,然而,这些技术能够成功的在直播APP源码搭建的APP中稳定的为用户们提供功能与服务,还要依托一个关键的系统,它是直播APP源码搭建出的平

    2024年02月09日
    浏览(29)
  • 世界杯直播背后的服务器(云计算体系)

    世界杯直播过程中,各大网络平台流媒体app上最大的变化毫无疑问就是零延迟。以前球迷看球是都会发现,网络直播的球赛会比电视播出的球赛延迟40s左右。如果群里有个看电视的兄弟兄弟每个进球他都能提前40秒预告给你,那么所有惊喜荡然无存。 这种情况产生,就是因为

    2023年04月08日
    浏览(25)
  • docker部署SRS实时视频服务器,rtmp推流,用WebRTC播放

    SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181 大家可以先去gitub上面看使用说明,地址是:v4_CN_Home · ossrs/srs Wiki · GitHub 然后我们通过docker去启动SRS,这些文档里面都有,就不用多说了,然后我们可以用rtmp推流 用WebRTC播放,首先要支持WebRTC我们需要

    2023年04月11日
    浏览(41)
  • [多媒体服务器] 通过nginx搭建 rtmp/hls/dash 媒体服务器,支持点播和直播

    How To Set Up a Video Streaming Server using Nginx-RTMP on Ubuntu 20.04 | DigitalOcean nginx,nginx rtmp插件,OBS,ffmpeg,ubuntu,youtube-dl 安装 nginx 和 rtmp 模块 增加如下内容到nginx配置文件 nginx.conf 说明: listen 1935  means that RTMP will be listening for connections on port 1935, which is standard. chunk_size 4096  means t

    2024年04月25日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包