Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建
创始人
2024-09-25 09:19:38
0

前言

        本人计划开发一套具备文本、语音、视频通话功能的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 · GitHubicon-default.png?t=N7T8https://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/icon-default.png?t=N7T8https://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系列文章将会持续更新,敬请关注。

相关内容

热门资讯

读书郎安装安卓系统,畅享智能学... 你有没有想过,你的读书郎平板电脑,是不是也能像智能手机一样,装上安卓系统,畅游在应用的世界里呢?今天...
最简单刷安卓10系统,安卓10... 你有没有想过,升级安卓系统竟然可以变得如此简单?没错,就是那种不用翻山越岭,不用头疼脑热,只需轻轻一...
安卓系统桌面路径6,解锁个性化... 你有没有想过,你的安卓手机里那些乱糟糟的文件和图标,其实背后隐藏着一条条神秘的路径呢?今天,就让我带...
85度c学院安卓系统,打造个性... 你有没有听说过那个85度C学院?没错,就是那个以咖啡和甜点闻名的85度C,竟然还开设了自己的学院!而...
安卓什么操作系统流畅,揭秘新一... 你有没有想过,为什么有些安卓手机用起来就是那么顺滑,而有些却像蜗牛一样慢吞吞的呢?这背后其实大有学问...
安卓数据移至鸿蒙系统,体验跨平... 你知道吗?现在科技界可是掀起了一股大潮,那就是安卓数据移至鸿蒙系统。这可不是什么小打小闹,而是两大操...
谷歌安卓系统能升级,探索谷歌带... 你知道吗?手机界的巨头谷歌安卓系统最近可是又搞了个大动作,那就是——升级!没错,就是那个陪伴我们日常...
安卓系统怎么评论表情包,轻松打... 你有没有发现,现在聊天的时候,表情包简直成了沟通的利器?不管是开心、难过还是调侃,一个表情包就能瞬间...
安卓和win系统双系统咋做,安... 你有没有想过,一台电脑同时运行安卓和Windows系统,那得多酷啊!想象一边玩着安卓手机上的游戏,一...
安卓系统如何下载ios系统游戏... 你有没有想过,为什么你的安卓手机里没有那些让人眼花缭乱的iOS系统游戏呢?别急,今天就来给你揭秘安卓...
英菲克3368安卓系统,功能与... 你有没有听说过英菲克3368安卓系统?这可是最近在智能设备圈子里火得一塌糊涂的存在呢!今天,就让我带...
各安卓系统大小区别,一窥究竟 你有没有发现,手机里的安卓系统就像是个大家庭,每个成员都有自己的特色和风格?今天,就让我带你来一场安...
安卓系统自带解压缩,便捷操作与... 你有没有遇到过这种情况:下载了一个文件,打开一看,竟然是个压缩包!别急,别慌,今天就来给你详细介绍一...
安卓11系统更流畅么,性能升级... 你有没有发现,最近你的安卓手机好像变得特别顺滑,操作起来像是在云朵上飘?没错,这就是安卓11系统带来...
安卓系统恢复电量,揭秘高效充电... 手机电量告急,是不是你也和我一样,正为安卓系统的电量恢复问题而烦恼呢?别急,今天就来给你支几招,让你...
神秘代码让安卓系统崩溃,揭秘技... 你知道吗?最近在安卓系统圈子里掀起了一股不小的风波,那就是一个神秘代码让安卓系统崩溃的事件。这可不是...
安卓5.1.1系统微信,探索安... 你知道吗?在安卓5.1.1系统上,微信可是如鱼得水,各种功能都能玩转得风生水起。今天,就让我带你一起...
小米手机安卓系统占网速,深度解... 你有没有发现,用小米手机上网的时候,有时候感觉网速好像有点不给力呢?这不,今天就来聊聊这个话题,看看...
winds板怎样装安卓系统,安... 你有没有想过,那些酷炫的Winds板,竟然也能装上安卓系统?没错,就是那个我们日常使用的智能手机系统...
大众安卓系统安装教程,大众安卓... 你终于决定给新手机装上安卓系统啦!这可是个明智的选择,安卓系统以其强大的兼容性和丰富的应用生态圈,赢...