Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

ops/2024/12/29 3:33:47/

前言

本人计划开发一套具备文本、语音、视频通话功能的IM demo,同时具备多人在线会议功能,按习惯大概会开源版定义名称为Duihao jo-im,本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话,因此需要搭建用于WebRTC的ICE中继服务器,我们选择coturn进行搭建。

在 WebRTC 网络传输模块中,当遇到 NAT 之间无法打通的情况下,会使用 TURN 协议通过中转的方式实现端与端之间的通信。Coturn 就是一种开源的 STUN/TURN 服务器,它可以让你轻松地搭建一个能够在 NAT 防火墙和代理服务器背后运行的实时通信系统。Coturn 支持各种协议和技术,包括 STUN(Session Traversal Utilities for NAT)、TURN(Traversal Using Relays around NAT)和 ICE(Interactive Connectivity Establishment)。Coturn 可以用于向 WebRTC 应用程序提供 TURN 服务器,这些应用程序需要在 P2P 通信中转储流量。本文主要介绍 Coturn 在 Linux系统下部署的步骤。

服务器环境

服务器:阿里ECS

操作系统:Alibaba Cloud linux

控制面板:BT宝塔

安装&启动coturn

因为coturn使用到了UDP,所以要把coturn监听的UDP和TCP相关端口在安全组中打开,这个一般在云资源控制台的服务器安全组配置中。我们这次使用的是3478端口。

安装依赖

下载libevent2发行包,通过宝塔面板直接上传到服务器,并解压。因为阿里云国内服务器的国际资源访问限制,建议您通过浏览器下载后直接上传、解压。

Release release-2.1.12-stable · libevent/libevent · GitHub[这里是图片001]https://github.com/libevent/libevent/releases/tag/release-2.1.12-stable 您也可以使用命令进行下载(阿里云国内服务器可能会报错):

wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz

使用命令解压:

tar -zxvf libevent-2.1.12-stable.tar.gz

解压后,进入libevent2目录,执行编译安装:

cd libevent-2.1.12-stable./configure && make && make install

安装过程如下:

下载coturn代码

方法1:使用git命令下载(需要服务器中已安装git):

# 国内仓库(推荐使用)
git clone https://gitee.com/whatitis/coturn# 原仓库(速度会慢一些)
git clone https://github.com/coturn/coturn

方法2:使用wget命令下载,然后执行解压:

wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz# 解压
tar -zxvf 4.5.1.1.tar.gz

执行coturn编译安装

cd coturn
./configure --prefix=/usr/local/coturn
make && make install

配置 Coturn

切换到 coturn 的 etc 目录,拷贝一份 turnserver.conf.default 再进行修改。宝塔面板可以直接进入/usr/local/coturn/etc这个目录去复制,并修改文件。
1、进入目录

cd /usr/local/coturn/etc

2、复制文件

cp ./turnserver.conf.default ./turnserver.conf

3、修改配置项

vi ./turnserver.conf

vi命令注释:终端编辑文件时先输入i进入编辑模式,编辑好后,按esc退出编辑模式,输入:wq保存文件

4、配置说明

修改 turnserver.conf 文件配置内容,realm 需要指定 IP 或域名,否则无法在 WebRTC 本地库中使用,虽然使用 trickle-ice 可以正常访问,但是在 WebRTC本地库中是没法正常使用的。将下方的代码直接复制到turnserver.conf文件最后,保存。

# 指定侦听的端口。
listening-port=3478
# 云主机内网 IP 地址,如果没有内网IP就直接用公网IP。
listening-ip=xxx.xxx.xxx.xxx
# 云主机的公网 IP 地址。
external-ip=xxx.xxx.xxx.xxx
# 这个很重要,如果没有配置这个就服务使用中转服务。云主机的公网 IP 地址或域名。
realm=xxx.xxx.xxx.xxx
# 访问 STUN/TURN 服务的用户名和密码。
user=admin:123456

服务器端口开启

在阿里云ecs服务器安全组中进行开启,需要到控制中的安全策略组或者防火墙中允许3478、49152-65535端口 UDP/TCP 通行(出、入),然后在宝塔面板安全中再进行开启。

