背景:
PC客户端处于专网无法与TRTC视频平台通讯(客户必须要外网)
解决方案:
需要一台即能通外网又能通专网的服务器,操作系统Centos7,搭建NGINX服务和TURN服务。
1. Nginx 服务器用于信令代理(websocket);--websocket通讯使用的是wss,需要配置SSL证书。
2. TURN 服务器用于音视频数据代理(RTCPeerconnection)。
服务配置与搭建
NGINX
- 安装nginx服务
- 生成SSL证书
- openssl genrsa -des3 -out cert.key 1024 #生成1024的证书私钥
- openssl req -new -key cert.key -out cert.csr
- cp cert.key cert.key.bak
- openssl rsa -in cert.key.bak -out cert.key
- openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.pem
- openssl pkcs12 -export -clcerts -in cert.pem -inkey cert.key -out cert.p12
- openssl pkcs12 -in cert.p12 -nocerts -nodes -out cert.key
- openssl rsa -in cert.key -out cert_pri.pem
- openssl rsa -in cert.key -pubout -out cert_pub.pem
- 配置nginx.conf
server {
#对应参数 signalProxy 中的域名 proxy.trtcapi.com
server_name www.lovezz.net.cn;
#对应参数 signalProxy 中的端口 443
listen 443 ssl ;
location /ws/ { #对应参数 signalProxy 中的"ws"
proxy_pass https://qcloud.rtc.qq.com:8687/; # TRTC 的服务器
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#域名对应的 SSL 证书,HTTPS 用,用户自行申请
ssl_certificate /home/ssl/cert.pem;
ssl_certificate_key /home/ssl/cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
}
- 重启nginx
TURN
- 安装部署turnserver
yum install -y make gcc cc gcc-c++ wget
yum install -y openssl-devel libevent libevent-devel mysql-devel mysql-server
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable && ./configure
sudo make && sudo make install && cd ..
wget http://turnserver.open-sys.org/downloads/v4.4.5.2/turnserver-4.4.5.2.tar.gz
tar -zxvf turnserver-4.4.5.2.tar.gz
cd turnserver-4.4.5.2 && ./configure
sudo make && sudo make install
生成turnserver的pem秘钥对:
openssl req -x509 -newkey rsa:2048 -keyout turn_server_pkey.pem -out turn_server_cert.pem -days 99999 –nodes
vi /etc/turnserver.conf
- 创建turnserver.conf配置
listening-port=3478
#本机的 ip
listening-ip=127.0.0.1
#在外网的 ip 地址
external-ip=1.116.68.120
#可以分配给客户端连接使用最小端口和最大端口
min-port=59900
max-port=60000
#面向内网客户端的用户名和密码
user=myname:12345678
#服务名称
server-name=tencent_webrtc
realm=tencent_webrtc
#证书生成参考下面说明
cert=/home/turn_server_cert.pem
pkey=/home/turn_server_pkey.pem
#处理数据中转的线程个数
relay-threads=10
simple-log
fingerprint
lt-cred-mech
no-loopback-peers
no-multicast-peers
no-tcp
no-tls
no-cli
no-tlsv1
no-tlsv1_1
mobility
- 启动turnserver
turnserver -o -a -f -user=myname:12345678 -r tencent_webrtc
trtc.js 设置代理的接口
通过 Client 中的方法设置代理服务器地址(示例):
client.setProxyServer('wss://xxxxxxx:443');
client.setTurnServer({ url: 'xxxxxxxx:3478', username: 'name', credential: 'password', credentialType: 'password' });