前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx 搭建RTMP视频点播 直播 HLS服务器

Nginx 搭建RTMP视频点播 直播 HLS服务器

作者头像
剧终
发布于 2020-12-15 03:54:58
发布于 2020-12-15 03:54:58
5.4K02
代码可运行
举报
文章被收录于专栏:Linux学习日志Linux学习日志
运行总次数:2
代码可运行

安装Nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--下载nginx-rtmp-module模块
git clone https://github.com/arut/nginx-rtmp-module.git

--安装依赖
yum install -y wget gcc gcc-c++ make pcre pcre-deve zilib zlib-devel openssl-devel

--下载Nginx源码包并解压
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

--编译安装
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --add-module=/nginx-rtmp-module/
make && make install

点播视频服务的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
include /usr/local/nginx/conf.d/*.conf;
http {
    include       mime.types;
    default_type  application/octet-stream;
}

--编辑子配置文件
vim /usr/local/nginx/conf.d/default.conf
rtmp {
  server {
  listen 8080;  #设置端口号
  chunk_size 4096;  #设置数据传输块的大小

application live {  
  play /usr/local/nginx/html/live;  #设置视频文件的位置
}
}
}

--上传一个视频文件
[root@localhost nginx]# ls /usr/local/nginx/html/live/
ckwlq.mp4

--重载配置文件
/usr/local/nginx/sbin/nginx -s reload
打开VLC软件

直播服务的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--编辑配置文件
vim /usr/local/nginx/conf.d/default.conf   #添加直播服务配置
rtmp {
  server {
  listen 8080;
  chunk_size 4096;

application video {    #配置直播服务
   live on;
}
application live {
  play /usr/local/nginx/html/live;
}
}
}

--重载配置文件
/usr/local/nginx/sbin/nginx -s reload

安装OBS工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
由于我用的是deepin系统,所以这里只演示deepin系统下的操作,windows系统百度下载OBS软件即可

--安装ffmpeg
sudo apt install ffmpeg

--安装OBS
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update
sudo apt install obs-studio

--运行OBS
root@linux:/# obs

使用OBS进行直播

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
点击右上角文件在点击设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
点击来源的 + 号选择 `屏幕捕抓(XSHM)`
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
点击开始推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
设置VLC播放的地址 rtmp://172.16.0.160:8080/video

实时回放视频服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
include /usr/local/nginx/conf.d/*.conf;
http {
    include       mime.types;
    default_type  application/octet-stream;
server {
  listen 80;
  server_name localhost;

 location /live {   #这里也是需要添加的字段
   types {  
   application/vnd.apple.mpegurl m3u8;  
   video/mp2t ts;  
}
  alias /usr/local/nginx/html/live;   
  expires -1;
  add_header Cache-Control no-cache;  
}  
}
}


--编辑子配置文件
vim /usr/local/nginx/conf.d/default.conf   #添加直播服务配置
rtmp {
  server {
  listen 8080;
  chunk_size 4096;

application live {    #配置直播服务
   live on;
   hls on;   #设置回放视频服务
   hls_path  /usr/local/nginx/html/live;  #设置切片视频文件存放位置
   wait_key on;   #对视频切片进行保护,这样就不会产生马赛克了
   hls_fragment 10s;  #设置HLS 分段长度
   hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟
   hls_continuous on; #连续模式
   hls_cleanup on;    #对多余的切片进行删除
   hls_nested on;     #嵌套模式
}
application video {
  play /usr/local/nginx/html/video;
}
}
}

--创建切片视频文件存放文件夹
[root@host1 /]# mkdir /usr/local/nginx/html/live/

--重启nginx
/usr/local/nginx/sbin/nginx -s reload
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用obs设置提流地址进行直播
验证
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--查看是否产生切片视频文件
[root@host1 html]# ls live/
0.ts  1.ts  2.ts  3.ts  4.ts  5.ts  index.m3u8

数据统计模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数据统计模块是http 模块,因此统计命令应该位于http 模块中
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--编辑主配置文件,添加以下配置
[root@host1 /]# vim /usr/local/nginx/conf/nginx.conf
location /livestatus {
  rtmp_stat all;
  rtmp_stat_stylesheet stat.xsl; #将流媒体的状态全部记录到'stat.xsl'}
location /stat.xsl {
  root /nginx-rtmp-module/;
}

--重载配置文件
/usr/local/nginx/sbin/nginx -s reload
验证
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
浏览器访问'http://172.16.0.160/livestatus'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Node.js 多进程(下)
child_process.spawn 使用指定的命令行参数创建新进程,语法格式如下:
陈不成i
2021/07/13
5220
Node.js 多进程(上)
我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。
陈不成i
2021/07/13
7290
深入理解Node.js的进程与子进程
process 模块是 nodejs 提供给开发者用来和当前进程交互的工具,它的提供了很多实用的 API。从文档出发,管中窥豹,进一步认识和学习 process 模块:
coder2028
2022/10/03
2.1K0
深入了解 Node 的多进程服务
我们现在已经知道了Node是单线程运行的,这表示潜在的错误有可能导致线程崩溃,然后进程也会随着退出,无法做到企业追求的稳定性;另一方面,单进程也无法充分多核CPU,这是对硬件本身的浪费。Node社区本身也意识到了这一问题,于是从0.1版本就提供了child_process模块,用来提供多进程的支持。
用户8921923
2022/10/24
8160
Node.js进阶之进程与线程
进程与线程在服务端研发中是一个非常重要的概念,如果您在学习的时候对这一块感到混乱或者不是太理解,可以阅读下本篇内容,本篇在介绍进程和线程的概念之外,列举了很多 Demo 希望能从实战角度帮助您更好的去理解。
五月君
2019/07/12
1.2K0
Node.js进阶之进程与线程
node.js 中的进程和线程工作原理
进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位,操作系统的其他所有内容都是围绕着进程展开的
ACK
2024/09/18
1520
node.js 中的进程和线程工作原理
NodeJS模块研究 - child_process
掌握 nodejs 的 child_process 模块能够极大提高 nodejs 的开发能力,例如主从进程来优化 CPU 计算的问题,多进程开发等等。本文从以下几个方面介绍 child_process 模块的使用:
心谭博客
2020/04/21
1.3K0
Node.js快速入门
下载最新版源码:https://nodejs.org/dist/v6.9.5/node-v6.9.5.tar.gz
程裕强
2022/05/06
11.7K0
Node.js开发多进程应用
使用child_process模块可以开启多个子进程,在多个子进程之间可以共享内存空间,可以通过子进程之间的互相通信来实现信息的交换,多个子进程之间也可以通过共享端口的方式将请求分配给多个子进程来执行。
用户1515472
2019/07/24
1.5K0
Nodejs进阶:如何玩转子进程(child_process)
本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 模块概览 在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大
IMWeb前端团队
2018/01/08
4.4K0
分享 10 道 Nodejs 进程相关面试题
关于线程和进程是服务端一个很基础的概念,在文章 Node.js进阶之进程与线程 中介绍了进程与线程的概念之后又给出了在 Node.js 中的进程和线程的实际应用,对于这块不是很理解的建议先看下。
胡哥有话说
2019/08/29
1.4K0
分享 10 道 Nodejs 进程相关面试题
Nodejs进阶:如何玩转子进程(child_process)
在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。熟悉shell脚本的同学,可以用它来完成很多有意思的事情,比如文件压缩、增量部署等,感兴趣的同学,看文本文后可以尝试下。
IMWeb前端团队
2019/12/05
3.4K0
深入理解Node.js 进程与线程(8000长文彻底搞懂)
进程与 线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有真的理解,在实际开发中应用也比较少。本篇文章除了介绍概念,通过Node.js 的角度讲解 进程与 线程,并且讲解一些在项目中的实战的应用,让你不仅能迎战面试官还可以在实战中完美应用。
coder_koala
2019/08/08
2.7K0
深入理解Node.js 进程与线程(8000长文彻底搞懂)
Node.js中的进程与线程
1. 回顾进程和线程的定义 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 2. Node.js的单线程 Node特点主线程是单线程的 一个进程只开一个主线程,基于事件驱动的、异步非阻塞I/O,可以应用于高并发场景。 Nodejs中没有多线程,为了充分利用多核cpu,可以使用子进程实现内核的负载均衡,那我们就要解决以下问题: Node.js 做耗
用户1097444
2022/06/29
1.3K0
Node.js中的进程与线程
【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
cluster模块是node.js中用于实现和管理多进程的模块。常规的node.js应用程序是单线程单进程的,这也意味着它很难充分利用服务器多核CPU的性能,而cluster模块就是为了解决这个 问题的,它使得node.js程序可以以多个实例并存的方式运行在不同的进程中,以求更大地榨取服务器的性能。node.js在官方示例代码中使用worker实例来表示主进程fork出的子进程,使得前端开发者在学习过程中非常容易和浏览器环境中的worker实现的多线程混淆。为了容易区分,我们和node官方文档使用一致的名称,用集群中的master和worker来区分主进程和工作进程,用worker_threads来描述工作线程。
大史不说话
2019/06/02
1.1K0
分享 10 道 Nodejs 进程相关面试题
关于线程和进程是服务端一个很基础的概念,在文章 Node.js进阶之进程与线程 中介绍了进程与线程的概念之后又给出了在 Node.js 中的进程和线程的实际应用,对于这块不是很理解的建议先看下。
五月君
2019/07/12
1.1K0
分享 10 道 Nodejs 进程相关面试题
nodejs几种创建子进程的区别
启动一个子进程来执行命令,但可以有一个回调函数获取子进程的一些情况。可以设置超时时间。进程类型任意
ACK
2020/01/14
2.1K0
nodejs几种创建子进程的区别
在nodejs中创建child process
nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建新的线程来执行自己的任务。
程序那些事
2021/01/28
4.1K0
《深入浅出Node.js》-玩转进程
Node 基于 V8 引擎构建,采用单线程模型,所有的 JavaScript 将会运行在单个进程的单个线程上,它带来的好处是:没有多线程中常见的锁以及线程同步的问题,操作系统在调度时也能减少上下文切换,提高 CPU 使用率。但是如今 CPU 基本均是多核的,真正的服务器往往还有多个 CPU,一个 Node 进程只能利用一个核,这带来硬件资源的浪费。另外,Node 运行在单线程之上,一个单线程抛出异常而没有被捕获,将会导致进程的崩溃。
李振
2021/11/26
8190
《深入浅出Node.js》-玩转进程
理解NodeJS多进程
一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。
coder2028
2022/10/10
1.2K0
相关推荐
Node.js 多进程(下)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档