织梦CMS - 轻松建站从此开始!

罗索

webrtc 快速搭建 视频通话 视频会议 (亲测半个小

jackyhwei 发布于 2021-02-01 14:24 点击:次 
经群里很多人反映搭建服务器遇到问题,我这里将搭建过程重新梳理一遍,希望能有帮助,这里贴上项目地址
TAG: 视频会议  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

1. 前置条件

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

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

    如:git、make、gcc之类的

2. 安装node和npm

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

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

安装

  1. # 解压 
  2. tar -xvf node-v10.16.0-linux-x64.tar.xz 
  3. # 改名 
  4. mv node-v10.16.0-linux-x64 nodejs 
  5. # 进入目录 
  6. cd nodejs/ 
  7.  
  8. # 确认一下nodejs下bin目录是否有node和npm文件,如果有就可以执行软连接 
  9. sudo ln -s /home/dds/webrtc/nodejs/bin/npm /usr/local/bin/ 
  10. sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/local/bin/ 
  11.  
  12. **看清楚,上面软链接的路径是你自己创建的路径,我的路径是/home/dds/webrtc/nodejs** 
  13.  
  14. #查看是否安装 
  15. node -v  
  16. npm -v  
  17.  
  18. # 注意,ubuntu 有的是需要sudo,如果不想sudo,可以软链接到当前用户目录 
  19. sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/bin/ 

3. coturn穿透和转发服务器

3.1 ubuntu安装

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

  1. sudo apt install coturn  

3.2 centos安装

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

安装依赖

  1. Ubuntu, Debian, Mint:        
  2.         $ sudo apt-get install libssl-dev(必须) 
  3.         $ sudo apt-get install libsqlite3 (or sqlite3) 
  4.         $ sudo apt-get install libsqlite3-dev (or sqlite3-dev) 
  5.         $ sudo apt-get install libevent-dev(必须) 
  6.         $ sudo apt-get install libpq-dev  
  7.         $ sudo apt-get install mysql-client 
  8.         $ sudo apt-get install libmysqlclient-dev 
  9.         $ sudo apt-get install libhiredis-dev 
  10.  
  11. Fedora:      
  12.         $ sudo yum install openssl-devel 
  13.         $ sudo yum install sqlite 
  14.         $ sudo yum install sqlite-devel 
  15.         $ sudo yum install libevent 
  16.         $ sudo yum install libevent-devel 
  17.         $ sudo yum install postgresql-devel 
  18.         $ sudo yum install postgresql-server 
  19.         $ sudo yum install mysql-devel 
  20.         $ sudo yum install mysql-server 
  21.         $ sudo yum install hiredis 
  22.         $ sudo yum install hiredis-devel 

编译安装coturn

  1. git clone https://github.com/coturn/coturn  
  2. cd coturn  
  3. ./configure  
  4. make  
  5. sudo make install 

3.3 配置相关

查看是否安装成功

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

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

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

  1. verbose 
  2. fingerprint 
  3. lt-cred-mech 
  4. realm=test  
  5. user=ddssingsong:123456 
  6. stale-nonce 
  7. no-loopback-peers 
  8. no-multicast-peers 
  9. mobility 
  10. no-cli 

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

  1. listening-ip=本地ip 
  2. listening-port=3478 
  3. #relay-ip=0.0.0.0 
  4. external-ip=外网ip 
  5. min-port=59000 
  6. max-port=65000 
  7. Verbose 
  8. fingerprint 
  9. no-stdout-log 
  10. syslog 
  11. user=ddssingsong:123456 
  12. no-tcp 
  13. no-tls 
  14. no-tcp-relay 
  15. stun-only 
  16. # 下面是配置证书,不懂就问后端人员怎么用openssl生成这个 
  17. cert=pem/turn_server_cert.pem  
  18. pkey=pem/turn_server_pkey.pem  
  19. #secure-stun 

更详细的配置请看

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

3.4 启动相关

  1. # 如果按照上面的配置直接运行 
  2. turnserver 
  3.  
  4. # 如果没有配置上述配置文件,可采用其他运行方法 
  5. /usr/local/bin/turnserver --syslog -a -f 
  6.  --min-port=32355 --max-port=65535 --user=dds:123456 
  7.  -r dds --cert=turn_server_cert.pem 
  8.  --pkey=turn_server_pkey.pem --log-file=stdout -v 
  9.  
  10. --syslog 使用系统日志 
  11. -a 长期验证机制 
  12. -f 使用指纹 
  13. --min-port   起始用的最小端口 
  14. --max-port   最大端口号 
  15. --user=dds:123456  turn用户名和密码 
  16. -r realm组别 
  17. --cert PEM格式的证书 
  18. --pkey PEM格式的私钥文件 
  19. -l, --log-file,<filename> 指定日志文件 
  20. -v verbose 
  21.  
  22.  
  23. #请根据需要选择 

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

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

在这里插入图片描述

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

  1. 下载 代码

  1. # 代码检出来 
  2. git clone https://github.com/ddssingsong/webrtc_server_node.git   
  3. cd webrtc_server 

2. 修改/public/dist/js/SkyRTC-client.js,设置穿透服务器

  1. var iceServer = { 
  2.      "iceServers": [ 
  3.        { 
  4.          "url": "stun:stun.l.google.com:19302" 
  5.        }, 
  6.        { 
  7.          "url": "stun:118.25.25.147:3478" 
  8.        }, 
  9.        { 
  10.           "url": "turn:118.25.25.147:3478", 
  11.           "username":"ddssingsong", 
  12.           "credential":"123456" 
  13.        } 
  14.      ] 
  15.  }; 

3.修改/public/dist/js/conn.js

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

4.运行

  1. # cd到项目路径 
  2.  
  3. # 安装依赖 
  4. npm install 
  5.  
  6. # 运行 
  7. node server.js 

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

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

5. 安装nginx

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

  1. sudo apt-get install nginx 

centos按照下面的方式进行

  1. 安装依赖

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

2.编译安装nginx

  1. wget -C http://nginx.org/download/nginx-1.12.0.tar.gz 
  2. tar xvf nginx-1.12.0.tar.gz 
  3. cd nginx-1.12.0 
  4.  
  5. ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module 
  6.  
  7. make  
  8.  
  9. sudo make install  

3.生成证书,这个只是简单的生成,请慎重对待

  1. # 移动到目录,下面会用到 
  2. cd / 
  3. sudo mkdir cert 
  4. ce cert 
  5.  
  6. # 生成服务器证书key 
  7. sudo openssl genrsa -out cert.pem 1024 
  8.  
  9. # 生成证书请求,需要你输入信息,一路回车就行,不要输入内容 
  10. sudo openssl req -new -key cert.pem -out cert.csr 
  11.  
  12. # 生成crt证书 
  13. sudo openssl x509 -req -days 3650 -in cert.csr -signkey cert.pem -out cert.crt 

4.修改 配置文件/usr/local/nginx/conf/nginx.conf或者/etc/nginx/nginx.conf,没有的话自己找一下

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

  1. user www-data; 
  2. worker_processes auto; 
  3. pid /run/nginx.pid; 
  4. include /etc/nginx/modules-enabled/*.conf; 
  5.  
  6. events { 
  7.     worker_connections 768; 
  8.     # multi_accept on; 
  9.  
  10. http { 
  11.     sendfile on; 
  12.     tcp_nopush on; 
  13.     tcp_nodelay on; 
  14.     keepalive_timeout 65; 
  15.     types_hash_max_size 2048; 
  16.  
  17.     include /etc/nginx/mime.types; 
  18.     default_type application/octet-stream; 
  19.  
  20.  
  21.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE 
  22.     ssl_prefer_server_ciphers on; 
  23.  
  24.     access_log /var/log/nginx/access.log; 
  25.     error_log /var/log/nginx/error.log; 
  26.  
  27.     gzip on; 
  28.  
  29.     include /etc/nginx/conf.d/*.conf; 
  30.     include /etc/nginx/sites-enabled/*; 
  31.      
  32.      #代理https 
  33.     upstream web { 
  34.             server 0.0.0.0:3000;       
  35.         } 
  36.     #代理websocket 
  37.     upstream websocket { 
  38.             server 0.0.0.0:3000;    
  39.         } 
  40.          
  41.     server {  
  42.         listen       443;  
  43.         server_name  localhost; 
  44.         ssl          on; 
  45.  
  46.         ssl_certificate     /cert/cert.crt;#配置证书 
  47.         ssl_certificate_key  /cert/cert.key;#配置密钥 
  48.  
  49.         ssl_session_cache    shared:SSL:1m; 
  50.         ssl_session_timeout  50m; 
  51.         ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3; 
  52.         ssl_ciphers  HIGH:!aNULL:!MD5; 
  53.         ssl_prefer_server_ciphers  on; 
  54.  
  55.      
  56.     #wss 反向代理   
  57.     location /wss { 
  58.         proxy_pass http://websocket/; # 代理到上面的地址去 
  59.         proxy_read_timeout 300s; 
  60.         proxy_set_header Host $host; 
  61.         proxy_set_header X-Real_IP $remote_addr; 
  62.         proxy_set_header X-Forwarded-for $remote_addr; 
  63.         proxy_set_header Upgrade $http_upgrade; 
  64.         proxy_set_header Connection 'Upgrade';   
  65.   } 
  66.     #https 反向代理 
  67.     location / { 
  68.         proxy_pass         http://web/; 
  69.         proxy_set_header   Host             $host; 
  70.         proxy_set_header   X-Real-IP        $remote_addr; 
  71.         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
  72.   } 
  73.  } 

5.开启nginx

  1. #查看是否开启 
  2. ps -ef|grep nginx 
  3.  
  4. #改变配置文件重启nginx 
  5. sudo nginx -s reload 

6. 测试浏览器

  1. #访问 
  2.  
  3. https://serverIp#roomName 
  4.  
  5. 如: 
  6. 外网:https://192.168.1.123/#123 
  7. 内网:http:192.168.1.123:3000#123 
  8.  
  9. # 查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通话 

7. 测试客户端

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

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

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

  1. // turn and stun 
  2. // 外网测试才需要 
  3. private static MyIceServer[] iceServers = { 
  4.         new MyIceServer("stun:stun.l.google.com:19302"), 
  5.         new MyIceServer("118.25.25.147:3478?transport=udp"), 
  6.         new MyIceServer("118.25.25.147:3478?transport=udp", 
  7.                 "ddssingsong", 
  8.                 "123456"), 
  9.         new MyIceServer("118.25.25.147:3478?transport=tcp", 
  10.                 "ddssingsong", 
  11.                 "123456"), 
  12.  
  13. }; 
  14.  
  15. // 外网测试 
  16. private static String WSS = "wss://47.254.34.146/wss"
  17.  
  18. //本地内网信令地址 
  19. private static String WSS = "ws://192.168.1.122:3000"

8. 好了,基本完成

在这里插入图片描述

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

别忘了,github关注一下哦

https://github.com/ddssingsong

(u011077027)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/202102/17801.html]
本文出处:CSDN博客 作者:u011077027 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容