WebRTC使用Linux搭建服务器(二)

2023-05-16

搭建服务器流程:

 

注意:每个人搭建服务器可能会出现奇奇怪怪的问题,照着我的方法可能会出现其他问题,不要着急,耐心搭建,确实比较烦。

1、安装JDK

apt-get update 

apt-get install openjdk-8-jdk 

java -version
#java version "1.8.0_181"

2、安装node.js

apt-get install nodejs-legacy 
apt-get install npm 
node --version
#v4.2.6
npm --version
#3.5.2

npm -g install grunt-cli
grunt --version
#grunt-cli v1.3.2

注意:这一步我出现过好多问题,有时候会出现grunt没搭建成功,有时候搭建成功了但是查找不了版本号,如果查找不了版本号,进行如下操作:
 

# 安装n模块
npm install -g n
# 升级nodejs到最新stable版本
n stable
# 升级最新npm
npm install npm@latest -g

3、安装Python和Python-webtest (必须2.7以上包括2.7)

apt-get install python 
apt-get install python-webtest

python -V
#Python 2.7.12

4、安装google_appengine

wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip
unzip google_appengine_1.9.40.zip

配置环境变量:

vim /etc/profile
export PATH=$PATH:/root/webrtc/google_appengine

按  :wq保存退出

执行:

source /etc/profile

5、安装go

apt install golang-go

go version 
#go version go1.6.2 linux/amd64
#创建go工作目录
mkdir -p /root/webrtc/goWorkspace/src
#配置环境变量:在/etc/profile文件最后增加一行:
export GOPATH=/root/webrtc/goWorkspace
source /etc/profile

6、安装libevent

当前目录:

cd root/webrtc/
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure
make install

7、安装apprtc

当前目录:

vim root/webrtc/
git clone https://github.com/webrtc/apprtc.git(https变成git)
#将collider的源码软连接到go的工作目录下
ln -s /root/webrtc/apprtc/src/collider/collider $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidermain $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidertest $GOPATH/src
#编译collidermain
go get collidermain
go install collidermain

(如果第一条代码安装失败,将https变成git)

如果后面两条编译失败,则执行:

#go get collidermain: 被墙
#报错: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
#执行: 
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/net.git net 
go install net

8、安装coturn

目录:

vim root/webrtc/
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xvfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7
./configure
make install

配置与运行:

1、coturn Nat穿透服务器

配置防火墙,允许访问3478端口(含tcp和udp,此端口用于nat穿透)
 

#启动 47.94.57.236:内网ip(阿里云后台可以看到内外网ip)
nohup turnserver -L 172.31.247.136 -a -u dongnao:12345 -v -f -r nort.gov &
#账号dongnao 密码:12345 这一步随便给,但是后面配置apprtc时需要用到
#命令后加 & ,执行起来后按 ctr+c,不会停止
```

```shell
#开启新窗口 执行
netstat -ntulp | grep turnserver #或者 lsof -i:3478
#输出大致这样的成功
tcp        0      0 127.0.0.1:5766          0.0.0.0:*                 LISTEN      16848/turnserver
tcp        0      0 172.31.247.136:3478       0.0.0.0:*               LISTEN      16848/turnserver
tcp        0      0 172.31.247.136:3478       0.0.0.0:*               LISTEN      16848/turnserver
udp        0      0 172.31.247.136:3478       0.0.0.0:*                           16848/turnserver
udp        0      0 172.31.247.136:3478       0.0.0.0:*                           16848/turnserver
```

2、collider 信令服务器

配置防火墙,允许访问8089端口(tcp,用于客户端和collider建立websocket信令通信)

mkdir -p /cert
cd /cert
# CA私钥
openssl genrsa -out key.pem 2048 
# 自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
nohup $GOPATH/bin/collidermain -port=8089 -tls=true  -room-server="https://47.94.57.236:8080" &

#同样检查是否成功
netstat -ntulp | grep collider
tcp6       0      0 :::8089                 :::*                    LISTEN      16864/collidermain

3、apprtc 房间服务器

配置文件修改(主要是配置apprtc对应的conturn和collider相关参数)

```shell
 vim /root/webrtc/apprtc/src/app_engine/constants.py
 #47.75.90.219 外网ip

 主要修改红色部分的IP,自己仔细看一下,别修改错误。

