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

简介: 先介绍Kurento的主要模块及Kurento的Docker安装方式,接着介绍了基于coturn项目的打洞服务器的安装及调试,最后介绍Kurento的demo调试。

【转载请注明出处】:https://www.jianshu.com/p/b625b7c0c2a4

1. Kurento

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

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

image.png

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模块部分。

Kurento模块体系结构

扩展的Kurento工具箱

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

image.png

这样就说明已经可以启动了,接下来我们先停掉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 &

记得开放使用的端口:
image.png

可以用这个网址去测试stun和turn的有效性:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

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

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

image.png

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启动
image.png

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

【转载请注明出处】: https://www.jianshu.com/p/b625b7c0c2a4

相关文章
|
2月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
521 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
4月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
314 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
5月前
|
弹性计算 Linux 网络安全
阿里云服务器迁移中心SMC实战指南:跨平台业务迁移教程参考
现在越来越多的个人和企业用户选择将其他云平台或者服务商的业务迁移到阿里云,但是如何快速且安全完成迁移是很多用户比较关注的问题,我们可以选择使用阿里云提供的服务器迁移中心(Server Migration Center,简称SMC),这个产品是阿里云提供给您的迁移平台,专注于提供能力普惠、体验一致、效率至上的迁移服务,满足您在阿里云的迁移需求。本文为大家展示使用阿里云服务器迁移中心SMC将其他云平台业务迁移至阿里云的教程,以供参考。
|
5月前
|
弹性计算 资源调度 搜索推荐
阿里云ECS中长期成本节省计划解析:从原理到实战,助力企业降本提效
阿里云ECS节省计划的推出为企业用户提供了一种全新的成本优化方案。通过一次性购买的方式享受长期按量付费的折扣权益,客户不仅可以大幅降低ECS资源的使用成本还可以享受更高的灵活性和便捷性。本文将从多个维度深入剖析阿里云ECS节省计划,包括其核心优势、详尽的购买使用指引、与传统付费模式的全面对比,以及一客户成功案例,以供大家了解和参考。
|
5月前
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
348 0
|
9月前
|
存储 监控 调度
云服务器成本优化深度解析与实战案例
本文深入探讨了云服务器成本优化的策略与实践,涵盖基本原则、具体策略及案例分析。基本原则包括以实际需求为导向、动态调整资源、成本控制为核心。具体策略涉及选择合适计费模式、优化资源配置、存储与网络配置、实施资源监控与审计、应用性能优化、利用优惠政策及考虑多云策略。文章还通过电商、制造企业和初创团队的实际案例,展示了云服务器成本优化的有效性,最后展望了未来的发展趋势,包括智能化优化、多云管理和绿色节能。
|
11月前
|
机器学习/深度学习 弹性计算 运维
云计算系列之阿里云ECS服务器管理实战
本文档介绍了阿里云ECS(Elastic Compute Service)的基本概念、实例管理、磁盘操作、快照与镜像功能及其应用场景,最后通过具体案例解析ECS的实际应用。ECS是阿里云提供的高效、可靠的云计算服务,支持多种业务需求,如Web应用、高并发网站、数据库等,帮助企业快速构建稳定安全的应用,提升运维效率,降低IT成本。文档还详细说明了ECS实例的创建方式、连接方法及日常管理操作,帮助用户更好地利用ECS服务。
313 2
云计算系列之阿里云ECS服务器管理实战
|
网络协议
keepalived对后端服务器的监测方式实战案例
关于使用keepalived进行后端服务器TCP监测的实战案例,包括配置文件的编辑和keepalived服务的重启,以确保配置生效。
162 1
keepalived对后端服务器的监测方式实战案例

热门文章

最新文章