WebRTC-SFU服务器-Janus部署【保姆级部署教程】

时间:2024-10-12 15:06:39

一、SFU

WebRTC SFU(Selective Forwarding Unit)构架是一种通过服务器来路由和转发WebRTC客户端音视频数据流的方法。这种构架的核心特点是将服务器模拟成一个WebRTC的Peer客户端,从而实现了音视频流的直接转发。

在SFU构架中,服务器作为中心节点,但并不负责音视频流的混合处理,而是直接将其从一个客户端转发到其他客户端。这种构架的优点在于,由于数据包是直接转发,不需要进行编码、解码等复杂处理,因此对CPU、内存等机器资源的消耗较小。同时,直接转发音视频流也大大降低了延迟,提高了实时性。

SFU构架的另一个特点是具有灵活性,能够更好地适应不同的网络状况和终端类型。此外,由于服务器只负责转发,不做太重的处理,所以服务器的压力会相对较低,配置要求也不高。

在WebRTC中,SFU构架与MCU(MultiPoint Control Unit)和Mesh构架有所不同。MCU是一种传统的中心化构架,负责所有的视频编码、转码、解码、混合等复杂逻辑,每个客户端只需与MCU服务器建立连接即可。而Mesh构架则是每个客户端都与其他客户端建立连接,形成网状结构。相比之下,SFU构架更加轻量级,适合在大规模场合中使用,具有更好的伸缩性。

这里我直接怼一个Mesh、MCU、SFU的构架图,不同构架优缺点不多言。

在这里插入图片描述

二、Ubuntu安装Janus

Janus官方文档:/

Janus github:/meetecho/janus-gateway

2.1安装依赖

  • GLib
sudo apt-get update
sudo apt-get install libglib2.0-dev
pkg-config --modversion glib-2.0 //查看版本
  • 1
  • 2
  • 3
  • zlib
sudo apt install zlib1g zlib1g-dev
dpkg -l | grep zlib
  • 1
  • 2
  • pkg-config
sudo apt install pkg-config
pkg-config --version
  • 1
  • 2
  • Jansson
Jansson库可能并未直接包含在Ubuntu的软件库中,因此你可能需要从源代码编译安装。以下是从源代码编译安装的步骤: 
a. 下载Jansson源码:
git clone /akheron/jansson
 b. 安装依赖:
在编译Jansson之前,你可能需要安装一些依赖库。你可以尝试以下命令(这些依赖可能会随着Jansson的版本而变化):
sudo apt install autoconf libtool
c. 编译和安装Jansson:
进入下载的Jansson源码目录,并运行以下命令进行编译和安装:
cd jansson  
autoreconf -i  # 反解析文件,生成编译工具  
./configure  
make  
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • libconfig
a.下载源码文件
b.解压
tar -zxvf 
c.配置编译选项
如果你需要更改默认的编译选项或安装位置,可以使用./configure脚本进行配置。例如,如果你想将libconfig安装到/usr/local目录(这是默认位置),可以运行:
cd 
./configure --prefix=/usr/local
如果你不需要更改任何配置,可以直接运行./configure。
d.编译安装
make
make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • libnice (建议至少使用v0.1.16,推荐使用v0.1.18)
libnice 是一个用于实现 ICE(交互式连接建立)协议的库,它是 Janus 的一个重要依赖项。以下是在 Ubuntu 上安装 libnice 的步骤:
1. 安装依赖项
首先,你需要安装一些依赖项:
sudo apt update
sudo apt install python3-pip meson ninja //ninja需要单独安装
2. 下载和编译 libnice
从 GitLab 上克隆 libnice 代码库:
  git clone /libnice/
  cd libnice
编译 libnice:
  meson --prefix=/usr build
  ninja -C build
  sudo ninja -C build install
3. 验证安装**
运行以下命令检查 libnice 是否已成功安装:
  pkg-config --cflags --libs nice
如果你看到 libnice 的编译选项和链接库,则安装成功。
**注意:**
* 以上步骤适用于 Ubuntu 18.04 及更高版本。
* 如果你使用的是其他版本的 Ubuntu,可能需要调整一些步骤。
* 请确保你拥有足够的权限来执行这些命令。
git clone /libnice/libnice
cd libnice
meson --prefix=/usr build && ninja -C build && sudo ninja -C build install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • ninja
sudo apt update
sudo apt install ninja-build
  • 1
  • 2
  • OpenSSL (至少v1.0.1e)
apt install openssl
openssl version
  • 1
  • 2
  • libsrtp (建议至少)
