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

    2.安装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的视频通讯服务搭建的更多相关文章

  1. 在Ubuntu上部署一个基于webrtc的多人视频聊天服务

    最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...

  2. 六、springboot 简单优雅是实现短信服务

    前言 上一篇讲了 springboot 集成邮件服务,接下来让我们一起学习下springboot项目中怎么使用短信服务吧. 项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到.所 ...

  3. webrtc笔记(3): 多人视频通讯常用架构Mesh/MCU/SFU

    问题:为什么要搞这么多架构? webrtc虽然是一项主要使用p2p的实时通讯技术,本应该是无中心化节点的,但是在一些大型多人通讯场景,如果都使用端对端直连,端上会遇到很带宽和性能的问题,所以就有了下图 ...

  4. 零配置Socket TCP消息通讯服务容器EC

    EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono.通过EC容器可以让开发人员在不了解Socket网络通讯知识和 ...

  5. 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本

    最近研究下java语言,根据一般使用的情况,写了个连接通讯服务的框架: 框架结构 C-Manager-S; 把所有通讯内容抽取成三个方法接口:GetData,SetData,带返还的Get; 所有数据 ...

  6. 开源jabber(XMPP)架设内部即时通讯服务的解决方案

    Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用.    XMPP(可扩展消息处理现场协议)是基于可扩展 ...

  7. live 555 freebsd 或centos 7.4 实现代理视频直播服务

    live 555   freebsd 或centos 7.4 实现代理视频直播服务 the live555 media server    在线直播服务器 关于此服务器 此服务是一个无安全的rtsp服 ...

  8. android 不同进程间的调用 AIDL 实现通讯服务

    android 不同进程间的调用  AIDL 实现通讯服务       近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好 ...

  9. Golang 在电商即时通讯服务建设中的实践

    马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech ​即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等 ...

随机推荐

  1. 优雅地使用命令行:Tmux 终端复用

    转自:http://harttle.com/2015/11/06/tmux-startup.html 你是否曾经开过一大堆的Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就 ...

  2. C++ primer plus读书笔记——第2章 开始学习C++

    第2章 开始学习C++ 1. endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用"\n"不提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示. ...

  3. slickgrid ( nsunleo-slickgrid ) 8 区域选择与复制粘贴

    区域选择 区域选择是通过插件CellRangeSelector实现的,默认不支持跨冻结列进行选择,修正了选择,支持跨冻结列,代码如下,通过判断选择的起点和终点所落在的冻结范围进行计算,如从左往右进行复 ...

  4. .Net core Worker Service 扩展库

    .Net core Worker Service 扩展库,目的为更易控制每一个worker 的运行. 提供根据配置文件对每一个Worker的停止.启动和自动解析注册Worker. 获取配置的方式不限于 ...

  5. Linux 如何查看系统负载

    Linux 如何查看系统负载 310 博客 /  Linux/ 4个月前/  534 /  0   操作系统的负载状态,反映了应用程序的资源使用情况,从中能找出应用程序优化的瓶颈所在. 系统平均负载, ...

  6. 用urllib库几行代码实现最简单爬虫

    """ 使用urllib.request()请求一个网页内容,并且把内容打印出来. """ from urllib import reque ...

  7. Lua中的异常处理pcall、xpcall、debug使用实例

    如果需要在Lua中处理错误,必须使用函数pcall(protected call)来包装需要执行的代码. pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误.无错误:返回值true或 ...

  8. Java 将Excel转为SVG的方法

    本文以Java示例展示如何将Excel文档转为SVG格式.通过本文中的方法,在将Excel转为SVG时,如果sheet工作表中手动设置了分页,则将每个分页的内容单独保存为一个svg文件,如果sheet ...

  9. java为什么是一次编译,多次解释

    在编程语言中分为编译型语言.解释型语言,而我们的java语言既是编译型的也是解释型的,因为比如c语言是编译型的,因为我们将c语言的源代码编译过后就形成了.exe文件,这样windows系统就可以直接运 ...

  10. setTimeout使用问题

    通常禁止使用setTimeout的情况: 1.不能用于模拟异步,有的人不熟悉异步流程,而使用setTimeout伪实现,比如设置一个 setTimeout 来等待函数执行完毕,正确做法是使用回调来处理 ...