Webrtc半小时搭建视频通话 视频会议

本文详细指导如何在Linux服务器上搭建WebRTC通信环境,包括安装node.js、coturn穿透服务器、WebRTC服务器及浏览器端,以及配置和测试nginx。适合需要构建远程音视频通信系统的开发者参考。

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

这里贴上项目地址

android端:https://github.com/ddssingsong/webrtc_android

服务器和浏览器端:https://github.com/ddssingsong/webrtc_server

文章目录
前言
1.前置条件
2. 安装node和npm
3. coturn穿透和转发服务器
4. 安装webrtc服务器和浏览器端
5. 安装nginx
6. 测试浏览器
7. 测试客户端
8. 好了,基本完成
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

安装


  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. # 确认一下nodejs下bin目录是否有node 和npm文件,如果有就可以执行软连接

  8. # sudo ln -s /home/dds/webrtc/nodejs/bin/npm /usr/local/bin/

  9. # sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/local/bin/

  10. # 看清楚,这个路径是你自己创建的路径,我的路径是/home/dds/webrtc/nodejs

  11. #查看是否安装

  12. # node -v 

  13. # npm -v 

  14. # 注意,ubuntu 有的是需要sudo,如果不想sudo,可以

  15. # sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/bin/

3. coturn穿透和转发服务器
这里说一下,ubuntu的话直接用apt安装就行了

# sudo apt install coturn 

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

1.安装依赖


  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. Fedora:        

  11.         $ sudo yum install openssl-devel

  12.         $ sudo yum install sqlite

  13.         $ sudo yum install sqlite-devel

  14.         $ sudo yum install libevent

  15.         $ sudo yum install libevent-devel

  16.         $ sudo yum install postgresql-devel

  17.         $ sudo yum install postgresql-server

  18.         $ sudo yum install mysql-devel

  19.         $ sudo yum install mysql-server

  20.         $ sudo yum install hiredis

  21.         $ sudo yum install hiredis-devel      

2.编译安装coturn


  1. # git clone https://github.com/coturn/coturn 

  2. # cd coturn 

  3. # ./configure 

  4. # make 

  5. # sudo make install

3.查看是否安装

# which turnserver

4.配置文件/usr/local/etc/turnserver.conf 或者/etc/turnserver.conf


  1. # 生成安全访问密码

  2. # turnadmin -k -u ddssingsong -r north.gov -p 123456

  3. # 生成了这个

  4. 0xfb76c57e823de97df580e573437ef54a

/usr/local/etc/turnserver.conf如下配置


  1. verbose

  2. fingerprint

  3. lt-cred-mech

  4. realm=test

  5. user=ddssingsong:0xfb76c57e823de97df580e573437ef54a

  6. user=ddssingsong:123456

  7. stale-nonce

  8. no-loopback-peers

  9. no-multicast-peers

  10. mobility

  11. no-cli


更详细的配置请看

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

或者下面这个配置,只配置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. cert=pem/turn_server_cert.pem #这两个玩意请自行生成

  12. pkey=pem/turn_server_pkey.pem #

  13. user=demo:demo

  14. no-tcp

  15. no-tls

  16. no-tcp-relay

  17. stun-only

  18. #secure-stun

5.启动


  1. # 如果按照上面的配置直接运行

  2. turnserver

  3. # 如果没有配置上述配置文件,可采用其他运行方法

  4. /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

  5. --syslog 使用系统日志

  6. -a 长期验证机制

  7. -f 使用指纹

  8. --min-port 起始用的最小端口

  9. --max-port 最大端口号

  10. --user=dds:123456 turn用户名和密码

  11. -r realm组别

  12. --cert PEM格式的证书

  13. --pkey PEM格式的私钥文件

  14. -l, --log-file,<filename> 指定日志文件

  15. -v verbose

  16. #请根据需要选择

6.测试地址,请分别测试stun和turn

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

在这里插入图片描述

4. 安装webrtc服务器和浏览器端
1.下载 代码


  1. # 代码检出来

  2. # git clone https://github.com/ddssingsong/webrtc_server.git

  3. # cd webrtc_server


  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. ## 如果没有配wss代理

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

  4. 如果配了nginx wss代理

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

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

4.运行


  1. # cd到项目路径

  2. # 安装依赖

  3. npm install

  4. # 运行

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


  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. # ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

  5. # make

  6. # sudo make install

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


  1. # 移动到目录,下面会用到

  2. cd /

  3. sudo mkdir cert

  4. ce cert

  5. # 生成服务器证书key

  6. sudo openssl genrsa -out cert.pem 1024

  7. # 生成证书请求,需要你输入信息,一路回车就行,不要输入内容

  8. sudo openssl req -new -key cert.pem -out cert.csr

  9. # 生成crt证书

  10. 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. events {

  6. worker_connections 768;

  7. # multi_accept on;

  8. }

  9. http {

  10. sendfile on;

  11. tcp_nopush on;

  12. tcp_nodelay on;

  13. keepalive_timeout 65;

  14. types_hash_max_size 2048;

  15. include /etc/nginx/mime.types;

  16. default_type application/octet-stream;

  17. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

  18. ssl_prefer_server_ciphers on;

  19. access_log /var/log/nginx/access.log;

  20. error_log /var/log/nginx/error.log;

  21. gzip on;

  22. include /etc/nginx/conf.d/*.conf;

  23. include /etc/nginx/sites-enabled/*;

  24. #代理https

  25. upstream web {

  26. server 0.0.0.0:3000;

  27. }

  28. #代理websocket

  29. upstream websocket {

  30. server 0.0.0.0:3000;

  31. }

  32. server {

  33. listen 443;

  34. server_name localhost;

  35. ssl on;

  36. ssl_certificate /cert/cert.crt;#配置证书

  37. ssl_certificate_key /cert/cert.key;#配置密钥

  38. ssl_session_cache shared:SSL:1m;

  39. ssl_session_timeout 50m;

  40. ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;

  41. ssl_ciphers HIGH:!aNULL:!MD5;

  42. ssl_prefer_server_ciphers on;

  43. #wss 反向代理

  44. location /wss {

  45. proxy_pass http://websocket/; # 代理到上面的地址去

  46. proxy_read_timeout 300s;

  47. proxy_set_header Host $host;

  48. proxy_set_header X-Real_IP $remote_addr;

  49. proxy_set_header X-Forwarded-for $remote_addr;

  50. proxy_set_header Upgrade $http_upgrade;

  51. proxy_set_header Connection 'Upgrade';

  52. }

  53. #https 反向代理

  54. location / {

  55. proxy_pass http://web/;

  56. proxy_set_header Host $host;

  57. proxy_set_header X-Real-IP $remote_addr;

  58. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  59. }

  60. }

  61. }

5.开启nginx


  1. #查看是否开启

  2. ps -ef|grep nginx

  3. #改变配置文件重启nginx

  4. sudo nginx -s reload


6. 测试浏览器


  1. #访问

  2. https://serverIp#roomName

  3. 如:

  4. 外网:https://192.168.1.123/#123

  5. 内网:http:192.168.1.123:3000#123

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


7. 测试客户端
 


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

  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. private static String WSS = "wss://47.254.34.146/wss";

  15. //本地内网信令地址

  16. private static String WSS = "ws://192.168.1.122:3000";

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值