wget /cisco/libsrtp/archive/v2.2.
tar xfv v2.2.
cd libsrtp-2.2.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
pkg-config --modversion libsrtp2 //查看版本
Janus配置脚本自动检测您安装了哪个库,并自动链接到正确的库,如果两者都安装了则选择。如果您希望选择1.5或1.6(不推荐),请在配置Janus时传递——disable-libsrtp2以强制它使用旧版本。
如果你手动编译安装了 libsrtp,则需要在编译 Janus 时使用 --with-libsrtp 选项指定 libsrtp 的安装路径。
例如,如果你将 libsrtp 安装到 /usr/local 目录,则编译 Janus 时可以使用以下命令:
./configure --with-libsrtp2=/usr/ --enable-srtp
make
sudo make install
这里不指定,在后面Janus安装时./configure --prefix=/opt/janus可以看到已经选择了

卸载libsrtp2
sudo apt remove libsrtp2-dev  # 如果你安装了开发包  
sudo apt remove libsrtp2-x    # 如果你安装了特定的x版本(如果存在的话)  
sudo apt autoremove          # 移除不再需要的依赖包
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.2安装Janus

git clone /meetecho/
cd janus-gateway
sh 
./configure --prefix=/opt/janus
make
make install
make configs
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 启动
/opt/janus
<installdir>/etc/janus/
或者执行启动命令
<installdir>/bin/janus --help
<installdir>/bin/janus
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这将启动服务器,并让它查看配置文件。

确保查看了所有配置文件,以便根据您的特定需求定制Janus:每个配置文件都有文档记录,因此根据您的需求进行更改应该不难。repo附带了一些默认值(假设您在安装服务器后进行配置),这些默认值对于一般部署来说是有意义的,并且还包括所有插件的一些示例配置(例如,要侦听的web服务器,要创建的会议室,启动时可用的流挂载点等)。

为了测试它是否正常工作,您可以使用html文件夹中随这个包提供的演示:这些演示与项目网站上的在线演示完全相同。只需复制它所包含的文件在一个web服务器,或使用一个用户空间的web服务器服务的文件在html文件夹(例如,php或python),并在Chrome或Firefox打开页面。将提供利用不同插件的演示页面列表。如果您更改了任何与传输相关的默认配置,请记住在演示JavaScript文件中编辑传输/端口详细信息。此外,演示引用了预先配置的插件资源,因此如果您添加了一些新资源(例如,一个新的视频会议),您可能需要调整演示页面才能实际使用它们。

2.3启动报错

[FATAL] [:main:5900] No Janus API transport is available… enable at least one and restart Janus

  • usrsctp (只有当您对数据通道感兴趣时才需要)
  • libmicrohttpd (如果你对Janus API的支持感兴趣,至少需要v0.9.59)
下载源代码:
你可以从GNU的官方网站下载libmicrohttpd的源代码。打开你的终端,然后使用wget命令或者浏览器下载源代码。例如,你可以下载0.9.59版本(请检查是否有更新的版本):
wget /gnu/libmicrohttpd/libmicrohttpd-0.9.
或者直接使用浏览器访问/software/libmicrohttpd/并下载对应版本。
解压源代码:
在下载完成后,使用tar命令解压源代码包:
tar -xzvf libmicrohttpd-0.9.
这将在当前目录下创建一个名为libmicrohttpd-0.9.59的目录,其中包含源代码。
编译和安装:
进入解压后的源代码目录:
cd libmicrohttpd-0.9.59
接下来,你需要配置编译选项。通常,使用./configure脚本来完成这一步。这个脚本会检查你的系统并确定如何编译libmicrohttpd。在大多数情况下,你可以直接运行它:
./configure
如果./configure成功运行,你可以使用make命令来编译源代码:
make
最后,使用make install命令来安装libmicrohttpd:
sudo make install
这将在你的系统上安装libmicrohttpd库和相关的头文件。
验证安装:
安装完成后,你可以通过运行一个简单的程序或者使用pkg-config来验证libmicrohttpd是否成功安装。例如,你可以使用以下命令来检查libmicrohttpd的版本:
pkg-config --modversion libmicrohttpd
如果命令返回了版本号,那么说明libmicrohttpd已经成功安装。

