本文主要是介绍【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建
【1】安装准备
【1.1】安装依赖
安装 aptitu
sudo apt-get install aptitudesudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev \libssl1.0.1-dev libsrtp-dev libsofia-sip-ua-dev libglib2.3.4-dev \libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt \libtool automakesudo apt install cmake
sudo aptitude install libconfig-dev
sudo aptitude install libssl-dev
sudo aptitude install doxygen graphviz
sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
【2】Janus 插件选择与安装
janus 支持插件式功能安装,根据需求选择安装
安装插件如下
libwebsockets(支持 WebSocket)
libsrtp 和 libusrsctp(音视频流传输控制和数据协议支持)
libmicrohttpd(支持 http/https)
Janus
nginx(提供 web 服务)
【2.1】libwebsockets
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git checkout v3.2-stable
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make
make install
【2.2】libsrtp
wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
tar xfv v2.2.0.tar.gz
cd libsrtp-2.2.0
./configure --prefix=/usr --enable-openssl
make shared_library
make install
【2.3】libusrsctp
git clone https://github.com/Kurento/libusrsctp.git
cd libusrsctp
./bootstrap
./configure
make
make install
【2.4】libmicrohttpd
wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.71.tar.gz
tar zxf libmicrohttpd-0.9.71.tar.gz
cd libmicrohttpd-0.9.71/
./configure
make
make install
【2.5】Janus
git clone https://github.com/meetecho/janus-gateway.git
git checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest --enable-data-channels
make
make install
【2.6】Nginx
【2.6.0】下载 nginx-rtmp-module
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
【2.6.1】安装 Nginx
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module-master --with-http_ssl_module
make
make install
【2.6.2】生成签名证书
mkdir -p ~/cert
cd ~/cert
# CA私钥
openssl genrsa -out key.pem 2048
# 自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
【2.6.3】配置 Nginx
vim /usr/local/nginx/conf/nginx.conf
修改配置文件如下
# 开启 HTTPS 功能
server {listen 443 ssl;server_name localhost;ssl_certificate 自己的证书路径/cert.pem; #自己的证书ssl_certificate_key 自己的证书路径/key.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / { root /opt/janus/share/janus/demos; #web网页打开时,定位到这里index index.html index.htm;}
}# 开启 RTMP 功能
rtmp { server { listen 1900; application myapp { live on; }}
}
【2.6.4】Nginx 启停指令
# 启动和关闭nginx
sudo /usr/local/nginx/sbin/nginx
sudo /usr/local/nginx/sbin/nginx -s stop
【2.6.5】Nginx 测试
【2.7】TurnServer
【2.7.1】安装 TurnServer
sudo apt-get install libssl-dev
sudo apt-get install libevent-devwget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7
sudo ./configure
sudo make
sudo make install
【2.7.2】启动 TurnServer
# 注意此处的用户名与密码需要与 janus.jcfg 中的配置一致
sudo nohup turnserver -L 0.0.0.0 --min-port 30000 --max-port 60000 -a -u CopperSun:sungaopeng -v -f -r nort.gov &
【3】运行 Janus 官方 DEMO
备份 Janus 配置文件
cd /opt/janus/etc/janus
sudo cp janus.jcfg.sample janus.jcfg
sudo cp janus.transport.http.jcfg.sample janus.transport.http.jcfg
sudo cp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfg
sudo cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
sudo cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg
sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
sudo cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
sudo cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
sudo cp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfg
sudo cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
修改 janus.jcfg 配置 turn server
nat: {stun_server = "172.16.4.78"stun_port = 3478nice_debug = false#full_trickle = true#ice_lite = true#ice_tcp = trueturn_server = "172.16.4.78"turn_port = 3478turn_type = "udp"turn_user = "CopperSun"turn_pwd = "sungaopeng"
}
修改 janus.transport.http.jcfg 以开启 https 和增加证书
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 poolhttp = true # Whether to enable the plain HTTP interfaceport = 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) onlyhttps = 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 = "自己的证书路径/cert.pem"cert_key = "自己的证书路径/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
修改 janus.transport.websockets.jcfg 以开启 wss 和增加证书
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 detectedws = true # Whether to enable the WebSockets APIws_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 onlywss = true # Whether to enable secure WebSocketswss_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 = "自己的证书路径/cert.pem"cert_key = "自己的证书路径/key.pem"#cert_pwd = "secretpassphrase"
}
修改 Janus demo 增加 wss 支持
vim /opt/janus/share/janus/demos/videoroomtest.jsvar server = null;
if(window.location.protocol === 'http:')server = "http://" + window.location.hostname + ":8088/janus";
else#server = "https://" + window.location.hostname + ":8089/janus";server = "wss://" + window.location.hostname + ":8989";
启动 Janus
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
【4】Janus 示例代码
Android 端,https://github.com/pcgpcgpcg/janus-gateway-android
PC Windows 端,https://github.com/pcgpcgpcg/janus_gateway_win
Web 端,https://github.com/pcgpcgpcg/rtc_web_demo
附录
【1】云服务器上相关配置 -- 使能相关端口
【2】Android 端代码修改
修改配置 Janus 服务器 IP 地址
修改 build.gradle
maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://developer.huawei.com/repo/' }
jcenter { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
问题与解决方案
- 问题一
configure: error: Package requirements (libcrypto >= 1.0.1) were not met:
- 解决方案
安装 openssl,注意添加 shared 标识标识强制生成动态库,否则会出现静态库链接生成动态库的错误
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
tar xf openssl-1.0.2l.tar.gz
cd openssl-1.0.2l
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
make && make install
设置 PKG_CONFIG_PATH 环境变量
export PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig/:$PKG_CONFIG_PATH
- 问题二
- 解决方案
安装 doxygensudo apt-get install flex
sudo apt-get install bisongit clone https://github.com/doxygen/doxygen.git
cd doxygen
mkdir build
cd build
cmake -G "Unix Makefiles" ..
make
sudo make install
doxygen --version
参考致谢
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。
【1】Ubuntu16.04 中 搭建Janus Server
【2】ubuntu安装python3.7,并更新python默认指向为python3.7
【3】ubuntu18.04 安装新版本openssl
【4】doxygen安装(doxygen的编译依靠cmake)
这篇关于【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!