阿里云ECS安全规则如下:

宝塔面板安全规则:

启动Coturn

设置系统环境变量,直接打开/etc/profile文件,在文件末尾加上以下内容

export PATH=$PATH:/usr/local/coturn/bin

执行以下命令,让系统环境变量生效

 source /etc/profile

通过配置文件执行启动命令

turnserver -c /usr/local/coturn/etc/turnserver.conf

启动命令运行结果

检测coturn工作状态

使用这个网址可以检测ICE服务器的工作状态,出现 relay 说明配置成功。https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/[这里是图片006]https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Fwebrtc.github.io%2Fsamples%2Fsrc%2Fcontent%2Fpeerconnection%2Ftrickle-ice%2F&source=article&objectId=2037764
测试的时候,STUN or TURN URI 需要加入协议头和端口号,点击 Add Server 按钮,然后再点击Gather candidates 按钮。

如:turn:143.163.245.191:3478

将 Coturn 设置为系统服务

把 Coturn 设置成系统服务,便于开机自动启动,就不用手动启动了。
执行以下命令:

touch /usr/lib/systemd/system/coturn.service

命令编辑或直接宝塔面板找到刚刚生成的服务文件,编辑:

vi /usr/lib/systemd/system/coturn.service

编辑coturn.service 文件内容如下:

[Unit]
Description=Coturn Server
After=network.target[Install]
WantedBy=multi-user.target[Service]
User=root
Group=root
ExecStart=/usr/local/coturn/bin/turnserver -c /usr/local/coturn/etc/turnserver.conf
LimitNOFILE = 5000

将 coturn 设置开机启动:

systemctl enable coturn

启动 coturn 服务:

systemctl start coturn

重启coturn 服务:

systemctl restart coturn

停止coturn 服务:

systemctl stop coturn

结束语

本文仅对IM中语音视频通话所需要的WebRTC支持组件进行安装,要想开发具备语音、视频通话的IM,还有大量工作需要做,后续Jo-im系列文章将会持续更新,敬请关注。


http://www.ppmy.cn/ops/145815.html

相关文章

基于特征工程(pca分析)、小波去噪以及数据增强,同时采用基于注意力机制的BiLSTM、随机森林、ARIMA模型进行序列数据预测

本文采用特征工程(pca分析)、小波去噪以及数据增强,同时采用基于注意力机制的BiLSTM、随机森林、ARIMA模型进行序列数据预测 基于BILSTM(双向长短期记忆网络)、随机森林回归和ARIMA(自回归积分滑动平均&am…

对外发PDF设置打开次数

在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…

c++编译过程初识

编译过程 预处理:主要是执行一些预处理指令,主要是#开头的代码,如#include 的头文件、#define 定义的宏常量、#ifdef #ifndef #endif等条件编译的代码,具体包括查找头文件、进行宏替换、根据条件编译等操作。 g -E example.cpp -…

leetcode hot 100 二叉搜索

35. 搜索插入位置 已解答 简单 相关标签 相关企业 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solut…

linux——vi命令常用操作

一、vi模式 vi一般分为三种模式,分别是命令行模式、插入模式、末行模式 1.命令模式:控制屏幕光标的移动,按 :进入末行模式,按 i(其他插入命令也可) 进入插入模式; 2.插入模式&…

node-js Express防盗链

什么是防盗连 一个简单的说明,假如在前端img标签想要引用图片网站上的图片,当你将图片地址放到img标签上想要显示的时候你发现,图片显示不了,这说明网站采用了防盗链。 怎么实现的呢 在请求头中一般会有 Referer,它…

Oracle 备份与恢复 (Docker部署版)

Oracle 备份与恢复 (Docker部署版) 一,宿主机设置定时备份脚本 1.检查Oracle容器是否正常运行 docker ps2.进入容器,创建shell脚本 #oracle11g 是容器名 docker exec -it oracle11g bash #创建数据库dump的目录 mkdir -p /hom…

leetcode热题100(189. 轮转数组)

链接:189. 轮转数组 - 力扣(LeetCode) 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2…