Loading transport plugin 'libjanus_http.so'...
[ERR] [:main:5830]       Couldn't load transport plugin 'libjanus_http.so': .12: cannot open shared object file: No such file or directory
sudo apt-get update  
sudo apt-get install libmicrohttpd-dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • libwebsockets (如果您对websocket支持Janus API感兴趣,需要至少)
首先,你需要安装一些必要的依赖项,如cmake、openssl和libssl-dev。可以使用apt-get命令来安装它们:
sudo apt-get update  
sudo apt-get install cmake  
sudo apt-get install openssl  
sudo apt-get install libssl-dev
注意:libssl-dev是openssl的开发库,对于编译libwebsockets是必要的。
下载libwebsockets源代码:
你可以从libwebsockets的官方GitHub仓库下载源代码。使用git命令来克隆仓库:
git clone /warmcat/
这将在你的当前目录下创建一个名为"libwebsockets"的目录,其中包含源代码。
编译安装libwebsockets:
进入libwebsockets的源代码目录:
cd libwebsockets
如果你使用的是CMake作为构建系统,可以创建一个构建目录并在其中运行CMake来生成Makefile:
mkdir build  
cd build  
cmake ..
注意:CMake可能会检测你的系统和已安装的依赖项,并相应地配置构建过程。
一旦Makefile被生成,你可以使用make命令来编译libwebsockets:
make
最后,使用make install命令来安装libwebsockets:
sudo make install
这将在你的系统上安装libwebsockets库和相关的头文件。
测试安装:
安装完成后,你可以运行libwebsockets的测试套件来验证安装是否成功。这通常可以在libwebsockets的源代码目录中的"test"或"examples"目录中找到。

官网步骤:
git clone /repo/libwebsockets
cd libwebsockets
# If you want the stable version of libwebsockets, uncomment the next line
# git checkout v4.3-stable
mkdir build
cd build
# See /meetecho/janus-gateway/issues/732 re: LWS_MAX_SMP
# See /meetecho/janus-gateway/issues/2476 re: LWS_WITHOUT_EXTENSIONS
cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • cmake (只有当你对WebSockets和/或BoringSSL支持感兴趣时才需要)
  • rabbitmq-c (只有当你对RabbitMQ对Janus API或事件的支持感兴趣时才需要)
  • (只有当您对Janus API或事件的MQTT支持感兴趣时才需要)
  • nanomsg (只有当您对Janus API的Nanomsg支持感兴趣时才需要)
  • libcurl (只有当您对TURN REST API支持感兴趣时才需要)

如果你已经安装了以上的库,但不感兴趣,例如,在数据通道、WebSockets、MQTT和/或RabbitMQ中,你可以在配置时禁用它们:

./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt
启用 --enable-websockets
  • 1
  • 2

三、Demo测试准备

3.1安装Nginx

更新软件包列表:
首先,确保你的软件包列表是最新的。打开终端并输入以下命令:
sudo apt-get update
安装Nginx:
使用apt-get命令来安装Nginx。在终端中输入以下命令:
sudo apt-get install nginx
系统会提示你确认安装。按Y键并回车以继续。
3. 验证Nginx安装:
安装完成后,你可以通过运行以下命令来验证Nginx是否正在运行:
sudo systemctl status nginx
如果Nginx正在运行,你应该会看到类似“active (running)”的状态信息。
4. 访问Nginx默认页面:
在浏览器中打开http://localhost/,你应该能看到Nginx的默认欢迎页面。
5. 配置Nginx:
Nginx的配置文件通常位于/etc/nginx/目录下。主要的配置文件是,但你也可能会在该目录下找到其他与站点相关的配置文件。你可以使用文本编辑器(如nano、vim或gedit)来编辑这些文件。
例如,使用nano编辑文件:
sudo nano /etc/nginx/
进行必要的更改后,保存并关闭文件。然后,你需要重新加载或重启Nginx以使更改生效。
6. 重新加载或重启Nginx:
重新加载Nginx不会中断正在进行的连接,而重启Nginx会。你可以根据需要选择适当的命令。
重新加载Nginx:
sudo nginx -s reload
重启Nginx:
sudo systemctl restart nginx
卸载Nginx(如果需要):
如果你决定卸载Nginx,可以使用以下命令:
sudo apt-get remove nginx
请注意,这只会删除Nginx软件包,而不会删除配置文件、日志文件或站点文件。如果你还想删除这些文件,可以使用purge选项:
sudo apt-get purge nginx
然后,你可以手动删除/etc/nginx/、/var/log/nginx/和/var/www/html/等目录(如果你不再需要它们)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

3.2生成SSL证书

mkdir -p ~/cert
cd ~/cert
# CA私钥
openssl genrsa -out  2048
 自签名证书
