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

今日名言
我相信每个赤诚忠厚的孩子,都曾在心底向父母许下孝的宏愿,相信来日方长,相信水到渠成,相信自己必有功成名就衣锦还乡的那一天,可以从容尽孝。
可惜人们忘了,忘了时间的残酷,忘了人生的短暂,忘了世上有永远无法报答的恩情,忘了生命本身不堪一击的脆弱

前言

经群里很多人反映搭建服务器遇到问题,我这里将搭建过程重新梳理一遍,希望能有帮助,这里贴上项目地址

Android:https://github.com/ddssingsong/webrtc_android

Node服务器:https://github.com/ddssingsong/webrtc_server_node

Java服务器:https://github.com/ddssingsong/webrtc_server_java/tree/nodejs_copy
java版需要看清楚分支是:nodejs_copy

@[toc]

1. 前置条件

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

  • 一些 简单工具应该先装好

    如:git、make、gcc之类的

2. 安装node和npm

下载官网最新nodejs:https://nodejs.org/en/download/

wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz

安装

# 解压
tar -xvf node-v10.16.0-linux-x64.tar.xz
# 改名
mv node-v10.16.0-linux-x64 nodejs
# 进入目录
cd nodejs/

# 确认一下nodejs下bin目录是否有node和npm文件,如果有就可以执行软连接
sudo ln -s /home/dds/webrtc/nodejs/bin/npm /usr/local/bin/
sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/local/bin/

**看清楚,上面软链接的路径是你自己创建的路径,我的路径是/home/dds/webrtc/nodejs**

#查看是否安装
node -v 
npm -v 

# 注意,ubuntu 有的是需要sudo,如果不想sudo,可以软链接到当前用户目录
sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/bin/

3. coturn穿透和转发服务器

3.1 ubuntu安装

ubuntu的话直接用apt安装就行了

sudo apt install coturn 

3.2 centos安装

centos或者其他的系统根据下面的方式进行安装

安装依赖

Ubuntu, Debian, Mint:        
     $ sudo apt-get install libssl-dev(必须)
     $ sudo apt-get install libsqlite3 (or sqlite3)
     $ sudo apt-get install libsqlite3-dev (or sqlite3-dev)
     $ sudo apt-get install libevent-dev(必须)
     $ sudo apt-get install libpq-dev 
     $ sudo apt-get install mysql-client
     $ sudo apt-get install libmysqlclient-dev
     $ sudo apt-get install libhiredis-dev

Fedora:      
     $ sudo yum install openssl-devel
     $ sudo yum install sqlite
     $ sudo yum install sqlite-devel
     $ sudo yum install libevent
     $ sudo yum install libevent-devel
     $ sudo yum install postgresql-devel
     $ sudo yum install postgresql-server
     $ sudo yum install mysql-devel
     $ sudo yum install mysql-server
     $ sudo yum install hiredis
     $ sudo yum install hiredis-devel        

编译安装coturn

git clone https://github.com/coturn/coturn 
cd coturn 
./configure 
make 
sudo make install

3.3 配置相关

查看是否安装成功

## 如果能够找到就说明已经安装成功
which turnserver

根据自己的安装目录,配置文件/usr/local/etc/turnserver.conf 或者/etc/turnserver.conf

我的目录是 /usr/local/etc/turnserver.conf
配置 如下

verbose
fingerprint
lt-cred-mech
realm=test 
user=ddssingsong:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli

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

listening-ip=本地ip
listening-port=3478
#relay-ip=0.0.0.0
external-ip=外网ip
min-port=59000
max-port=65000
Verbose
fingerprint
no-stdout-log
syslog
user=ddssingsong:123456
no-tcp
no-tls
no-tcp-relay
stun-only
# 下面是配置证书,不懂就问后端人员怎么用openssl生成这个
cert=pem/turn_server_cert.pem 
pkey=pem/turn_server_pkey.pem 
#secure-stun

更详细的配置请看

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

3.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


#请根据需要选择

测试地址,请分别测试stun和turn,relay代表turn

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

在这里插入图片描述

