Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试

news2025/4/22 10:59:06

所需下载地址:

通过网盘分享的文件:rtmp
链接: https://pan.baidu.com/s/1t21J7cOzQR1ASLrsmrYshA?pwd=0000 提取码: 0000 

window:

解压 win目录下的 nginx-rtmp-module-1.2.2.zip和nginx 1.7.11.3 Gryphon.zip安装包,解压时选择 解压到 nginx-rtmp-module-1.2.2 或者  nginx 1.7.11.3 Gryphon (这样是带目录结构的!)

将解压后的 nginx-rtmp-module-1.2.2 移动到 nginx 1.7.11.3 Gryphon 目录下

在conf目录下新建nginx.conf配置文件,记录最好用文版编辑工具(notepad++.exe 等)UTF-8 编码,内容如下:

记得手动创建  流媒体文件存储目录 D:/tmp/hls D:/tmp/av

worker_processes  2;
 
events {
    worker_connections  1024;
}
 
#RTMP服务
rtmp {
	server { 
		listen		1935;	#监听端口
		chunk_size	4096;	#数据传输块大小
		#application live{	#创建名为"live"的应用
		#  live on;
		#}
		application my_live {  # 创建rtmp应用hls
			live on;  # 当路径匹配时,开始播放
			# 记录所有发布的流。
			record all;
			# 指定录制文件的存储路径为 /tmp/av。
			record_path D:/tmp/av;
			# 设置每个录制文件的最大大小为 1KB。
			record_max_size 10M;
            # 记录文件的扩展名
            record_suffix .flv;
			# 为每个录制文件添加当前时间戳,确保文件名唯一。
			record_unique on;
			# 只允许本地主机(127.0.0.1)发布流。
			allow publish all;
			# 允许所有客户端播放
			allow play all;
			#HLS协议进行m3u8实时直播.如果是http-flv不需要配置下面的
			wait_key on;#保护TS切片
			hls on;  #实时回访
			hls_nested on;#每个流都自动创建一个文件夹
			hls_path D:/tmp/hls; #媒体块ts的位置
			hls_fragment 5s; #每个ts文件为5s的样子
			hls_playlist_length 30s;  #保存m3u8列表长度时间,默认是30秒,可考虑三小时10800秒
			hls_cleanup off; #是否删除列表中已经没有的媒体块TS文件,默认是开启
			hls_continuous on; #连续模式
       	}
    }
}
 
#HTTP服务,可以通过浏览器访问 http://localhost:9091/stat 查看服务器状态(9091为你配置的端口号,可以自由设置)
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout  65;
	
	# 定义内网 IP 段
    geo $internal {
        default 0;
        10.0.0.0/8 1;
        172.16.0.0/12 1;
        192.168.0.0/16 1;
    }
	
    server {
        listen       9091;
        server_name  localhost;
		
		location /stat {
			rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
			# 仅允许内网访问
            if ($internal = 0) {
                return 403;
            }
		}
 
		location /stat.xsl { 
			root ./nginx-rtmp-module-1.2.2/;	#rtmp拓展包目录
		}
 
        #location / {
        #    root   html;
        #    index  index.html index.htm;
		#	 add_header Access-Control-Allow-Origin *; # 配置跨域
        #    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
        #    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        #}

		#location /control {
		#	rtmp_control all;
			# 仅允许内网访问
        #    if ($internal = 0) {
        #        return 403;
        #    }
		#}

		#location /rtmp-publisher {
		#	root nginx-rtmp-module/test;
		#}
		#加入hls支持
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8; 
                #或 application/x-mpegURL
                video/mp2t ts;
            }
            alias D:/tmp/hls;  #视频流文件目录(自己创建)
            expires -1;
            add_header Cache-Control no-cache; #跨域支持
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
            add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}                             

然后使用 win+r 打开cmd窗口,找到 nginx.exe 目录 ,输入 nginx 运行nginx,此时在window rtmp流媒体服务搭建完成。

验证:安装 vlc-3.0.21-win64 和 OBS-Studio-31.0.2-Windows-Installer 

安装完成后 按照以下截图进行验证,分享系统了一个DY短视频,可以用作测试

打开OBS

点击左上角 文件 -> 设置 -> 直播:

输入服务器地址:rtmp默认端口为:1935,所以不需要指定端口,比如我的IP是192.168.0.100

rtmp://192.168.0.100/my_live    (my_live 是nginx配置得 application的名称)

推流码一般为自定义的唯一值,可以自定义输入,方便后续开启直播时使用,输入完成后点击应用、确定

鼠标右键添加 VLC视频源

添加提供的video.mp4 文件 或者 自己下载的视频文件都可

