Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

news/2024/9/19 5:42:01/ 标签: 服务器, nginx, 运维

一、首先搭建直播服务器

环境widows,并且已经集成了 :nginx-http-flv-module模块

nginx.conf配置如下:

worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  logs/error.log  debug;#pid        logs/nginx.pid;events {worker_connections  1024;
}# 添加RTMP服务
rtmp {server {listen 1935; # 监听端口chunk_size 4000;application live {live on;gop_cache on;hls on;hls_path html/hls}}
}# HTTP服务
http {include       mime.types;default_type  application/octet-stream;#access_log  logs/access.log  main;server {listen       8080; # 监听端口location /flv {flv_live on;chunked_transfer_encoding on;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' '*';add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";add_header 'Access-Control-Expose-Headers' '*';}location /stat.xsl {root html;}location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location / {root html;}}
}

application live {

}

是指推流的目录在live,hls on是指开启切片,hls_path: html/hls是指切片直播的目录,手动创建,hls_fragment:3,每3秒创建一个切片

注意loaction /flv配置的是跨域

二、推流:

ffmpeg -re -i tuiliuceshi.mp4 -vcodec libx264 -acodec aac -f flv -y rtmp://127.0.0.1:1935/live/test1

三、播放

1、vlc播放:(有以下三种播放方式:)

http-flv方式: http://localhost:8080/flv?port=1935&app=live&stream=test1

Rtmp方式:rtmp://127.0.0.1:1935/live/test1

Hls方式:http://localhost:8080/hls/test1.m3u8

2、网页播放:

网页需要解决跨域问题,需要在nginx中配置:

location /flv {flv_live on;chunked_transfer_encoding on;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' '*';add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";add_header 'Access-Control-Expose-Headers' '*';}

我们这个nginx推流服务器的http地址是:http://localhost:8080

我们再开一个nginx服务器

我们再开一个nginx,端口为:80,http://localhost/可直接访问:

在网页 flv.html中,引用到flv.js

https://cdn.bootcss.com/flv.js/1.3.3/flv.min.js
<html><head><script src="https://cdn.bootcss.com/flv.js/1.3.3/flv.min.js"></script></head><body><video id = "videoElement" controls></video><script>if(flvjs.isSupported()){var videoElement = document.getElementById('videoElement')var flvPlayer = flvjs.createPlayer({type:'flv',url:'http//localhost:8080/flv?port=1935&app=live&stream=test1'})flvPlayer.attachMediaElement(videoElement)//将flv视频装载进来flvPlayer.load()//载入视频flvPlayer.play()//播放视频,如果不想自动播放,可以不要本行}</script></body>
</html>

这样就播放出来了视频

注意是两个nginx,一个是8080,负责直播推流,80的负责播放

ffmpeg检查摄像头、麦克风设备的命令:

ffmpeg -list_devices true -f dshow -i dummy

播放摄像头命令:

ffplay -f dshow -i video="Integrated Camera"

用ffmpeg推流的命令:

ffmpeg -f -dshow -i video="useb2.0 PC Camera" -vcodec libx264 -f flv -y rtmp://127.0.0.1:1935/live/test001


http://www.ppmy.cn/news/1527117.html

相关文章

Python 爬虫入门 - Request 静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

软件安全、逆向分析、加密与解密--crackme2详解

本次使用到的软件有&#xff1a;PEiD、IDA、X32dbg 刚学逆向不久&#xff0c;可能有些地方会有错误&#xff0c;欢迎各位大佬指导 执行 运行程序 点击About 点击确定&#xff0c;输入如图数据 点击try Now 点击确定&#xff0c;回到主界面 点击Exit&#xff0c;退出 查壳&a…

ICMP

目录 1. 帧格式2. ICMPv4消息类型(Type = 0,Code = 0)回送应答 /(Type = 8,Code = 0)回送请求(Type = 3)目标不可达(Type = 5,Code = 1)重定向(Type = 11)ICMP超时(Type = 12)参数3. ICMPv6消息类型回见TCP/IP 对ICMP协议作介绍 ICMP(Internet Control Messag…

Vue路由二(嵌套多级路由、路由query传参、路由命名、路由params传参、props配置、<router-link>的replace属性)

目录 1. 嵌套(多级)路由2. 路由query传参3. 路由命名4. 路由params传参5. props配置6. <router-link>的replace属性 1. 嵌套(多级)路由 pages/Car.vue <template><ul><li>car1</li><li>car2</li><li>car3</li></ul…

PostMan使用变量

环境变量 使用场景 当测试过程中&#xff0c;我们需要对开发环境、测试环境、生产环境进行测试 不同的环境对应着不同的服务器&#xff0c;那么这个时候我们就可以使用环境变量来区分它们 避免切换测试环境后&#xff0c;需要大量的更改接口的url地址 全局变量 使用场景 当…

TCP并发服务器的实现

一请求一线程 问题 当客户端数量较多时&#xff0c;使用单独线程为每个客户端处理请求可能导致系统资源的消耗过大和性能瓶颈。 资源消耗&#xff1a; 线程创建和管理开销&#xff1a;每个线程都有其创建和销毁的开销&#xff0c;特别是在高并发环境中&#xff0c;这种开销…

代码随想录打卡Day35

今天还是以看视频为主&#xff0c;主要是力扣上合适的题目不多&#xff0c;今天主要是学习0-1背包的二维数组解法和一维数组解法&#xff0c;今天题目不多&#xff0c;但是debug花了我好久时间。。。主要还是对0-1背包不够熟悉。 46. 携带研究材料&#xff08;卡码网&#xff…

大数据新视界 --大数据大厂之数据挖掘入门:用 R 语言开启数据宝藏的探索之旅

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

vue3中把封装svg图标为全局组件

在vue3中我们使用svg图标是下面这样子的 <svg style"width:30px;height:30px;"><use xlink:href"#icon-phone" fill"red"></use></svg>第次使用图标都要写这么多重复的代码&#xff0c;很不方便&#xff0c;所以&#x…

JavaSE基础——第三章 运算符

本专题主要为观看韩顺平老师《零基础30天学会Java》课程笔记&#xff0c;同时也会阅读其他书籍、学习其他视频课程进行学习笔记总结。如有雷同&#xff0c;不是巧合&#xff01; 运算符是一种特殊的符号&#xff0c;用于表示数据的运算、赋值、比较等&#xff0c;包括&#xff…

常用 Git 命令

可视化学习网站&#xff1a;Learn Git Branching 一、初始化仓库 git init&#xff1a;在当前目录下初始化一个新的 Git 仓库。 二、添加和提交更改 git add <file>&#xff1a;将指定文件添加到暂存区。可以使用通配符&#xff0c;如 git add *.py 添加所有 .py 文件…

TSRPC+Cocos

TSRPC文档: https://tsrpc.cn/docs/get-started/api.html 创建 先创建一个默认的会话项目&#xff0c;找一个文件夹在控制台运行以下代码&#xff1a; npx create-tsrpc-applatest first-api --presets browser # 或者 yarn create tsrpc-app first-api --presets browser运…

linux-L6 linux管理服务的启动、重启、停止、重载、查看状态命令

来重启一下某一个服务 1.使用命令查看所有的服务状态 Systemctl找到其中的相关的服务 systemctl status xxx_你的应用程序的服务__xxx3.重启该服务 systemctl restart xxx_你的应用程序的服务__xxx下面的是备用&#xff0c;需要用的时候&#xff0c;查看就好了 启动服务 …

java程序员入行科目一之CRUD轻松入门教程(一)

之前在操作MySQL的时候&#xff0c;都是采用Navicat&#xff0c;或者cmd黑窗口。 无论使用什么方式和MySQL交互&#xff0c;大致步骤是这样的 建立连接&#xff0c;需要输入用户名和密码编写SQL语句&#xff0c;和数据库进行交互 这个连接方式不会变&#xff0c;但是现在需要 基…

JVM程序计数器

JVM的程序计数器是线程私有的内存区域&#xff0c;它记录着当前线程执行的字节码指令地址&#xff0c;是Java虚拟机中至关重要的组件&#xff0c;确保多线程环境下程序的正确执行与流畅切换。其重要性不容忽视&#xff0c;是Java程序高效、稳定运行的基石。 一、程序计数器介绍…

敲击键盘到屏幕上打印字符计算机都做了什么

当你在 Linux 系统上按下键盘的 x 键并看到屏幕上打印出字母 x 时&#xff0c;Linux 系统内部发生了很多过事情&#xff0c;涉及硬件、操作系统内核和用户空间的多个层次。下面是一个大致的流程&#xff1a; 1. 硬件层 键盘硬件捕获按键&#xff1a;当你按下 x 键&#xff0c…

学成在线练习(HTML+CSS)

准备工作 项目目录 内部包含当前网站的所有素材&#xff0c;包含 HTML、CSS、图片、JavaScript等等 1.由于元素具有一些默认样式&#xff0c;可能是我们写网页过程中根本不需要的&#xff0c;所有我们可以在写代码之前就将其清除 base.css /* 基础公共样式&#xff1a;清除…

【PostgreSQL里vacuum但是无法回收死元组的原因】

PostgreSQL数据库里的vacuum/autvacuum在我们日长的使用中可能会遇到很多问题&#xff0c;例如vacuum被阻塞&#xff0c;vacuum时间长&#xff0c;vacuum成功执行后&#xff0c;仍旧无法回收死元组等等。&#xff0c;本文主要介绍PostgreSQL的vacuum成功执行后&#xff0c;仍旧…

力扣100题——动态规划(二)

单词划分 题目 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 思路 使用dp数组记录当前下标对应的字符串长度能否被正确划分 确定状态转移方程&#xff0c;当j<i时&#xff0c;d[i] d[j]&&wordDict.contains(s.substring(j, i)) 代码 public boole…

C++——多线程编程(从入门到放弃)

进程&#xff1a;运行中的程序 线程&#xff1a;进程中的进程 线程的最大数量取决于CPU的核心数 一、将两个函数添加到不同线程中 demo&#xff1a;两个函数test01()和test02()&#xff0c;实现将用户输入的参数进行打印输出1000次 将这两个函数均放到独立的线程t1和t2中&…