【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/106321369

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等。

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 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

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

默认的turnserver日志没有时间,可以借助于工具包:moreutils。 这个工具包的一个 ts 工具就是可以让输出的内容加上时间格式。
注意:服务器内置也有一个 ts 命令,但是这个不是我们要的,而是 openssl 的一个指令。

yum install moreutils
# 安装完之后
$ man ts

然后接下来试着输出:

echo -e "foo\nbar\nbaz" | ts '[%Y-%m-%d %H:%M:%S]'

这样就会自动带上时间格式了。重新启动turnserver

nohup turnserver -c /usr/local/etc/turnserver.conf -v | ts '[%Y-%m-%d %H:%M:%S]'  >> /var/tmp/turn.log 2>&1 &

记得开放使用的端口:

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

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

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

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启动

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

【转载请注明出处】: https://blog.csdn.net/huahao1989/article/details/106321369

互动直播之WebRTC服务器Kurento实战相关推荐

  1. 互动直播之WebRTC服务开源技术选型【转】

            最近研究了一下会议服务器相关的知识,看到了这篇文章,介绍了很基础的概念说明和选型比较,这里转载分享一下. 转自:互动直播之WebRTC服务开源技术选型 - 掘金 1 直播基础知识 最原 ...

  2. 直播软件开发互动直播之WebRTC服务开源技术选型

    直播软件开发互动直播之WebRTC服务开源技术选型 1 直播基础知识 最原始的直播系统其实并没有想象的那么复杂,无非就是主播端将音视频数据推送到服务器,观众端则从服务器拉取数据播放. 1.1 基本常识 ...

  3. 后端: 互动直播之WebRTC服务开源技术选型

    1 直播基础知识 最原始的直播系统其实并没有想象的那么复杂,无非就是主播端将音视频数据推送到服务器,观众端则从服务器拉取数据播放. 1.1 基本常识 1.1.1 基础概念 推流  推流,是直播中的一个 ...

  4. 互动直播之WebRTC服务开源技术选型

    基于WebRTC的低延迟视频直播 https://xw.qq.com/cmsid/20200304A04E3A00 可以用WebRTC来做视频直播吗? https://www.zhihu.com/qu ...

  5. webrtc服务器架构Mesh/MCU/SFU

    互动直播之WebRTC服务开源技术选型 https://www.jianshu.com/p/73f2615dc3ef WebRTC 开发实践:为什么你需要 SFU 服务器 https://cloud. ...

  6. 基于WebRTC的互动直播实践

    互动直播已经逐渐成为直播的主要形式.映客直播资深音视频工程师叶峰峰在LiveVideoStackCon 2018大会的演讲中详细介绍了INKE自研连麦整体设计思路.如何基于WebRTC搭建互动直播SD ...

  7. SRS+metaRTC+FFmpeg助力直播进入webrtc直播互动新时代

    概述 直播已是一项互联网基础应用,由于用户对社交互动的强烈需求,"互动直播"已经成为直播主流,当前直播还是以rtmp为主,延迟大.抗弱网能力差等是rtmp解决不了的难题,随着web ...

  8. 开源直播推流sdk_基于WebRTC的互动直播实践

    互动直播已经逐渐成为直播的主要形式.映客直播资深音视频工程师叶峰峰在LiveVideoStackCon 2018大会的演讲中详细介绍了INKE自研连麦整体设计思路.如何基于WebRTC搭建互动直播SD ...

  9. 直播服务器不能正常运行,解决人人商城互动直播通信服务无法通信问题

    昨天帮朋友解决了人人商城互动直播通信服务无法通信问题,而这个直播平台是可以和微信公众号联在一起使用的,我也没有用过,只是看过他的界面.平台使用到swoole的PHP组件,怎样的安装,我这里就不一一的说 ...

最新文章

  1. 蓝绿发布、滚动发布、灰度发布,有什么区别?
  2. [转载]Windowsnbsp;Servernbsp;2008nbsp;R2nbsp;之二十五ADnbsp;RMS信任策略
  3. XX基金 机器学习平台使用情况访谈总结
  4. 计算机组成原理运算器设计,计算机组成原理2_5教学计算机运算器设计.ppt
  5. Hadoop只输出Key不输出Value的小技巧‏
  6. pythonos文件目录方法_python12-OS模块(文件/目录方法)
  7. 【宝藏系列】推荐几款免费的视频转文字字幕的软件
  8. 【小程序】前端微信授权登录
  9. 解决LaTeX中文表格单行文本太长导致水平溢出,表格内长文本换行
  10. 老板电器应收账款较年初增近七成 Q3净利增速环比拦腰斩半
  11. 定义一个矩形类Rectangle
  12. 数据科学 IPython 笔记本 四、Keras(下)
  13. 自动化测试平台化[v1.0.0][模块化设计方法]
  14. 电脑蓝色,我的电脑蓝色是怎么回事
  15. topcoder客户端
  16. 分享一个超nice的数据分析实战案例, “手把手”教学,收藏等于学会
  17. CPU与GPU区别 通俗易懂
  18. 拷贝主机文件到VirtualBox虚拟机
  19. 护航者,腾讯云: 2017年度游戏行业DDoS态势报告—回溯与前瞻
  20. WIN SECS .NET 2.7

热门文章

  1. 无力吐槽的废酱的几个问题
  2. Hadoop 2.7.2 分布式集群搭建-操作指南(不断更新)
  3. MySQL 查看SQL语句执行阶段和进度信息
  4. 黑苹果 之 神舟战神Z7M-SL7D2
  5. 数据结构——简单实现森林转化为二叉树
  6. 使用CCS调试CC3200芯片GPIO接口应用----流水灯程序
  7. vue中怎么获取元素
  8. ICPR MTWI 2018 挑战赛三:网络图像的端到端文本检测和识别算法架构
  9. Github 设置提交邮件地址
  10. JVM:并发的可达性分析