一、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
-
先配置video room,需要配置的文件为(目录/opt/janus/etc/janus),并开通8088,8089,8188,8989端口
-
要先把.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网关应用
未完待续…