点击 开始直播,鼠标放到视频画面上可以上下左右拖动直播时画面显示位置,默认靠左

打开 VLC media player 

点击 媒体 -> 打开网络串流,输入

rtpm://192.168.0.100/my_live/test  

你的IP,你配置的 application my_live(应用名称),test: 在obs设置的推流码 一般是唯一值, 如果可以正常播放,表示流媒体搭建完成了

使用自定义html测试

<!DOCTYPE html>
<html>
<head>
    <title>直播测试</title>
    <!-- 引入 HLS.js 和 FLV.js 播放器库 -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.10.2/video-js.min.css" rel="stylesheet">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.10.2/video.min.js"></script>
</head>
<body>
    <h2>HLS 直播</h2>
    <video id="hlsPlayer" class="video-js vjs-default-skin" controls width="800"></video>
    <script>
        // 配置参数
        const SERVER_IP = "192.168.0.100:9091"; // 例如 "192.168.1.100"
        const STREAM_KEY = "test"; // 推流时设置的流名称,例如 "mystream"

        // ========================= HLS 播放 =========================
        const hlsPlayer = videojs('hlsPlayer', {
            autoplay: true,
            controls: true,
            sources: [{
                // 注意这里修改了路径,增加了流名称的子文件夹
                src: `http://${SERVER_IP}/hls/${STREAM_KEY}/index.m3u8`, 
                type: 'application/x-mpegURL'
            }]
        });

    </script>
</body>
</html>

linux安装流媒体:

将linux目录下的文件上传到对应的服务器,解压,目录结构win一样,我是把 nginx-rtmp-module-1.2.2目录 重命名为 nginx-rtmp-module ,所以我的安装命令是  --add-module=./nginx-rtmp-module

配置文件和测试原理一样,记得把文件路径修改为linux目录下的,需要自行创建目录,并且赋予权限,nginx linux下运行的用户需要拥有目录权限才行,如果是root也需要自行创建目录 给予权限

执行以下命令进行安装

# centos命令,ubuntu自行转换即可  记得修改 --add-module=./nginx-rtmp-module 目录名称

mkdir /tmp/av /tmp/hls

sudo chmod 600 /tmp/av

sudo chmod 600 /tmp/hls 

yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel 

./configure --prefix=/usr/local/nginx --add-module=./nginx-rtmp-module  --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-pcre

make && make install

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lateral 查询详解:概念、适用场景与普通 JOIN 的区别

1. 什么是Lateral查询&#xff1f; Lateral查询&#xff08;也称为横向关联查询&#xff09;是一种特殊的子查询&#xff0c;允许子查询中引用外层查询的列&#xff08;即关联引用&#xff09;&#xff0c;并在执行时逐行对外层查询的每一行数据执行子查询。 语法上通常使用关…

【springsecurity oauth2授权中心】简单案例跑通流程 P1

项目被拆分开&#xff0c;需要一个授权中心使得每个项目都去授权中心登录获取用户权限。而单一项目里权限使用的是spring-security来控制的&#xff0c;每个controller方法上都有 PreAuthorize("hasAuthority(hello)") 注解来控制权限&#xff0c;想以最小的改动来实…

spark—SQL3

连接方式 内嵌Hive&#xff1a; 使用时无需额外操作&#xff0c;但实际生产中很少使用。 外部Hive&#xff1a; 在虚拟机下载相关配置文件&#xff0c;在spark-shell中连接需将hive-site.xml拷贝到conf/目录并修改url、将MySQL驱动copy到jars/目录、把core-site.xml和hdfs-sit…

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板&#xff0c;以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络&#xff0c;而宽带通信系统正在努力满…

linux学习 5 正则表达式及通配符

重心应该放在通配符的使用上 正则表达式 正则表达式是用于 文本匹配和替换 的强大工具 介绍两个交互式的网站来学习正则表达式 regexlearn 支持中文 regexone 还有一个在线测试的网址 regex101 基本规则 符号作用示例.匹配任何字符除了换行a.b -> axb/a,b[abc]匹配字符…

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention 随着人工智能技术的飞速发展&#xff0c;回归预测任务在很多领域得到了广泛的应用。尤其在金融、气象、医疗等领域&#xff0c;精确的回归预测模型能够为决策者提供宝贵的参考信息。为…

Android RK356X TVSettings USB调试开关

Android RK356X TVSettings USB调试开关 平台概述操作-打开USB调试实现源码补充说明 平台 RK3568 Android 11 概述 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能处理器&#xff0c;支持 USB OTG&#xff08;On-The-Go&#xff09;和 USB Host 功能。US…

