基于WebRTC的音视频通话服务器搭建
Webrtc服务器搭建后台项目地址
java项目:https://github.com/androidtencent/WebRtcJavaWeb
NodeJs项目 : https://github.com/ddssingsong/webrtc_server
本搭建是基于centos 7.6 64位系统,系统恢复原始状态,重新装系统,确保人人都能搭建成功
如果系统安装了基础软件 如git gcc++ 可以跳该步骤
yum update
yum install git
yum install make
yum install gcc-c++
1.1 搭建Node环境
下载官网最新nodejs:https://nodejs.org/en/download
mkdir webrtc
cd webrtc
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 /webRTC/nodejs/bin/npm /usr/local/bin/
sudo ln -s /webRTC/nodejs/bin/node /usr/local/bin/# 看清楚,这个路径是你自己创建的路径,我的路径是/home/dds/webrtc/nodejs#查看是否安装
node -v
npm -v # 注意,ubuntu 有的是需要sudo,如果不想sudo,可以
sudo ln -s /root/webrtc/nodejs/bin/node /usr/bin/
1.2 安装turn服务器的环境准备
cd ..
yum install openssl openssl-libs libevent2 libevent-devel
yum install openssl-devel
yum install sqlite
yum install sqlite-devel
yum install postgresql-devel
yum install postgresql-server
yum install mysql-devel
yum install mysql-server
yum install hiredis
yum install hiredis-devel
1.3开始安装turn服务器
git clone https://github.com/coturn/coturn
cd coturn
./configure
make
sudo make install
./configure时报错
centos Libevent2 development libraries are not installed properly in required location
需要手动安装libevent-2.1.11-stable.tar.gz(https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libevent-2.1.11-stable.tar.gz)
编译libevent-2.1.11-stable.tar.gz时报错,
C preprocessor “/lib/cpp” fails sanity check,
解决办法:出现该情况是由于c++编译器的相关package没有安装,以root用户登陆,在终端上执行:
# yum install glibc-headers
# yum install gcc-c++
# yum install kernel-headers
查看是否安装成功
which turnserver
生成用户名和密码
turnadmin -k -u ddssingsong -r north.gov -p 123456
0xfb76c57e823de97df580e573437ef54a
0: log file opened: /var/log/turn_1791_2019-07-31.log
0: SQLite connection was closed.
turnadmin -k -u xhh -r north.gov -p 123456
0x66cfe78c3bc3c893ae91cc8575322027
0: log file opened: /var/log/turn_11767_2019-11-28.log
0: SQLite connection was closed.
安全访问秘钥 0xfb76c57e823de97df580e573437ef54a
安全访问秘钥 0x66cfe78c3bc3c893ae91cc8575322027
接下来配置turnserver 的配置文件,配置文件存放在/usr/local/etc/turnserver.config文件下
这个文件本身是不存在的,需要我们自己创建
#user=ddssingsong:0xfb76c57e823de97df580e573437ef54a
#user=ddssingsong:123456
创建内容
verbose
fingerprint
lt-cred-mech
realm=test
user=xhh:0x66cfe78c3bc3c893ae91cc8575322027
user=xhh:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli
该配置文件是不存在的、
user=“是你本机生成的随机ID 不要全部直接复制了”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KACS8uPI-1575365554077)(img/1.png)]
1.4安装Webrtc服务端
安装webrtc服务器和浏览器端git clone https://github.com/androidtencent/WebrtcNodeJS
cd WebrtcNodeJS
npm install
1.5 安装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_modulemake sudo make install
1.6 更改nginx 配置文件 (额外强调 其中包含https证书,下面会告诉生成方式)
vim /usr/local/nginx/conf/nginx.conf
删除配置文件内容,更改为以下内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b36wnqv8-1575365554079)(img/3.png)]
user root;
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 300;types_hash_max_size 2048;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLEssl_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/*;upstream web {server localhost:3000; }upstream websocket {server localhost:3000; }server { listen 443; server_name localhost;ssl on;ssl_certificate /cert/cert.crt;#配置证书ssl_certificate_key /cert/cert.pem;#配置密钥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;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'; }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;}}
}
1.7 生成nginx中的https证书
x509证书一般会用到三类文,key,csr,crt
Key 是私用密钥openssl格,通常是rsa算法。
Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。
1.key的生成
openssl genrsa -des3 -out cert.key 2048
这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:
openssl rsa -in cert.key -out cert.key
server.key就是没有密码的版本了。
2. 生成CA的crt
openssl req -new -x509 -key cert.key -out cert.crt -days 3650
生成的ca.crt文件是用来签署下面的server.csr文件。
3. csr的生成方法
openssl req -new -key cert.key -out cert.csr
需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。 http://www. openboy.xyz /
348563683@qq.com4. crt生成方法
CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。
openssl x509 -req -days 3650 -in cert.csr -CA cert.crt -CAkey cert.key -CAcreateserial -out cert.crt
输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。
最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt
证书合并:
cat cert.key cert.crt > cert.pem cat server.key server.crt > cert.pem
1.8分别启动服务
启动turnserver服务
/usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=dds:123456 -r dds --cert=/cert/cert.pem --pkey==/cert/cert.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, 指定日志文件
查看端口占用 netstat -ntlp | grep
启动nginx服务
./usr/local/nginx/sbin/nginx
启动webrtc 服务
cd /root/webrtc/WebrtcNodeJS
node server
在后台运行的shell脚本
#!/bin/bash
/./usr/local/nginx/sbin/nginx
NODE=which node
nohup $NODE server.js & > log.txt
nohup /usr/local/bin/turnserver --syslog -a -f --min-port=32355 --max-port=65535 --user=dds:123456 -r dds --cert=/cert/cert.pem --pkey==/cert/cert.pem --log-file=stdout -v & > log.txt
基于WebRTC的音视频通话服务器搭建相关推荐
- 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(上)
文章目录 前言 什么是 WebRTC? WebRTC 架构 WebRTC 通讯内容 WebRTC 通讯协议 WebRTC 连接建立过程 后记 前言 最近在做关于考试系统的项目,其中有一项需求分析是要做 ...
- 运维初学者必备之SRS音视频服务器搭建
运维初学者必备之SRS音视频服务器搭建 什么是srs音视频服务器? 答:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效. ...
- 基于WebRTC实现音视频及数据通信
文章目录 前言 一.WebRTC的组成? 二.信令交换的方式 三.会话描述 四.客户端应用 1.HTML 2.JavaScript 五.效果演示 六.项目地址 总结 前言 刚写了篇基于WebRTC使用 ...
- WebRTC:stun/turn服务器搭建
基于coturn项目的stun/turn服务器搭建 VoIP (Voice over Internet Protocol), 一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经 ...
- 微信小程序基于node.js的websocket服务器搭建和SSL证书申请、配置全家桶
〇.前言 最近在研究微信小程序的开发,中间遇到了不少问题,趟了不少坑,这里和大家分享一下我的一些经验,希望能给大家提供一些帮助. 一.微信小程序的websocket服务器搭建 微信小程序的网络通信使用 ...
- 基于TCP/UDP的socket服务器搭建流程
目录 TCP/UDP概念介绍 一.TCP/UDP对比 二.端口号的作用 三.字节序 1.概念 2.分类 3.C程序在内存空间的映射 socket服务器与客户端开发流程 一.流程介绍 二.socket服 ...
- freeswitch 使用sipjs 、jssip webrtc网页音视频通话
关于linphone手机端开发参考基于linphone android sdk 的voip语音.视频通话 教程一.注册_Java_lilin的专栏-CSDN博客 配置帮助群:261074724 呼叫系 ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- linux服务器搭建_基于LINUX系统的邮件服务器搭建和详细部署(POSTFIX)
linux master调度所有的程序: master-->pickup/cleanup-->rewrite..... /etc/postfix/master.cf # ls /etc/p ...
最新文章
- 【238】◀▶IEW-Unit03
- matlab程序求一个正交的相似变换矩阵,图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现...
- exe4j打包成可执行程序
- tomcat端口被占用了怎么办
- 有关windows firewall边缘遍历(Edge traversal)的一点信息
- 红外传感器的基础知识
- java的几个设计模式
- 数据仓库ETL工具箱——简介
- 计算机主板光驱插口,如何查看笔记本光驱位和主板的SATA接口版本
- React学习之进阶WEB组件(二十)
- 微软产品大升级:Surface Pro 6、Studio 2、Laptop 2 重磅来袭
- 移动硬盘不显示盘符修复方法
- html样式在ie显示不全,IE下css常见问题总结及解决
- eclipse mars2 安装web插件
- css3实现好看的边框效果
- 2019.9.2选择更新分离版
- 对于“你需要Administrator权限才能删除该文件”情况的处理办法
- 服务器安装macos虚拟机,windows服务器装macos虚拟机系统
- 使用python输出真值表
- Kotlin高阶函数及Lambda表达式实现接口回调
热门文章
- g711原理pcm转alaw,pcm转ulaw,alaw转pcm,ulaw转pcm
- MIT 6.S965 韩松课程 04
- ipython shell_IPython 1.0发布,强大的Python交互式Shell
- Outlook Express邮件丢失问题解决方法之一
- 【无标题】光纤收发器TX、RX分别表示什么?区分单纤双纤收发器的方法
- 2023.05.14十四届蓝桥杯青少组中高级组省赛Python
- 深度学习算法面试常问问题(二)
- Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)
- 【外行也能看懂的RabbitMQ系列(二)】—— RabbitMQ的Web管理界面(rabbitmq_management)详解(内含Topic模式通配符实操)
- [附源码]计算机毕业设计Node.js应急物资管理系统(程序+LW)