4. 安装webrtc服务器和浏览器端

  1. 下载 代码

    # 代码检出来
    git clone https://github.com/ddssingsong/webrtc_server_node.git  
    cd webrtc_server
    
  2. 修改/public/dist/js/SkyRTC-client.js,设置穿透服务器

       var iceServer = {
            "iceServers": [
              {
                "url": "stun:stun.l.google.com:19302"
              },
              {
                "url": "stun:118.25.25.147:3478"
              },
              {
                 "url": "turn:118.25.25.147:3478",
                 "username":"ddssingsong",
                 "credential":"123456"
              }
            ]
        };
    
    
  3. 修改/public/dist/js/conn.js

    ## 最后一行
    
    ##  如果没有配wss代理
    
    rtc.connect("ws:" + window.location.href.substring(window.location.protocol.length).split('#')[0], window.location.hash.slice(1));
    
    如果配了nginx wss代理
    rtc.connect("wss:" + window.location.href.substring(window.location.protocol.length).split('#')[0]+"/wss", window.location.hash.slice(1));
    
    # 后面的那个“/wss”是根据自己配的代理路径
    
  1. 运行

    # cd到项目路径
    
    # 安装依赖
    npm install
    
    # 运行
    node server.js
    
    

其实到了这一步就可以测试客户端了,往下看获取线上部署详情

客户端测试可以不使用nginx配置代理,只需要使用ws即可

5. 安装nginx

如果是ubuntu的话还是可以使用apt安装

sudo apt-get install nginx

centos按照下面的方式进行

  1. 安装依赖

    yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel
    
  2. 编译安装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 
    
    sudo make install 
    
  1. 生成证书,这个只是简单的生成,请慎重对待

    # 移动到目录,下面会用到
    cd /
    sudo mkdir cert
    ce cert
    
    # 生成服务器证书key
    sudo openssl genrsa -out cert.pem 1024
    
    # 生成证书请求,需要你输入信息,一路回车就行,不要输入内容
    sudo openssl req -new -key cert.pem -out cert.csr
    
    # 生成crt证书
    sudo openssl x509 -req -days 3650 -in cert.csr -signkey cert.pem -out cert.crt
    
    
  1. 修改 配置文件/usr/local/nginx/conf/nginx.conf或者/etc/nginx/nginx.conf,没有的话自己找一下

    将下面的内容帖进去就行了

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
     worker_connections 768;
     # multi_accept on;
    }
    
    http {
     sendfile on;
     tcp_nopush on;
     tcp_nodelay on;
     keepalive_timeout 65;
     types_hash_max_size 2048;
    
     include /etc/nginx/mime.types;
     default_type application/octet-stream;
    
    
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
     ssl_prefer_server_ciphers on;
    
     access_log /var/log/nginx/access.log;
     error_log /var/log/nginx/error.log;
    
     gzip on;
    
     include /etc/nginx/conf.d/*.conf;
     include /etc/nginx/sites-enabled/*;
     
      #代理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;
    
        
     #wss 反向代理  
     location /wss {
         proxy_pass http://websocket/; # 代理到上面的地址去
         proxy_read_timeout 300s;
         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;
      }
     }
    }
    
  2. 开启nginx

    #查看是否开启
    ps -ef|grep nginx
    
    #改变配置文件重启nginx
    sudo nginx -s reload
    
    

6. 测试浏览器

#访问

https://serverIp#roomName

如:
外网:https://192.168.1.123/#123
内网:http:192.168.1.123:3000#123

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

7. 测试客户端

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

## 看清楚分支,项目一直在开发中,所以请使用固定分支测试,一般使用branch_meeting分支测试,master和dev是最新代码
https://github.com/ddssingsong/webrtc_android

修改WebrtcUtil.java,要去掉界面上的地址哦

    // turn and stun
    // 外网测试才需要
    private static MyIceServer[] iceServers = {
            new MyIceServer("stun:stun.l.google.com:19302"),
            new MyIceServer("118.25.25.147:3478?transport=udp"),
            new MyIceServer("118.25.25.147:3478?transport=udp",
                    "ddssingsong",
                    "123456"),
            new MyIceServer("118.25.25.147:3478?transport=tcp",
                    "ddssingsong",
                    "123456"),

    };

    // 外网测试
    private static String WSS = "wss://47.254.34.146/wss";

    //本地内网信令地址
    private static String WSS = "ws://192.168.1.122:3000";

8. 好了,基本完成

在这里插入图片描述

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

别忘了,github关注一下哦

https://github.com/ddssingsong

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容