springboot+kurento+coturn+contos的视频通讯服务搭建
springboot+kurento+coturn+contos的视频通讯服务搭建
服务器
CentOS Linux release 7.9.2009 (Core)
本案例成功于20210628
-
1.默认服务器已经有Docker,安装kurento
##下载kurento镜像
[root@wjsmc wjsmc]# docker pull kurento/kurento-media-server:latest
##将端口暴露在公网3000端口
[root@wjsmc wjsmc]# docker run -itd --name ksm -p 3000:8888 kurento/kurento-media-server /bin/bash
##测试
[root@wjsmc wjsmc]# curl \
> --include \
> --header "Connection: Upgrade" \
> --header "Upgrade: websocket" \
> --header "Host: 127.0.0.1:3000" \
> --header "Origin: 127.0.0.1" \
> http://127.0.0.1:3000/kurento
##成功则出现以下字段
HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.02.安装coturn
[root@wjsmc wjsmc]# yum install coturn
[root@wjsmc etc]# yum -y install openssl-devel libevent-devel libevent
[root@wjsmc etc]# openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
##信息随便写
[root@wjsmc coturn]# vim /etc/coturn/turnserver.conf
listening-port=3478
listening-ip=私网ip
external-ip=公网ip
realm=公网地址
user=用户名:密码
[root@wjsmc coturn]# turnserver -r 公网地址:3478 -a -o -c turnserver.conf
[root@wjsmc coturn]# ps -ef|grep turnserver
[root@wjsmc coturn]# kill -9 xxxx
3.验证turn
验证地址STUN or TURN URI,TURN username,TURN password分别填写
turn:你的公网地址:3478
turnserver.conf 设置的用户名
turnserver.conf 设置的密码
出现relay说明成功
4.设置kurento的coturn地址
[root@wjsmc coturn]# docker exec -it ksm bash
root@539bb198252c:/# apt-get update
root@539bb198252c:/# apt-get install vim
root@539bb198252c:/# vim /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
turnURL=用户名:密码@ip:3478?transport=udp
root@539bb198252c:/# exit
[root@wjsmc coturn]# docker restart ksm
3.下载官方实例,这里需要maven,未安装的需要的移步安装后回来继续。
[root@wjsmc coturn]# yum install git
[root@wjsmc kurento]# git clone https://github.com.cnpmjs.org/Kurento/kurento-tutorial-java.git
[root@wjsmc kurento]# cd kurento-tutorial-java/kurento-one2one-call
[root@wjsmc kurento-one2one-call]# vim ./src/main/resources/static/js/index.js
##将以下内容添加,修改进incomingCall(message),call(),两函数中
var iceservers = {
"iceServers": [
{
urls: ["turn:公网ip:3478"],
username: "xxxxx",
credential: "xxxx"
}
]
};
var options = {
localVideo : videoInput,
remoteVideo : videoOutput,
onicecandidate : onIceCandidate,
onerror : onError,
configuration: iceservers
}
##执行项目
[root@wjsmc kurento-one2one-call]# mvn -U clean spring-boot:run -Dspring-boot.run.jvmArguments="-Dkms.url=ws://公网ip:3000/kurento"
成功!!
踩了不少坑,连续研究了一晚上,第二天一早爬起来,终于完成。
springboot+kurento+coturn+contos的视频通讯服务搭建的更多相关文章
- 在Ubuntu上部署一个基于webrtc的多人视频聊天服务
最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...
- 六、springboot 简单优雅是实现短信服务
前言 上一篇讲了 springboot 集成邮件服务,接下来让我们一起学习下springboot项目中怎么使用短信服务吧. 项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到.所 ...
- webrtc笔记(3): 多人视频通讯常用架构Mesh/MCU/SFU
问题:为什么要搞这么多架构? webrtc虽然是一项主要使用p2p的实时通讯技术,本应该是无中心化节点的,但是在一些大型多人通讯场景,如果都使用端对端直连,端上会遇到很带宽和性能的问题,所以就有了下图 ...
- 零配置Socket TCP消息通讯服务容器EC
EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono.通过EC容器可以让开发人员在不了解Socket网络通讯知识和 ...
- 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本
最近研究下java语言,根据一般使用的情况,写了个连接通讯服务的框架: 框架结构 C-Manager-S; 把所有通讯内容抽取成三个方法接口:GetData,SetData,带返还的Get; 所有数据 ...
- 开源jabber(XMPP)架设内部即时通讯服务的解决方案
Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用. XMPP(可扩展消息处理现场协议)是基于可扩展 ...
- live 555 freebsd 或centos 7.4 实现代理视频直播服务
live 555 freebsd 或centos 7.4 实现代理视频直播服务 the live555 media server 在线直播服务器 关于此服务器 此服务是一个无安全的rtsp服 ...
- android 不同进程间的调用 AIDL 实现通讯服务
android 不同进程间的调用 AIDL 实现通讯服务 近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好 ...
- Golang 在电商即时通讯服务建设中的实践
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等 ...
随机推荐
- 【Matlab】BASK的调试与解调仿真
索引 一.BASK的调制 1.1 曼彻斯特码 1.2 增益控制 1.3 常量求和 1.4 与载波相乘 1.5 波形预览 1.6 参数设置(参考) 二.BASK的解调 2.1 滤波 2.2 信号比较 2 ...
- MindSpore模型验证
技术背景 在前面一篇博客中,我们介绍了MindSpore在机器学习过程中保存和加载模型的方法.这种将模型存储为静态文件的做法,使得我们可以更灵活的使用训练出来的模型,比如用于各种数据集的验证,或者是迁 ...
- oracle 碎片管理和数据文件resize释放表空间和磁盘空间(以及sys.wri$_optstat_histgrm_history过大处理)
随着互联网的快速发展,各行各业的数据量也是与日俱增,而数据库的数据量也是直线增长,但是,如果表DML太多,则可能会在高水位线以下出现太多空白. 因此,只能将数据文件缩小到高水位线,因为高水位线以下有一 ...
- Django(34)Django操作session(超详细)
前言 session: session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个概念.一个服务器存储授权信息的解 ...
- [bug] Springboot JPA使用Sort排序时的问题
参考 https://blog.csdn.net/qq_44039966/article/details/102713779
- openstack创建vlan网络并配置网络设备
1.在管理员-->网络-->创建网络. 2.填写网络信息,这里要划分新的VLAN,注意在物理网络中填写的事VLAN,段ID指的是vlan的id 3.创建的网络. 4.创建子网,在里面修改子 ...
- 如何解决在WordPress安装Redis插件时需要输入FTP问题?
用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...
- http协议工作原理及工作流程
什么是url ? url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html http : 超文本传输协议 https: 安全套接字协议 HTT ...
- Linux进阶之RAID磁盘阵列、系统启动及dd命令
本节内容 1. 磁盘阵列 RAID0: 条带卷 2+ 100% 读写速度快,不容错 RAID1: 镜像卷 2 50% 读写速度慢,容错 RAID5: 奇偶校验条带卷 3 读写速度快,容错 ...
- strcpy和memcpy的区别-(转自stone Jin)
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...