webrtc快速搭建视频通话、视频会议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011077027/article/details/86225524

1.前置条件

  1. 首先你需要有一台linux服务器,windows的也可以,请自行搞定

  2. 需要安装nodejs环境,注意版本不能太低,

    nodejs 官网 : https://nodejs.org/en/download/

    如遇问题请找:https://github.com/nodejs/help/wiki/Installation

  3. openssl,这个玩意应该不用说了

  4. git 这个也不用说了

  5. 应该没有其他的了

2. coturn穿透服务器的搭建

  1. 编译安装coturn

    git clone https://github.com/coturn/coturn 
    cd coturn 
    ./configure 
    make 
    sudo make install
    
  2. 查看是否安装

    which turnserver
    
  3. 配置

    配置文件路径如下

    /usr/local/etc/turnserver.conf (也可能在其他位置),有一点需要注意 min-port到max-port的端口需要打开,不然转发不好使

    #我配置如下:
    verbose
    fingerprint
    
    min-port=59000
    max-port=65000
    
    lt-cred-mech
    realm=demo
    user=dds:0x2bc31c994d676961b59b9aa1c92f74d3
    user=dds:123456
    stale-nonce
    no-loopback-peers
    no-multicast-peers
    mobility
    no-cli
    
    #只需要修改user字段和realm字段
    #0x2bc31c994d676961b59b9aa1c92f74d3 是为了安全访问,也可不填
    
    

    上面一串生成命令如下,dds和123456更换成自己的

    turnadmin -k -u dds -r north.gov -p 123456
    

    更详细的配置请看

    https://github.com/ddssingsong/webrtc_server/blob/master/coturn/turnserver.conf

    或者下面这个配置,只配置stun(stun-only)

    listening-ip=本地ip
    listening-port=3478
    
    #relay-ip=0.0.0.0
    external-ip=外网ip
    
    Verbose
    fingerprint
    
    no-stdout-log
    syslog
    
    cert=pem/turn_server_cert.pem #这两个玩意请自行生成
    pkey=pem/turn_server_pkey.pem #
    
    user=demo:demo
    
    no-tcp
    no-tls
    no-tcp-relay
    stun-only
    #secure-stun
    
  4. 启动

    如果按照上面的配置直接运行
    
    turnserver
    
    如果没有配置上述配置文件,可采用其他运行方法
    
    /usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=dds:123456 -r dds --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -v
    
    --syslog 使用系统日志
    -a 长期验证机制
    -f 使用指纹
    --min-port   起始用的最小端口
    --max-port   最大端口号
    --user=dds:123456  turn用户名和密码
    -r realm组别
    --cert PEM格式的证书
    --pkey PEM格式的私钥文件
    -l, --log-file,<filename> 指定日志文件
    -v verbose
    请根据需要选择
    
  5. 测试地址,请分别测试stun和turn

    https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

在这里插入图片描述

3. 信令务器搭建(基于Skyrtc)

依旧是从github上下载安装

github 给mark一下,支持一下咯

git clone https://github.com/ddssingsong/webrtc_server.git  
cd webrtc_server

运行
node server.js
#如果要测试浏览器,请修改下面两个文件

修改/public/dist/js/SkyRTC-client.js,主要用于浏览器端的测试

   var iceServer = {
        "iceServers": [
          {
            "url": "stun:stun.l.google.com:19302"
          },
          {
            "url": "stun:外网ip:3478"
          },
          {
             "url": "turn:外网ip:3478",
             "username":"用户名",
             "credential":"密码"
          }
        ]
    };

修改/public/dist/js/conn.js 主要用于

#最后一行

#如果没有配wss代理

rtc.connect("ws:" + window.location.href.substring(window.location.protocol.length).split('#')[0], window.location.hash.slice(1));

如果配了wss代理
rtc.connect("wss:" + window.location.href.substring(window.location.protocol.length).split('#')[0]+"/wss", window.location.hash.slice(1));

# 后面的那个“/wss”是根据自己配的代理路径

4. 配置nignx代理

安装所需依赖

yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel

编译安装nginx

wget -C http://nginx.org/download/nginx-1.12.0.tar.gz
tar xvf nginx-1.12.0.tar.gz
cd nginx-1.12.0

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make 
make install 

修改配置文件

cd /usr/local/nginx/conf/
vi vim nginx.conf

配置反向代理如下

 #代理https
 upstream web {
    server 0.0.0.0:3000;      
        }
 #代理websocket
 upstream websocket {
    server 0.0.0.0:3000;   
        }
        
 server { 
    listen       443; 
    server_name  localhost;
	ssl          on;

    ssl_certificate     /cert/cert.crt;#配置证书
    ssl_certificate_key  /cert/cert.key;#配置密钥

	ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  50m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    
  #wss 反向代理  
  location /wss {
     proxy_pass http://websocket/; # 代理到上面的地址去
     proxy_read_timeout 100s;
     proxy_set_header Host $host;
     proxy_set_header X-Real_IP $remote_addr;
     proxy_set_header X-Forwarded-for $remote_addr;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'Upgrade';	
  }
  #https 反向代理
  location / {
     proxy_pass         http://web/;
     proxy_set_header   Host             $host;
     proxy_set_header   X-Real-IP        $remote_addr;
     proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  }
}

5.测试浏览器

访问

https://serverIp#roomName

查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通话

详情请查看:https://github.com/ddssingsong/webrtc_server

6.测试客户端

将这个项目下下来使用 android studio 编译并安装

https://github.com/ddssingsong/webrtc_android

将 WebrtcUtil.java中的地址替换成自己地址 就可测试

项目地址:https://github.com/ddssingsong/webrtc_android

如上述过程有问题请到github上提出你的问题,我会抽时间回复的

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011077027/article/details/86225524