janus编译
导出容器为tar
docker export -o janus_back.tar janus
导入容器镜像
docker import janus_back.tar janus_run
端口20000-21000
启动容器 需要加命令/bin/bash,否则无法启动
docker run -d -it -v /D/docker_linux/janus:/janus -p 8010:22 -p 8088:8088 -p 8089:8089 -p 7088:7088 -p 7889:7889 -p 8188:8188 -p 8989:8989 -p 7188:7188 -p 7989:7989 -p 20000-21000:20000-21000/udp --name janus_run janus_run /bin/bash
janus+nginx
docker run -d -it -v /D/docker_linux/janus:/janus -p 8080:80 -p 9090:443 -p 8010:22 -p 8088:8088 -p 8089:8089 -p 7088:7088 -p 7889:7889 -p 8188:8188 -p 8989:8989 -p 7188:7188 -p 7989:7989 -p 20000-21000:20000-21000/udp --name janus_run janus_run /bin/bash
docker环境搭建
1.更新
apt update
//安装常用工具:
apt install iputils-ping net-tools vim git wget
安装 aptitu:
sudo
2.使用ubuntu涉及时区问题
手动选 6 Asia 70 Shanghai
[Docker] 使用ubuntu涉及时区问题
RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -y tzdata \
&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata
ssh
1.安装
sudo apt install ssh
2.开启自启动、启动ssh服务
systemctl enable ssh
service ssh restart
3.遇到的问题:
root账号无法登录:
sudo vim /etc/ssh/sshd_config
//PermitRootLogin prohibit-password
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
3.配置
ssh自动启动:
vim /root/.bashrc
尾部添加:
service ssh start
设置ssh密码:
passwd root 123456
janus源码编译
依赖库安装:
sudo aptitude install libmicrohttpd-dev libjansson-dev \
libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
libconfig-dev pkg-config libtool automake
sudo aptitude install libsrtp-dev //安装失败,需要单独安装
sudo aptitude install libnice-dev //后期可能需要修改源码,改为源码安装
sudo apt install cmake meson gengetopt
sudo aptitude install doxygen graphviz
sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
插件选择与安装
janus 支持插件式功能安装,根据需求选择安装
安装插件如下:
libwebsockets(支持 WebSocket)
libsrtp 和 libusrsctp(音视频流传输控制和数据协议支持)
libmicrohttpd(支持 http/https)
Janus
nginx(提供 web 服务)
libnice
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
meson --prefix=/usr build && ninja -C build && sudo ninja -C build install
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
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 && sudo make install
usrsctp
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6
make && sudo make install
libwebsockets
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git checkout v3.2-stable
mkdir build
cd build
cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
Janus
git clone https://github.com/meetecho/janus-gateway.git
git checkout v0.10.4 //直接下载v1.1.0zip版本
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest --enable-data-channels
make && sudo make install
nginx
cd /etc/ld.so.conf.d
touch libnice.conf
添加 /usr/lib64
立即生效 sudo ldconfig
生成签名证书
mkdir -p ~/cert
cd ~/cert
CA私钥
/opt/janus/cert
openssl genrsa -out key.pem 2048
自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
配置 Nginx
#docker run -d -it -v /D/docker_linux/nginx:/demo -p 8080:80 -p 9090:443 --name nginx nginx
#docker run -d -it -v /D/docker_linux/nginx:/demo -p 8080:80 -p 9090:443 --name nginx_run nginx_run /bin/bash
docker run -d -it -v /D/docker_linux/nginx:/demos -p 8080:80 -p 9090:443 --name nginx_run ubuntu:20.04
vim /etc/nginx/conf.d/default.conf
修改配置文件如下:
开启 HTTPS 功能
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /janus/cert/cert.pem;
ssl_certificate_key /janus/cert/key.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /janus/demos;
index index.html index.htm;
}
}
SFU服务器难在那呢?
1 单端口的问题:所有推拉流,DTLS和音视频流都用一个端口。
因为暴露多个端口不安全,而且多端口不好负载均衡。
用ice-ufrag、ice-pwd区分音视频的流。如果用ssrc,一般音视频ssrc不同。
2 集群:信令和媒体需要分离。
容错处理、负载均衡、级联。