openssl req -new -x509 -key  -out  -days 1095
生成 CA 私钥:
openssl genrsa -out  2048:
openssl:这是一个工具集,用于处理 SSL/TLS 协议相关的任务。
genrsa:这是 OpenSSL 的一个子命令,用于生成 RSA 私钥。
-out :这个选项指定输出文件的名称和路径,这里将私钥保存在  文件中。
2048:这是私钥的长度,通常使用 2048 位或更高的长度来确保安全性。
生成自签名证书:
openssl req -new -x509 -key  -out  -days 1095:
req:这是 OpenSSL 的一个子命令,用于处理 X.509 证书签名请求(CSR)和相关的操作。
-new:这个选项指示 OpenSSL 生成一个新的证书签名请求。但由于我们在这里是自签名证书,所以这个选项实际上也用于生成新的证书。
-x509:这个选项指示 OpenSSL 使用提供的私钥(在这种情况下是我们之前生成的 )自签名证书。
-key :这个选项指定用于签名的私钥文件的路径。
-out :这个选项指定输出文件的名称和路径,这里将自签名证书保存在  文件中。
-days 1095:这个选项指定证书的有效期,这里设置为 1095 天(即 3 年)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3.3Nginx配置

配置文件默认在 /etc/nginx/
2.指向janus所在目录/opt/janus/share/janus/html/demos
目录下创建server_ssl.conf
# HTTPS server
#
server {
    listen       443 ssl;
    server_name  localhost;
    # 配置相应的key
    ssl_certificate      /root/cert/;
    ssl_certificate_key  /root/cert/;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    # 指向janus demo所在目录
    location / {
    root   /opt/janus/share/janus/html/demos;
    index   ;
    }
}
4.修改
http {  
    # ... 其他配置 ...  
  
    include /etc/nginx//server_ssl.conf; # 包含你的HTTPS server配置  
  
    # ... 其他配置 ...  
}
5.重启Nginx
sudo systemctl restart nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

3.4Janus配置

  • Janus安装目录在/opt/janus
./bin ./etc ./include ./lib ./share
可执行文件 janus配置文件 janus头文件 janus库 存放脚本或者文档,web demo也在这里
  • 配置Video room
  1. 先配置video room,需要配置的文件为(目录/opt/janus/etc/janus),并开通8088,8089,8188,8989端口

  2. 要先把.sample后缀的文件拷贝成jcfg后缀

# 进到对应的目录
cd /opt/janus/etc/janus
# 拷贝文件
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp  
sudo cp   
sudo cp  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 配置
1.配置stun与turn——先部署一个Coturn,请参阅文章“/qq_27890899/article/details/137971090?spm=1001.2014.3001.5501”
# 大概237行
stun_server = "8.141."
        stun_port = 3478
        nice_debug = false
# 大概267行 填写云服务器外网ip地址
nat_1_1_mapping = "8.141."

#大概274行
# credentials to authenticate...
        turn_server = "8.141."
        turn_port = 3478
        turn_type = "udp"
        turn_user = "ljw"
        turn_pwd = "123456"