消息队列知识点详解

消息队列场景 什么是消息队列 可以把消息队列理解一个使用队列来通信的组件&#xff0c;它的本质是交换机队列的模式&#xff0c;实现发送消息&#xff0c;存储消息&#xff0c;消费消息的过程。 我们通常说的消息队列&#xff0c;MQ其实就是消息中间件&#xff0c;业界中比较…

序列号绑定的SD卡坏了怎么办?

在给SD卡烧录程序的时候&#xff0c;大家发现有的卡是无法烧录的&#xff0c;如&#xff1a;复印机的SD卡不能被复制通常涉及以下几个技术原因&#xff0c;可能与序列号绑定、加密保护或硬件限制有关&#xff1a; 一、我们以复印机的系统卡为例来简单讲述一下 序列号或硬件绑定…

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南

使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、SystemWeaver与SOME/IP基础认知 1.1 SystemWe…

Flutter 状态管理 Riverpod

Android Studio版本 Flutter SDK 版本 将依赖项添加到您的应用 flutter pub add flutter_riverpod flutter pub add riverpod_annotation flutter pub add dev:riverpod_generator flutter pub add dev:build_runner flutter pub add dev:custom_lint flutter pub add dev:riv…

【HarmonyOS 5】VisionKit人脸活体检测详解

【HarmonyOS 5】VisionKit人脸活体检测详解 一、VisionKit人脸活体检测是什么&#xff1f; VisionKit是HamronyOS提供的场景化视觉服务工具包。 华为将常见的解决方案&#xff0c;通常需要三方应用使用SDK进行集成。华为以Kit的形式集成在HarmoyOS系统中&#xff0c;方便三方…

Pycharm(九)函数的闭包、装饰器

目录 一、函数参数 二、闭包 三、装饰器 一、函数参数 def func01():print("func01 shows as follows") func01() # 函数名存放的是函数所在空间的地址 print(func01)#<function func01 at 0x0000023BA9FC04A0> func02func01 print(func02)#<function f…

【深度学习】详解矩阵乘法、点积,内积,外积、哈达玛积极其应用|tensor系列02

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a;【深度学习】你真的理解张量了吗&#xff1f;|标量、向量、矩阵、张量的秩|01每日一言&#x1f33c;: “脑袋想不明白的&#xff0c;就用脚想”…

MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用

CoreMark 1.0 介绍 CoreMark 是由 EEMBC&#xff08;Embedded Microprocessor Benchmark Consortium&#xff09;组织于 2009 年推出的一款用于衡量嵌入式系统 CPU 或 MCU 性能的标准基准测试工具。它旨在替代陈旧的 Dhrystone 标准&#xff08;Dhrystone 容易受到各种libc不同…

Flowith AI,解锁下一代「知识交易市场」

前言 最近几周自媒体号都在疯狂推Manus&#xff0c;看了几篇测评后&#xff0c;突然在某个时间节点&#xff0c;在特工的文章下&#xff0c;发现了很小众的Flowith。 被这段评论给心动到&#xff0c;于是先去注册了下账号。一翻探索过后&#xff0c;发现比我想象中要有趣的多&…

SpringBoot企业级开发之【文章分类-新增文章分类】

看一下新增文章的需求&#xff1a; 接口文档&#xff1a; 开发思路&#xff1a; 先在controller下去创建add方法&#xff0c;方法内导入Service类获取add的结果&#xff1b;再在Service接口下去创建add的方法&#xff1b;然后在Service实现类下去实现方法的作用&#xff0c;且导…

【AI News | 20250421】每日AI进展

AI Repos 1、langgraph-mcp-agents 基于LangGraph的AI智能体系统&#xff0c;集成了MCP&#xff0c;使AI助手能访问各种数据源和API。提供了Streamlit网页界面&#xff0c;方便与LangGraph和MCP工具交互。可以通过界面动态添加、删除以及配置MCP工具&#xff0c;无需重启应用&…

牛客 | OJ在线编程常见输入输出练习

1.只有输出 言归正传&#xff0c;本张试卷总共包括18个题目&#xff0c;包括了笔试情况下的各种输入输出。 第一题不需要输入&#xff0c;仅需输出字符串 Hello Nowcoder! 即可通过。 #include <iostream> using namespace std; int main(){string s "Hello Nowco…

python生成动态库在c++中调用

一.Windows下生成动态库.pyd 在setup.py的同目录下使用python setup.py build_ext --inplace 二.在vscode的c中使用.pyd文件&#xff08;动态库&#xff09; 1&#xff09;配置python的环境 python -c "import sys; print(sys.executable)" #确定python安装位置 2…