nginx搭建直播推流服务
文章目录
- 学习链接
- 步骤
- 使用nginx搭建直播推流服务
- 安装依赖库
- 下载nginx-http-flv-module模块
- 下载nginx
- 解压nginx,进入nginx目录
- 设置nginx编译配置
- 编译并安装
- 配置nginx rtmp服务
- 启动nginx
- 准备另外一台电脑下载OBS
- 下载OBS
- windows | linux 安装vlc观看直播
- flv协议
- hls协议
- 使用ffmpeg命令行推流
学习链接
Linux系统使用Nginx搭建直播服务 | ffmpeg直播推流 | OBS直播 - B站视频
zzhua/live gitee代码(包括linux和windows版本:nginx配置文件&nginx源码安装包和nginx-http-flv-module源码模块)
Windows搭建Nginx直播推流服务器
全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)
步骤
1、nginx配置添加nginx-http-flv-module模块,并配置rtmp服务
2、nginx的rtmp服务配置flv应用,开启live
3、开启obs,设置推流地址 rtmp://192.168.134.3:8002/flv,推流码 test
4、vlc可以打开网络串流 rtmp://192.168.134.3:8002/flv/test
5、nginx的监听80端口的server服务配置live,开启flv_live
6、web页面引入flv.js,可以使用 http://192.168.134.3/live?port=8002&app=flv&stream=test (适合直播)
(也可以使用ffmpeg将本地桌面或本地视频流推送到rtmp://192.168.134.3:8002/flv/test,使用上述方式播放)
7、nginx的rtmp服务配置flv应用,开启live,开启hls,设置hls_path路径
8、开启obs,设置推流地址 rtmp://192.168.134.3:8002/hls,推流码 test,开启后,会在hls_path路径下生成test.m3u8文件和xxx.ts文件
9、vlc可以打开网络串流 rtmp://192.168.134.3:8002/hls/test
10、nginx的监听80端口的server服务配置location为/hls,访问路径指到hls_path路径
11、web页面引入videojs,可以使用 http://192.168.134.3/hls/test.m3u8 播放m3u8视频(适合点播)
(也可以使用ffmpeg将本地桌面或本地视频流推送到rtmp://192.168.134.3:8002/hls/test,使用上述方式播放)
使用nginx搭建直播推流服务
安装依赖库
sudo apt-get update
sudo apt-get install build-essential libpcre3-dev zlib1g-dev libssl-dev
下载nginx-http-flv-module模块
- https://github.com/winshining/nginx-http-flv-module
在github中选择master分支下载nginx-http-flv-module模块源码,下载完解压后修改文件夹名称为【nginx-http-flv-module】
sudo wget -O /usr/local/nginx-http-flv-module.zip https://github.com/winshining/nginx-http-flv-module/archive/refs/heads/master.zip
下载nginx
sudo wget -P /usr/local https://nginx.org/download/nginx-1.24.0.tar.gz
解压nginx,进入nginx目录
tar -zxvf nginx-1.24.0.tar.gz
cd ./nginx-1.24.0
设置nginx编译配置
./configure \--with-http_ssl_module \--with-stream \--with-stream_ssl_module \--add-module=/usr/local/nginx-http-flv-module
编译并安装
make && make install
配置nginx rtmp服务
# nginx.config 中追加配置,rtmp与http配置同级
user root;
rtmp {server {listen 8002;chunk_size 4000;application flv {live on;#allow publish 127.0.0.1;allow play all;gop_cache on;}application hls {live on;hls on;hls_path /home/winter/html/hls; }}
}http {include mime.types;default_type application/octet-stream;sendfile off;server_names_hash_bucket_size 128;client_body_timeout 10;client_header_timeout 10;keepalive_timeout 30;send_timeout 10;keepalive_requests 10;server {listen 80;server_name localhost;add_header Access-Control-Allow-Credentials true;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,tenantappid';if ($request_method = 'OPTIONS') {return 200;}location /live {flv_live on; chunked_transfer_encoding on;}location /hls {root /home/winter/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
启动nginx
# 检查配置
/usr/local/nginx/sbin/nginx -t
# 启动
/usr/local/nginx/sbin/nginx
# 停止
/usr/local/nginx/sbin/nginx -s stop
# 重启
/usr/local/nginx/sbin/nginx -s reload
准备另外一台电脑下载OBS
下载OBS
- 官方的下载地址很慢,推荐到清华大学镜像下载https://mirrors.tuna.tsinghua.edu.cn/github-release/obsproject/obs-studio/
windows | linux 安装vlc观看直播
sudo apt install vlc -y
flv协议
- 打开OBS设置,直播菜单,服务:自定义,服务器:rtmp://192.168.1.8:8002/flv(ip地址替换为nginx服务所在的ip),密钥:test
- 开始直播
- 打开vlc左上角菜单媒体,选择【打开网络串流】菜单,输入 rtmp://192.168.1.8:8002/flv/test 观看直播
- 创建一个html文件观看直播
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Demo</title><!-- https://bilibili.github.io/flv.js/ --><script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.6.2/flv.min.js"></script><style>body {margin: 0;}#video {width: 100%;height: 100vh;}</style>
</head>
<body>
<video id="video" src="" muted autoplay="false" controls></video>
<script>const videoElement = document.getElementById('video');const flvPlayer = flvjs.createPlayer({type: 'flv',url: 'http://192.168.1.8/live?port=8002&app=flv&stream=test'});flvPlayer.attachMediaElement(videoElement);flvPlayer.load();flvPlayer.play();
</script>
</body>
</html>
hls协议
- 打开OBS设置,直播菜单,服务:自定义,服务器:rtmp://192.168.1.8:8002/hls(ip地址替换为nginx服务所在的ip),密钥:test
- 开始直播
- 打开vlc左上角菜单媒体,选择【打开网络串流】菜单,输入 rtmp://192.168.1.8:8002/hls/test 观看直播
- 创建一个html文件观看直播
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Demo</title><!-- 文档地址 https://videojs.com/getting-started --><link href="https://cdn.bootcdn.net/ajax/libs/video.js/7.7.1/video-js.min.css" rel="stylesheet"><script src="https://cdn.bootcdn.net/ajax/libs/video.js/7.7.1/video.min.js"></script><style>body {margin: 0;}.video-js .vjs-big-play-button {top: 50%;margin-top: -45px;left: 50%;margin-left: -44px;}#video {width: 100%;height: 100vh;}</style>
</head>
<body>
<video id="video" class="video-js vjs-default-skin" src="" muted autoplay="false" controls></video>
<script>const playerOptions = {playbackRates: [0.7, 1.0, 1.5, 2.0],autoplay: false, // 如果true,浏览器准备好时开始回放。muted: true, // 默认情况下将会消除任何音频。loop: false,preload: 'false', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)notSupportedMessage: "此视频暂无法播放,请稍后再试", // 允许覆盖Video.js无法播放媒体源时显示的默认信息。poster: '',sources: [{type: 'application/x-mpegURL',src: 'http://192.168.1.8/hls/test.m3u8' //视频流地址}],}const videoDom = document.querySelector('#video')let $player = videojs(videoDom, playerOptions, function onPlayerReady() {console.log('播放器已经准备好了!')this.on('loadstart', function () {console.log('loadstart------------')})this.on('loadedmetadata', function () {console.log('loadedmetadata---视频源数据加载完成----')})this.on('loadeddata', function () {console.log('loadeddata---渲染播放画面----'); //autoPlay必须为false// $player.play()})})
</script>
</body>
</html>
使用ffmpeg命令行推流
# 查看本地的音视频硬件
D:\myapp\ffmpeg\bin\ffmpeg.exe -list_devices true -f dshow -i dummy
# 推送视频
D:\myapp\ffmpeg\bin\ffmpeg.exe -i C:\Users\Mr_Li\Desktop\1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.1.8:8002/flv/test
# 推送摄像头、音频
D:\myapp\ffmpeg\bin\ffmpeg.exe -f dshow -i audio="麦克风阵列 (适用于数字麦克风的英特尔® 智音技术)" -thread_queue_size 1024 -f dshow -i video="Integrated Camera" -s 480x320 -vcodec libx264 -acodec aac -f flv rtmp://192.168.1.8:8002/flv/test
# 推送系统桌面
D:\myapp\ffmpeg\bin\ffmpeg.exe -f gdigrab -i desktop -vcodec libx264 -f flv rtmp://192.168.1.8:8002/flv/test
- ffmpeg下载地址https://github.com/BtbN/FFmpeg-Builds/releases 选择【ffmpeg-n7.0-latest-win64-lgpl-7.0.zip】
相关文章:
nginx搭建直播推流服务
文章目录 学习链接步骤使用nginx搭建直播推流服务安装依赖库下载nginx-http-flv-module模块下载nginx解压nginx,进入nginx目录设置nginx编译配置编译并安装配置nginx rtmp服务启动nginx 准备另外一台电脑下载OBS下载OBS windows | linux 安装vlc观看直播flv协议hls协…...
单片机-- 松瀚sonix学习过程
硬件:松瀚sn8f5701sg、SN-LINK 3 Adapter模拟器、sn-link转接板 软件: keil-c51(v9.60):建立工程,编辑,烧录程序 SN-Link_Driver for Keil C51_V3.00.005:安装sonix设备包和snlin…...
循环神经网络:从基础到应用的深度解析
🍛循环神经网络(RNN)概述 循环神经网络(Recurrent Neural Network, RNN)是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络,RNN具有内存单元,能够捕捉序列中前后信息…...
从扩散模型开始的生成模型范式演变--SDE
SDE是在分数生成模型的基础上,将加噪过程扩展时连续、无限状态,使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后,本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…...
【python使用kazoo连ZooKeeper基础使用】
from kazoo.client import KazooClient, KazooState from kazoo.exceptions import NoNodeError,NodeExistsError,NotEmptyError import json# 创建 KazooClient 实例,连接到 ZooKeeper 服务器 zk KazooClient(hosts127.0.0.1:2181) zk.start()# 定义节点路径 path…...
【设计模式系列】解释器模式(十七)
一、什么是解释器模式 解释器模式(Interpreter Pattern)是一种行为型设计模式,它的核心思想是分离实现与解释执行。它用于定义语言的文法规则,并解释执行语言中的表达式。这种模式通常是将每个表达式抽象成一个类,并通…...
只出现一次的数字
只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 ÿ…...
SpringMVC-08-json
8. Json 8.1. 什么是Json JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写…...
技术文档的语言表达
技术文档的语言表达 在这个瞬息万变的技术世界中,了解如何撰写有效的技术文档显得尤为重要。无论是开发团队还是最终用户,清晰、简洁且有条理的文档都是连接各方的桥梁。本文将深入探讨技术文档的语言表达,从其重要性、写作原则到各种类型&a…...
UEFI 事件
UEFI 不再支持中断(准确地说,UEFI 不再为开发者提供中断支持,但在UEFI内部还是使用了时钟中断),所有的异步操作都要通过事件(Event)来完成。 启动服务为开发者提供了用于操作事件、定时器及TPL…...
大师开讲-图形学领域顶级专家王锐开讲Vulkan、VSG开源引擎
王锐,毕业于清华大学,图形学领域顶级专家,开源技术社区的贡献者与推广者。三维引擎OpenSceneGraph的核心基石开发者与维护者,倾斜摄影数据格式osgb的发明人。著有《OpenSceneGraph 3 Cookbook》,《OpenSceneGraph 3 Beginers Guid…...
小F的矩阵值调整
问题描述 小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数,则该值变为它的三倍;如果是奇数,则保持不变。小F想知道调整后的矩阵是什么样子的。 测试样例 样例1: 输入:a [[1, 2, 3], [4, 5, 6]] 输出:…...
ORB-SLAM2 ----- LocalMapping::SearchInNeighbors()
文章目录 一、函数意义二、函数讲解三、函数代码四、本函数使用的匹配方法ORBmatcher::Fuse()1. 函数讲解2. 函数代码 四、总结 一、函数意义 本函数是用于地图点融合的函数,前面的函数生成了新的地图点,但这些地图点可能在前面的关键帧中已经生成过了&a…...
给UE5优化一丢丢编辑器性能
背后的原理 先看FActorIterator的定义 /*** Actor iterator* Note that when Playing In Editor, this will find actors only in CurrentWorld*/ class FActorIterator : public TActorIteratorBase<FActorIterator> {//..... }找到基类TActorIteratorBase /*** Temp…...
【Docker】常用命令汇总
Docker 是1个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相…...
Mybatis:CRUD数据操作之多条件查询及动态SQL
Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1,编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数,…...
【笔记】轻型民用无人驾驶航空器安全操控
《轻型民用无人驾驶航空器安全操控》 理论考试培训材料 法规部分 【民用无人驾驶航空器的分类】 1、如何定义微型、轻型无人驾驶航空器? 微型无人驾驶航空器,是指空机重量小于0.25千克,最大平飞速度不超过40千米/小时,无线电发…...
TouchGFX设计模式代码实例说明
一)Model - View - Presenter (MVP) 模式在 TouchGFX 中的应用 1)Model(模型): 模型代表应用程序的数据和业务逻辑。例如,在一个简单的计数器应用中,模型可以是一个包含计数器当前值的类。 class CounterModel { pri…...
flink学习(7)——window
概述 窗口的长度(大小): 决定了要计算最近多长时间的数据 窗口的间隔: 决定了每隔多久计算一次 举例:每隔10min,计算最近24h的热搜词,24小时是长度,每隔10分钟是间隔。 窗口的分类 1、根据window前是否调用keyBy分为键控窗口和非键控窗口…...
restTemplate get请求
报错解释: 这个报错信息表明在使用RestTemplate进行GET请求时,需要提供一个请求类型(reqType),但是传入的值为空。这通常意味着在构建请求或者调用方法时,没有正确设置请求的Content-Type头部,…...
AI辅助开发实战:基于CosyVoice和LeeZhao的智能代码生成优化
在AI辅助开发的浪潮中,我们这些开发者既兴奋又头疼。兴奋的是,动动嘴皮子或者写几句描述,AI就能帮我们生成代码框架,大大提升了效率。头疼的是,生成的代码常常“驴唇不对马嘴”,要么上下文理解跑偏…...
nlp_structbert_sentence-similarity_chinese-large保姆级教程:前端React界面二次开发与定制化UI集成指南
nlp_structbert_sentence-similarity_chinese-large保姆级教程:前端React界面二次开发与定制化UI集成指南 1. 引言:为什么需要定制化UI? 如果你已经体验过基于StructBERT-Large的语义相似度工具,可能会发现它的基础界面虽然功能…...
多智能体概述
一、多智能体概述 多智能体系统通过协调多个专职智能体或组件来完成复杂流程。并非所有复杂任务都需要多智能体——单个智能体配合合适的工具与提示词往往就够用。我们何时采用多智能体模式更有价值,以及 AgentScope 支持哪些模式? 1、为什么要用多智能体…...
vLLM-v0.17.1GPU算力适配:华为昇腾CANN 7.0与vLLM对接可行性验证
vLLM-v0.17.1 GPU算力适配:华为昇腾CANN 7.0与vLLM对接可行性验证 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)最初开发,现已发展成为学术界和工业…...
【一键养龙虾】阿里云OpenClaw快速部署方案,两步拥有专属龙虾AI助理!
还在羡慕别人拥有能“动手干活”的AI数字员工吗?还在为复杂的本地环境配置、端口映射和依赖冲突而头疼吗?别急,阿里云推出了OpenClaw快速部署方案,官方镜像一键部署,只需两步,轻松拥有专属“龙虾AI”助理&a…...
GTE文本向量模型部署全攻略:从零到一搭建企业级文本处理服务
GTE文本向量模型部署全攻略:从零到一搭建企业级文本处理服务 1. 项目介绍与核心价值 如果你正在寻找一个能一站式解决中文文本分析难题的工具,那么GTE文本向量模型可能就是你的答案。想象一下,一个模型就能帮你识别文档里的关键人物、地点&…...
三步解锁Degrees of Lewdity中文本地化版本无缝体验:完整指南
三步解锁Degrees of Lewdity中文本地化版本无缝体验:完整指南 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localizati…...
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理 你是不是也遇到过这样的情况:好不容易找到一个功能强大的视觉语言大模型,比如最近挺火的Ostrakon-VL-8B,结果一看显存要求,直接傻眼了——动辄需要几十个G的显存…...
实战案例:用Fish Speech 1.5为视频添加多语言配音
实战案例:用Fish Speech 1.5为视频添加多语言配音 1. 引言:视频配音的新选择 在视频制作过程中,配音往往是耗时耗力的环节。传统配音需要专业录音棚、配音演员和后期处理,成本高且周期长。Fish Speech 1.5的出现为视频创作者提供…...
若依分离版集成Activiti7:从零构建企业级流程中心
1. 环境准备与版本兼容性检查 在开始整合之前,我们需要先确认几个关键点。若依分离版是基于SpringBoot的前后端分离架构,而Activiti7作为新一代工作流引擎,两者整合最需要注意的就是版本兼容性。我去年在金融项目里就遇到过因为版本不匹配导致…...
