在Centos7上搭建Kurento
官方网址:https://github.com/Kurento/kurento-media-server
官网教程:https://doc-kurento.readthedocs.io/en/latest/user/installation.html
Kurento是一个WebRTC媒体服务器,同时提供了一系列的客户端API,可以简化供浏览器、移动平台使用的视频类应用程序的开发。Kurento支持:
- 群组通信(group communications)
- 媒体流的转码(transcoding)、录制(recording)、广播(broadcasting)、路由(routing)
- 高级媒体处理特性,包括:机器视觉(CV)、视频索引、增强现实(AR)、语音分析
Kurento的模块化架构使其与第三方媒体处理算法 —— 语音识别、人脸识别 —— 很容易集成。和大部分多媒体通信技术一样,Kurento应用的整体架构包含两个层(layer)或者叫平面(plane)
- 信号平面(Signaling Plane):负责通信的管理,例如媒体协商、QoS、呼叫建立、身份验证等
- 媒体平面(Media Plane):负责媒体传输、编解码等
WebRTC让浏览器能够进行实时的点对点通信(在没有服务器的情况下)。但是要想实现群组通信、媒体流录制、媒体广播、转码等高级特性,没有媒体服务器是很难实现的。
Kurento的核心是一个媒体服务器(Kurento Media Server,KMS),负责媒体的传输、处理、加载、录制,主要基于 GStreamer实现。此媒体服务器的特性包括:
- 网络流协议处理,包括HTTP、RTP、WebRTC
- 支持媒体混合(mixing)、路由和分发的群组通信(MCU、SFU功能)
- 对机器视觉和增强现实过滤器的一般性支持
- 媒体存储支持,支持对WebM、MP4进行录像操作,可以播放任何GStreamer支持的视频格式
- 对于GStreamer支持的编码格式,可以进行任意的转码,例如VP8, H.264, H.263, AMR, OPUS, Speex, G.711
安装coturn
Github:https://github.com/coturn/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:kurento -v -f -r psvmc.cn &
#然后查看相应的端口号3478是否存在进程
sudo lsof -i:3478
这样就说明已经可以启动了,接下来我们先停掉turnserver,重新配置
turnserver 默认加载配置文件/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.conf:
vi /usr/local/etc/turnserver.conf
内容:
# 设置转发的ip(局域网ip),如果不设置,他会自己选择默认的
relay-ip=******
# 转发的外网ip(本机外网ip),用于NAT 地址映射
external-ip=******
# 转发的线程数,其实默认不设置最好
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"
# 用户登录域(例如:dev.com)
realm=****
# 证书
cert=/usr/local/etc/turn_server_cert.pem
pkey=/usr/local/etc/turn_server_pkey.pem
# 输出log
log-file=stdout
mobility
重新启动turnserver:
nohup turnserver -c /usr/local/etc/turnserver.conf -v | ts '[%Y-%m-%d %H:%M:%S]' >> /usr/local/etc/turn.log 2>&1 &
注意:这个ts命令,是openssl的一个指令,用来打印日期
yum install moreutils
man ts
echo -e "hello world" | ts '[%Y-%m-%d %H:%M:%S]'
打开服务器端口:
firewall-cmd --zone=public --add-port=3478/tcp --permanent
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --reload
测试stun
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
remove掉默认的stun
stun:stun.l.google.com:19302
测试stun不需要账号密码,添加上stun:YOUR__IP:3478,然后点击Gather candidates
只要出现Done即为成功,下面提示的fail不用在意
测试turn
添加turn:YOUR__IP:3478,username/password填配置文件里的kurento/kurento
同样只要出现Done即为成功
用docker安装kurento
docker pull kurento/kurento-media-server:latest
运行
docker run -d --name kms -p:8888:8888/tcp kurento/kurento-media-server:latest
查看一下
docker ps -a
ede4f883c11d kurento/kurento-media-server:latest “/entrypoint.sh” 5 seconds ago Up 4 seconds (health: starting) 0.0.0.0:8888->8888/tcp
进入Docker
sudo docker exec -it 704d3ed68a49 bash
测试服务是否正常
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
正常启动会显示
退出容器
exit
该Kurento媒体服务器的端口(KMS)过程中默认监听8888客户端WebSocket连接
ws://YOUR_IP:8888/kurento
配置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=YOUR_IP
stunServerPort=3478
turnURL=kurento:kurento@YOUR_IP:3478?transport=udp
退出容器,重启kurento
exit
docker restart kms
测试
git clone https://gitee.com/psvmc/kurento-tutorial-java.git
cd kurento-tutorial-java/kurento-hello-world
vi src/main/resources/static/js/index.js
在函数function uiStart()里,增加一个叫iceservers的变量,格式如下:
let iceservers={
"iceServers":[
{
urls:"stun:YOUR_IP:3478"
},
{
urls:["turn:YOUR_IP:3478"],
username:"kurento",
credential: "kurento"
}
]
}
修改option:
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://your_ip:8888/kurento
启动完之后用浏览器打开demo页面https://your_ip:8443/
评论