Kurento
主页: http://www.kurento.org/
github: https://github.com/kurento
服务端采用C++实现: https://github.com/Kurento/kurento-media-server
Docker https://hub.docker.com/r/kurento/kurento-media-server
说明文档 https://doc-kurento.readthedocs.io/en/stable/
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-platedetector:用于检测视频流中的车牌的过滤器。
kms-pointerdetector:基于颜色跟踪检测视频流中指针的过滤器。
kms-chroma:过滤器,它在顶层使用颜色范围并使之透明,从而在后面显示另一个图像。
kms-crowddetector:用于检测视频流中人聚集的过滤器。
定制模块
docker run --name kms -d -p 8888:8888 \
-e KMS_STUN_IP= \
-e KMS_STUN_PORT=3478 \
-e KMS_TURN_URL=user@password:urlorIp:3478 \
kurento/kurento-media-server:latest
-e KMS_NETWORK_INTERFACES= \
-e KMS_EXTERNAL_ADDRESS= \
-e KMS_MIN_PORT= \
-e KMS_MAX_PORT= \
-e KMS_MTU=1200 \
kurento/kurento-media-server:latest
配制文件位置
/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
/etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini
#查看KMS日志
docker logs kms
#实时查看:
docker logs -f kms
日志输出
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
#进入镜像
docker exec -it kms /bin/bash
#安装vim
apt-get update
apt-get install vim
#进入配置文件夹
cd /etc/kurento/modules/kurento/
#编辑配置文件
vim WebRtcEndpoint.conf.ini
stunServerAddress=xx.xx.xx.xx
stunServerPort=pp
turnURL=username:userpwd@xx.xx.xx.xx:pp?transport=tcp
or
修改docker运行的kms配置文件方法
1.复制容器中的 配置文件到 宿主机中
docker cp kms:/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini ~/WebRtcEndpoint.conf.ini
2.修改配置文件
vim ~/WebRtcEndpoint.conf.ini
3.宿主机配置文件 复制到 kms容器中
docker cp ~/WebRtcEndpoint.conf.ini kms:/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
#查看当前启动的容器
docker ps
docker restart {kurento容器ID}
kurento相关配置
1、Kurento Media Server 日志
Kurento Media Server日志文件存储在 /var/log/kurento-media-server/文件夹中。 此文件夹的内容如下:
media-server_.<log_number>.<kms_pid>.log: Kurento Media Server的当前日志
media-server_error.log: 第三方错误
logs: 包含KMS已旋转日志的文件夹
2、Kurento Media Server 配置
/etc/default/kurento-media-server 默认配置
/etc/kurento/kurento.conf.json 通用配置
/etc/kurento/modules/kurento/MediaElement.conf.ini Media Elements 通用参数。
/etc/kurento/modules/kurento/SdpEndpoint.conf.ini SdpEndpoints的音频/视频参数( 例如: WebRtcEndpoint and RtpEndpoint)。
/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini WebRtcEndpoint 特定参数。
/etc/kurento/modules/kurento/HttpEndpoint.conf.ini HttpEndpoint 特定参数。
#### 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
用 idea 打开 kurento-hello-world 项目,下载 maven 依赖完成后,在 run configurations 中添加 new configurations。
选择 maven , command line 中输入:
spring-boot:run -Dkms.url=ws://
启动完之后用谷歌或者火狐浏览器打开demo页面https://localhost:8443/
点击start启动
运行 hello world 示例时,会遇到 使用websocket传输内容过长的问题
//项目中创建 package org.kurento.tutorial.helloworld.config
//config 包下创建类
package org.kurento.tutorial.helloworld.config;
@Configuration
//@ComponentScan
//@EnableAutoConfiguration
public class WebAppRootContext implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println(“org.apache.tomcat.websocket.textBufferSize”);
servletContext.addListener(WebAppRootListener.class);
servletContext.setInitParameter(“org.apache.tomcat.websocket.textBufferSize”,”1024000″);
}
}
““
API Java SDK for Kurento Media Server
https://github.com/Kurento/kurento-java
Kurento tutorials for Node JS
https://github.com/Kurento/kurento-tutorial-node
信令服务器与web客户端 kurento-room
https://github.com/Kurento/kurento-room
NUBOMEDIA
NUBOMEDIA Autonomous Installer
https://nubomedia.readthedocs.io/en/latest/tools/autonomous-installer/
Android客户端开源库
https://github.com/nubomedia-vtt/nubo-test
iOS客户端开源库
https://github.com/nubomediaTI/Kurento-iOS
ffmpeg转发模块
利用ffmpeg可执行文件将本地RTP流封装转发成RTMP推送出去,具体可以参考这个开源工程:
kurento-rtmp https://github.com/godka/kurento-rtmp
gstreamer转发模块
RTP解包 —— 音视频转换 —— FLV封包 —— RTMP推流