WebRTC 环境搭建

server/2024/12/26 4:49:49/

主题

本文主要描述webrtc开发过程中所需的环境搭建

环境:

运行环境:ubuntu20.04

Node.js环境搭建

安装编译 Node.js 所需的依赖包:

sudo apt-get updatesudo apt-get install -y build-essential libssl-dev

下载 Node.js 源码:

curl -sL https://nodejs.org/dist/v14.19.0/node-v14.19.0.tar.gz -o node-v14.19.0.tar.gz

解压源码包:

tar -xzf node-v14.19.0.tar.gzcd node-v14.19.0

配置、编译和安装 Node.js:

./configuresudo make && sudo make install
验证 Node.js 和 npm 的安装
node -v && npm -v
测试

app.js

// 引入 http 模块
const http = require('http');// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {// 设置 HTTP 响应头res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');// 向客户端发送响应res.end('Hello, World!
');
});// 指定服务器监听的端口号
const port = 3000;
server.listen(port, () => {console.log(`服务器正在监听端口 ${port}`);
});node app.js

coturn搭建

ubuntu版本

安装 COTURN 软件包:

sudo apt-get install coturn

编辑 COTURN 配置文件:

sudo vim /etc/coturn/turnserver.conf

请根据实际情况修改以下配置项:

  • realm: 设置 TURN 服务器的域名或 realm。

  • user: 设置 TURN 服务器的用户名和密码。

  • static-auth-secret: 设置身份验证的密钥。

  • server-name: 设置 TURN 服务器的域名或 IP 地址。

    #中继服务器监听的IP地址,NAT环境下直接写私网IP地址,可以指定多个IP
    listening-ip= 你自己的内网IP
    #中继服务器转发地址(本地IP地址将用于传递数据包的给每个端),和监听地址一样
    #一般不开
    #relay-ip=你自己的公网ip
    #外部IP,NAT环境下直接写:公网IP/私网IP
    external-ip=公网ip/内网ip
    #cli-password=123456
    #打开fingerprint的注释,使用长期证书机制。
    fingerprint
    #打开密码验证,使用短期证书机制。
    lt-cred-mech
    #服务器名称,用于OAuth认证,默认和realm相同,直接填公网ip.部分浏览器本段不设可能会引发cors错误。
    server-name=公网ip

    TURN REST API的长期凭证机制范围,同样设为ip,同server-name.

    realm=公网ip
    #移动的ICE(MICE)的规范支持。
    mobility
    #快捷的添加用户是使用user=XXX:XXXX的方式。
    user=jbj:123456

启动 COTURN 服务:

sudo systemctl start coturn

centos版本

# 更新系统包
sudo yum update -y# 安装构建工具和 OpenSSL 开发库
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel
sudo yum install -y coturnsudo vim /etc/turnserver.conf#中继服务器监听的IP地址,NAT环境下直接写私网IP地址,可以指定多个IP
listening-ip=172.23.111.111
#中继服务器转发地址(本地IP地址将用于传递数据包的给每个端),和监听地址一样
#relay-ip=8.138.111.111
#外部IP,NAT环境下直接写:公网IP/私网IP
external-ip=8.138.111.111
cli-password=123456
#打开fingerprint的注释,使用长期证书机制。
fingerprint
#打开密码验证,使用短期证书机制。
lt-cred-mech
#服务器名称,用于OAuth认证,默认和realm相同,直接填公网ip.部分浏览器本段不设可能会引发cors错误。
server-name=8.138.111.111
# TURN REST API的长期凭证机制范围,同样设为ip,同server-name.
realm=8.138.111.111
#移动的ICE(MICE)的规范支持。
mobility
#快捷的添加用户是使用user=XXX:XXXX的方式。
user=jbj:123456cert=/www/server/nginx/webrtc/cert.pem
pkey=/www/server/nginx/webrtc/key.pem

检查 COTURN 服务状态:

#开启
sudo systemctl restart coturn
sudo systemctl status coturn

之后,可以使用 COTURN 服务器提供的 STUN 和 TURN 功能,帮助 WebRTC 等实时通信应用程序解决 NAT 穿透问题。

也可以使用命令行启动

# nohup是重定向命令,输出都将附加到当前目录的 nohup.out 文件中;
# 命令后加 & ,后台执行起来后按 
ctr+c,不会停止
sudo nohup turnserver ‐L 0.0.0.0 ‐a ‐u jbj:123456 ‐v ‐f ‐r nort.gov &# 前台启动
sudo turnserver ‐L 0.0.0.0 ‐a ‐u jbj:123456 ‐v ‐f ‐r nort.gov  
#然后查看相应的端口号3478是否存在进程
sudo lsof ‐i:3478