#编译
cd /root/webrtc/apprtc
npm install
grunt build
#如果出现 : No module named requests
```

> **错误: requests模块不存在**
 ##### 安装pip
>
> 下载setup-python工具
>
> ```shell
> # 有一行命令太长了,$开头的是一行命令
> $cd /root/webrtc
> $wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg  --no-check-certificate
> $chmod +x setuptools-0.6c11-py2.7.egg
> $./setuptools-0.6c11-py2.7.egg
> $wget https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz 
> $tar -xf pip-1.5.4.tar.gz
> $python setup.py install(如果不成功,则网上重新下载setuptools,然后在setuptools目录下下载就可以了)
> $pip install requests(在目录下安装 cd pip-数字,具体看自己版本 )
> #安装完成后再执行编译:
> #cd /root/webrtc/apprtc
> #grunt build

启动:

#172.24.159.143 : 内网ip
nohup dev_appserver.py --host=172.24.159.143 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check &

#检查
netstat -ntulp | grep 8080
#输出下列内容
tcp        0      0 172.31.4.236:8080       0.0.0.0:*               LISTEN      17032/python

以上基本实现服务器搭建成功,现在就可以访问服务器了:

http://47.94.57.236:8080,

可以在网页上面实现服务器了,如果网页打不开,应该是以上的软件没有搭建好,重新搭建,找错误可能 比较麻烦。

4、nginx

反向代理apprtc,使之支持https访问,如果http直接访问apprtc,则客户端无法启动视频音频采集(必须得用https访问)

在nginx目录执行

./configure --with-http_ssl_module
apt-get install libpcre3-dev
./configure --with-http_ssl_module
make install

配置nginx.conf

vim /usr/local/nginx/conf/nginx.conf

然后将下面代码放进去:

events {
 	worker_connections 1024;
}
http{
	upstream roomserver {
        server 47.94.57.236:8080;
	}
	server {
		listen 80;
		server_name 47.94.57.236;  
		return  301 https://$server_name$request_uri;
	}
	server {
		root /usr/share/nginx/html;
		index index.php index.html index.htm;
		listen      443 ssl;
		ssl_certificate /cert/cert.pem;
		ssl_certificate_key /cert/key.pem;
		server_name 47.94.57.236;
		location / {
			proxy_pass http://roomserver$request_uri;
			proxy_set_header Host $host;
		}
		location ~ .php$ {
			fastcgi_pass unix:/var/run/php5-fpm.sock;
			fastcgi_index index.php;
			include fastcgi_params;
		}
	}
}

只需要将ip改成自己公网的ip就可以了。

 启动:

/usr/local/nginx/sbin/nginx

以上,服务器可以打开摄像头和麦克风了。

可能会出现浏览器通话跨域问题:

Messages:Failed to start signaling: Failed to execute 'pushState' on 'History'

解决办法:

 vim /root/webrtc/apprtc/out/app_engine/js/appcontroller.js

加入:

#搜索  pushState 增加:
> roomLink=roomLink.substring("http","https");

就基本完成了,结果如下:

WebRTC使用Linux搭建服务器(一)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC使用Linux搭建服务器(二) 的相关文章

  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • PyQt5 - 无法使用 QVideoWidget 播放视频

    from PyQt5 QtWidgets import from PyQt5 QtMultimedia import from PyQt5 QtMultimediaWidgets import from PyQt5 QtCore impor
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen

随机推荐

  • vue常用指令

    常用指令 xff1a vue常用指令有 xff1a v html指令 v show指令 v if指令 v else指令 v else if指令 v for指令 v text指令 v bind指令 v on指令 v model指令等等 1 v
  • wsl的安装及迁移至其他盘

    安装 xff1a wsl是什么 xff1a 适用于Linux的Windows子系统 编辑 维基百科 xff0c 自由的百科全书 xff08 重定向自Windows Subsystem for Linux xff09 跳到导航跳到搜索 适用于
  • ubuntu 不能检测到显卡信息

    开始时 xff1a lspci grep 39 VGA 39 lspci grep 39 VGA 39 01 00 0 VGA compatible controller NVIDIA Corporation Device 2560 rev
  • 记录Vue项目中使用的各插件

    记录项目 package json 文件中各插件的使用 xff1a 目录 1 axios 2 babel polyfill 3 core js 4 echarts 5 element ui 6 es6 promise 7 js beauti
  • 看懂机器视觉(CV)\听懂语音识别(ASR)\理解自然语言处理(NLP)

    缩略语 机器视觉 xff08 CV xff09 Computer vision 语音识别 xff08 ASR xff09 Automatic Speech Recognition 自然语言处理 xff08 NLP xff09 Natural
  • zeal 文档下载及其离线文档下载

    下载地址 百度网盘 链接 xff1a https pan baidu com s 1r4d1OfrUTrbaZ9k9YfdWLA pwd 61 o7au 提取码 xff1a o7au 下载讲解 xff1a 1 下载安装 2 Tools gt
  • Linux系统部署JAVA项目

    Linux系统部署项目 一 准备工作 1 WinSCP 远程服务器可视化工具 2 Xshell5 linux服务器打命令用的 3 准备一台阿里云 华为云 腾讯云服务器 要求 xff1a 系统镜像centeOS7 0以上 二 开始搭建环境 1
  • Spring Boot 之---什么是热部署?---怎么使用?

    Spring Boot 之 什么是热部署 xff1f 怎么使用 xff1f 1 什么是热部署2 怎么启用热部署 xff08 1 xff09 手动配置 xff08 2 xff09 自动配置 总结 1 什么是热部署 所谓热部署 xff0c 就是
  • 什么是反向代理?

    正向代理 当客户端访问一台服务器有障碍 xff0c 访问不到的时候 xff0c 这时候就可以找一台可以访问到该服务器的另外一台服务器去代替他去访问 xff0c 这台代替他去访问的服务器称之为代理服务器 然后客户端就可以把请求发送给代理服务器
  • Java IO流 实现文件复制

    Java IO流 实现文件复制 思路 1 将指定文件转换成输入流 2 创建数组接收输入字节 3 将文件复制想要存放的轮径创建输出流 4 将输入流的字节输出出去 实现 span class token comment 创建输入和输出流 spa
  • Python之文件读写

    1 写文件 f 61 open 39 out txt 39 39 w 39 f write 39 s d d d d 0 0 0 0 0 0 0 39 bbx name bbx x bbx y bbx w bbx h f close 2 读
  • Java 基于TCP的socket实现文件传输

    Java 基于TCP的socket实现文件传输 基于TCP的socket结合java的io流 实现客户端与服务器之间的文件传输 Socket 套接字 xff08 socket xff09 是一个抽象层 xff0c 应用程序可以通过它发送或接
  • MySQL索引的创建与使用

    索引的分类 在学习如何创建索引之前 xff0c 先了解一下索引的分类 MySQL中分为 xff1a 普通索引 xff0c 唯一索引 xff0c 主键索引 xff0c 组合索引 xff0c 和全文索引 index name xff1a 索引名
  • ThreadLocal类

    ThreadLocal类 什么是ThreadLocal为什么ThreadLocal是线程安全的呢 什么是ThreadLocal ThreadLocal可以简单的理解为他其实就是一个工具类 xff0c 用来存储线程局部变量的一个工具类 xff
  • spring boot 访问HTML

    HTML整合spring boot 简介默认文件路径访问自定义文件路径访问 或通过Controller控制器层跳转访问 简介 SpringBoot默认的页面映射路径 xff08 即模板文件存放的位置 xff09 为 classpath te
  • HTML重定向解析ModelMap

    HTML实现重定向解析ModelMap 日常开发中 很多场景需要跳转页面 xff0c 又要携带参数 xff0c 重定向就可以起到很好的作用 业务场景 xff1a 登录成功后展示用户信息 登录页面输入用户名 密码进行登录访问 span cla
  • RHCE-ansible(一)--- 安装ansible、主机清单、sudo提权、特权升级

    目录 一 环境配置 1 配置三个主机 etc hosts 文件 xff0c 实现通过域名访问 2 配置SSH远程免密连接 2 1 在控制主机生成密钥 2 2 发送公钥到受控主机 二 受控主机 xff08 xixi xff09 安装ansib
  • 针对opencv导入Android studio不成功的解决办法?

    一 问题如下 xff1a AS gt File gt New gt Import Module 选择导入 压缩包路径 sdk java文件夹 xff0c 然后发现AS没有下一步 xff1f 二 解决办法 新建一个项目 在新建项目下创建一个包
  • Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)‘ on a

    问题简述 xff1a Attempt to invoke virtual method 39 void android widget TextView setText java lang CharSequence 39 on a null
  • WebRTC使用Linux搭建服务器(二)

    搭建服务器流程 xff1a 注意 xff1a 每个人搭建服务器可能会出现奇奇怪怪的问题 xff0c 照着我的方法可能会出现其他问题 xff0c 不要着急 xff0c 耐心搭建 xff0c 确实比较烦 1 安装JDK apt get upda