利用Kurento实现一对一通信

利用Kurento实现一对一通信

前言

自己的计划是,毕业设计做一个类似于腾讯会议的视频流通信服务,发现想要实现起来并不容易,不过自己也还是慢慢的在摸索,最后找到了一个叫做Kurento的视频流服务器,打算使用这个服务器去开发程序。

配置与实现

想要配置这个东西可是非常非常的坑啊,本来自己是去官网找到了一些可以直接运行的例子,然后在本地直接start,完全没有问题,然后拿到虚拟机试一试:

当然,kurento肯定是利用docker安装的,这个dockerhub也有,这里先列出来:

1
sudo docker run -d --name kms -p 8888:8888 kurento/kurento-media-server:xenial-latest

发现仍然可以使用,最后拿去阿里云服务器试了试,结果就……,完全没有作用,安全组什么的都开了,我之后就觉得会不会是公网ip之类的问题,但是不知道怎么下手,之后再Stack Overflow中,看到了创建者的发言,在公网中必须有turn服务器,于是乎,我便开始了配置turn服务器之路。

由于在dockerhub没有turn服务器的镜像源,turn服务器安装这块坑就大了,网上有很多的教程,非常之乱,又要什么内网ip,什么什么md5验证,什么什么必须要在Ubuntu下运行,看的我真的是一脸懵逼,怎么可能这么复杂而且又有这么多说法呢??

我基本都试了一次,嗯,如同预期一般,非常的不靠谱。

但最后还是找到了解决方案,在github找到了可以直接使用的dockerfile:

1
https://github.com/konoui/kurento-coturn-docker.git

然后去运行它:

1
2
3
4
5
6
cd /kurento-coturn-docker/coturn/
//使用dockerfile,记住加点
sudo docker build --tag coturn .
//后台运行coturn
sudo docker run -p 3478:3478 -p 3478:3478/udp coturn
//别忘了开完全组

然后是网上博客都有讲到的有效性测试,这个大家自己看吧。

然后需要编辑Kurento:

1
2
3
4
5
6
7
8
9
#进入镜像
docker exec -it kms /bin/bash
#安装vim
apt-get update
apt-get install vim
#进入配置文件夹
cd /etc/kurento/modules/kurento/
#编辑配置文件
vim WebRtcEndpoint.conf.ini

配置打洞服务器,配置文件应该改成这样的:

1
2
3
stunServerAddress=you_url
stunServerPort=you_port
turnURL=kurento:kurento@you_url?transport=tcp

一般情况下,坑到这里应该也就完了,但是你可以在试试,还是跑不通!!!!

这又是为什么呢????

最后我想了想,为什么本地配置就完全没问题呢?就算连接公网需要turn,但是代码层面却没有任何提示啊,这不应该,所以,接下来就是最坑的了,你甚至需要去打开源代码,修改并连接turn服务器!!!!

我敢说,绝大多数人都会和我一样,觉得这不应该,你特么本地的代码例子完全就是摆着看的嘛。

做法如下:

打开index.js

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

1
2
3
4
5
6
7
8
9
10
11
12
var iceservers={
"iceServers":[
{
urls:"stun:139.198.123.138:3478"
},
{
urls:["turn:139.198.123.138:3478"]
username:"kurento",
credential: "kurento"
}
]
}

再修改底下的options变量:

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

暂时不写了。。。头痛