sar网络上传下载检测

sudo apt-get install sysstat#每1s检测一次
sudo sar -n DEV 1

  • 09:03:19 PM: 这表示输出统计信息的时间是下午 9 点 3 分 19 秒。

网络接口信息:

  • lo: 这是本地回环接口,用于本机之间的通信。

  • ens33: 这是主网卡接口。

  • docker0: 这是 Docker 容器网桥接口。

  • docker_gwbridge: 这是 Docker 网关桥接口。

网络流量统计指标:

  • rxpck/s: 每秒接收的数据包数量。

  • txpck/s: 每秒发送的数据包数量

  • rxkB/s: 每秒接收的数据量,单位为 KB。

  • txkB/s: 每秒发送的数据量,单位为 KB。

  • rxcmp/s: 每秒接收的压缩数据包数量。

  • txcmp/s: 每秒发送的压缩数据包数量。

  • rxmcst/s: 每秒接收的多播数据包数量。

  • %ifutil: 网卡利用率百分比。

nginx环境搭建

安装 Nginx 编译依赖

sudo apt-get updatesudo apt-get install build-essential libtool zlib1g-dev libpcre3 libpcre3-dev openssl

下载 Nginx 源码

wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/

配置 Nginx 编译参数 (支持 HTTPS)

./configure --with-http_ssl_module

编译安装

# 编译 Nginx
make# 安装 Nginx
sudo make install查看 Nginx 的编译参数
nginx -V--with-http_ssl_module 表示 Nginx 已经编译了对 SSL/TLS 协议的支持。

学习资料分享

0voice · GitHub


http://www.ppmy.cn/server/153227.html

相关文章

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包 java.lang:系统基础类 java.io:文件操作相关类,比如文件操作 java.nio:为了完善io包中的功能,提高io性能而写的一个新包 java.net:网络相关的包 java.util:java辅助类,特别是集合类 java.sql:数据库操作类 IO流 按照流的流向分…

go-zero(十五)缓存实践:分页列表

go zero 缓存实践:分页列表 在实际开发中,分页列表 是一个非常常见的需求,尤其在面对大量数据时,通过分页可以有效减轻服务器和数据库的压力,提高用户体验。本篇文章将通过go zero 和 Redis 的结合,提供一…

【python】OpenCV—Image Moments

文章目录 1、功能描述2、图像矩3、代码实现4、效果展示5、完整代码6、涉及到的库函数cv2.moments 7、参考 1、功能描述 计算图像的矩,以质心为例 2、图像矩 什么叫图像的矩,在数字图像处理中有什么作用? - 谢博琛的回答 - 知乎 https://ww…

概率论 期末 笔记

第一章 随机事件及其概率 利用“四大公式”求事件概率 全概率公式与贝叶斯公式 伯努利概型求概率 习题 推导 一维随机变量及其分布 离散型随机变量(R.V)求分布律 利用常见离散型分布求概率 连续型R.V相关计算 利用常见连续型分布的计算 均匀分布 正态…

如何处理对象的创建与销毁的时机?C++ 中面向对象编程如何处理对象的状态存储与恢复?

1) 如何处理对象的创建与销毁的时机? 在C中,对象的创建与销毁是内存管理的重要部分,可以通过多种方式来实现和控制。 对象的创建 静态存储期(Static Storage Duration): 全局对象或静态局部对象在程序开…

React基础知识(总结回顾一)

React知识框架图可以帮助理清React的核心概念及其相关技术。下面是一个大致的React知识框架图,按功能模块将React的核心知识进行分类,包括从基础到进阶的内容。 React 知识框架图: --------------------- | React 基础 | --------…

RabbitMQ 路由(Routing)通讯方式详解

在现代分布式系统中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 作为一个广泛使用的消息代理(Message Broker),提供了多种消息传递模式,其中路由(Ro…

MFC/C++学习系列之简单记录7

MFC/C学习系列之简单记录7 前言句柄的介绍句柄的使用AFX开头的函数都是干什么用的?总结 前言 在MFC的使用中发现了句柄,今天来详细学习一下MFC中如何使用句柄吧! 句柄的介绍 句柄的使用是资源管理和传递的关键机制,通过句柄将系…