2.设置udp端口范围
media: {
        #ipv6 = true
        #ipv6_linklocal = true
        #min_nack_queue = 500
        rtp_port_range = "50000-60000"
        #dtls_mtu = 1200
        #no_media_timer = 1
        #slowlink_threshold = 4
        #twcc_period = 100
        #dtls_timeout = 500
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 配置
general: {
        #events = true                                  # Whether to notify event handlers about transport events (default=true)
        json = "indented"                               # Whether the JSON messages should be indented (default),
                                                                        # plain (no indentation) or compact (no indentation and no spaces)
        base_path = "/janus"                    # Base path to bind to in the web server (plain HTTP only)
        threads = "unlimited"                   # unlimited=thread per connection, number=thread pool
        http = true                                             # Whether to enable the plain HTTP interface
        port = 8088                                             # Web server HTTP port
        #interface = "eth0"                             # Whether we should bind this server to a specific interface only
        #ip = "192.168.0.1"                             # Whether we should bind this server to a specific IP address (v4 or v6) only
        https = true                                    # Whether to enable HTTPS (default=false)
        secure_port = 8089                              # Web server HTTPS port, if enabled
        #secure_interface = "eth0"              # Whether we should bind this server to a specific interface only
        #secure_ip = "192.168.0.1"              # Whether we should bind this server to a specific IP address (v4 or v6) only
        #acl = "127.,192.168.0."                # Only allow requests coming from this comma separated list of addresses
}
​
certificates: {
        cert_pem = "/home/ubuntu/cert/" # 跟前面配置的一样路径
        cert_key = "/home/ubuntu/cert/"
        #cert_pwd = "secretpassphrase"
        #ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 配置
general: {
        #events = true                                  # Whether to notify event handlers about transport events (default=true)
        json = "indented"                               # Whether the JSON messages should be indented (default),
                                                                        # plain (no indentation) or compact (no indentation and no spaces)
        #pingpong_trigger = 30                  # After how many seconds of idle, a PING should be sent
        #pingpong_timeout = 10                  # After how many seconds of not getting a PONG, a timeout should be detected
​
        ws = true                                               # Whether to enable the WebSockets API
        ws_port = 8188                                  # WebSockets server port
        #ws_interface = "eth0"                  # Whether we should bind this server to a specific interface only
        #ws_ip = "192.168.0.1"                  # Whether we should bind this server to a specific IP address only
        wss = true                                              # Whether to enable secure WebSockets
        wss_port = 8989                         # WebSockets server secure port, if enabled
        #wss_interface = "eth0"                 # Whether we should bind this server to a specific interface only
        #wss_ip = "192.168.0.1"                 # Whether we should bind this server to a specific IP address only
        #ws_logging = "err,warn"                # libwebsockets debugging level as a comma separated list of things
                                                                        # to debug, supported values: err, warn, notice, info, debug, parser,
                                                                        # header, ext, client, latency, user, count (plus 'none' and 'all')
        #ws_acl = "127.,192.168.0."             # Only allow requests coming from this comma separated list of addresses
}
​
certificates: {
        cert_pem = "/home/ubuntu/cert/"
        cert_key = "/home/ubuntu/cert/"
        #cert_pwd = "secretpassphrase"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 修改/opt/janus/share/janus/html/demos/
var server = null;
if( === 'http:')
	server = "http://" +  + ":8088/janus";
else
	server = "https://" +  + ":8089/janus";
// 将默认的https协议改为wss
var server = "wss://" +  + ":8989";
// 配置coturn
var iceServers = [{
    urls: [
        "turn:59.110.46.200:3478?transport=udp",
        "turn:59.110.46.200:3478?transport=tcp"      
    ],
    username: "coturn",
    credential: "123"
},
{
    urls:"turn:81.70.18.250:3478",
    username: "devyk",
    credential: "devyk"
},
{
    urls:"stun:59.110.46.200:3478"
}];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3.5Demo报错

[ERR] [:janus_dtls_srtp_incoming_msg:939] [7910734903325969] Oops, error creating inbound SRTP session for component 1 in stream 1??
[ERR] [:janus_dtls_srtp_incoming_msg:940] [7910734903325969] – 2 (srtp_err_status_bad_param)

解放方法1:
root@iZ2zeeusygingo1fywrhzcZ:~# locate 
/home/libsrtp-2.2.0/
/home/libsrtp-2.2.0/.1
/usr/lib/
/usr/lib/.1
sudo rm -rf /usr/lib/libsrtp2.*
sudo ldconfig
ldconfig是一个Linux系统下的动态链接库管理命令。它的主要作用包括:
更新共享库缓存:ldconfig通过扫描共享库文件所在的目录(如/lib和/usr/lib,以及配置文件/etc/内所列的目录)来更新系统的共享库缓存,确保系统知道哪些共享库可用。
解决库的依赖关系:如果一个共享库依赖于其他库,ldconfig会确保系统知道这些依赖关系,以便在程序运行时正确加载所需的库。
提高性能:通过维护共享库的索引,ldconfig可以提高程序加载库的性能,因为系统不必每次都搜索整个文件系统来找到所需的库。
ldconfig命令的使用方法很简单,只需在终端中输入“ldconfig”即可执行。另外,它还可以通过命令行选项来指定要更新的共享库路径,或者使用“-v”选项来显示更新过程的详细信息。需要注意的是,一般情况下需要以超级用户(root)权限执行该命令,可以使用sudo ldconfig命令来确保以root权限运行。
updatedb 命令来更新 locate 的数据库
解决方法2:
/
[ERR] [:janus_dtls_srtp_incoming_msg:923] ... Oops, error creating inbound SRTP session for component 1 in stream 1??
[ERR] [:janus_dtls_srtp_incoming_msg:924] ...  -- 1 (srtp_err_status_fail)
Oops, error creating inbound SRTP session for component 1 in stream 1 #2024
Solució / Solution
enable openssl (--enable-openssl) or nss (--enable-nss) when compiling libsrtp:
./configure --enable-openssl
解决方法3:
i also got this issue.
then i update the libsrtp with version 2.4.2, re-configure janus ,
everything is ok, now
重新编译Janus
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

四、Demo运行效果

  • 首页
    在这里插入图片描述
  • 回声测试
    在这里插入图片描述
  • 对话房间
    在这里插入图片描述

五、SIP网关应用

未完待续…