Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

2023-11-10

概述

本文介绍通过Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video标签实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。

一、FFmpeg+Nginx转流hls

1、FFmpeg安装

官网:http://ffmpeg.org

windows下安装:

http://ffmpeg.zeranoe.com/builds/ ,下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin,验证:ffmpeg -version 出现版本号则成功。

Linux下安装:

(1)下载最新源码包并解压

$ wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz
$ tar zxvf ffmpeg-4.1.tar.gz

(2)安装ffmpeg

$ cd ffmpeg-4.1/
$ ./configure

报错:
在这里插入图片描述
(3)安装yasm

$ yum install yasm

(4)继续安装ffmpeg

$ ./configure
$ make
$ make install

(5)测试

$ ffmpeg

输入ffmpeg打印了相关信息,表示安装成功
在这里插入图片描述

2、Nginx安装

Windows下安装:

windows下安装nginx

Linux下安装:

Centos7下安装Nginx

3、Nginx配置

修改配置文件:nginx/conf/nginx.conf
在http --> server下增加:

# ffmpeg生成hls流的http访问配置
location /hls {
    #若nginx\conf\mime.types中没有配置如下type,请加上,或直接在mime.types加
	#types{
	#	application/vnd.apple.mpegurl m3u8;
	#	application/x-mpegURL m3u8;
	#	video/mp2t ts;
	#}
	# 相对路径,表示nginx目录下的html目录
	root html;
	#add_header Cache-Control no-cache;
	add_header Access-Control-Allow-Origin *;
}

注: 下面用ffmepg转流需要指定目标路径为上面配置的:nginx/html/hls。

配置完之后,启动nginx服务。

4、FFmpeg命令行转流
ffmpeg -fflags +genpts -i "rtsp://admin:ajb123456@192.168.10.36" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 D:/nginx/html/hls/test.m3u8

其中:

  • rtsp://admin:ajb123456@192.168.10.36是你自己的rstp源地址(可以提前用VLC media player播放器测试源是否可以正常访问,如下图)
    在这里插入图片描述

  • D:/nginx/html/hls/test.m3u8 是对应nginx.conf配置中的hls访问路径/hls

ffmpeg 关于hls方面的指令说明:

  • -hls_time n: 设置每片的长度,默认值为2。单位为秒
  • -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
  • -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
  • -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0

用java封装了操作FFmpeg的util。参见:https://github.com/powerLeePlus/java-FFmpeg-rtsp2hls

二、HTML通过H5播放

参考 浏览器播放m3u8文件 ,将source --> src改为:http://localhost:80/hls/test.m3u8,如下:

<source src="http://localhost:80/hls/test.m3u8" type="application/x-mpegURL">

其中http://localhost:80为你自己nginx服务地址。

浏览器打开index.html。点击开始播放,即可看到效果:
在这里插入图片描述

以上完整资料

如安装包,配置文件,源码,文档等,已打包,如下:
在这里插入图片描述

请关注,维辛 公 中号如其所斯,回复:rtsp,获取下载链接。


补充

很多朋友反馈无法播放,或者播放只有几秒,那可能的问题有:

  • rtsp源失效,本身无法播放
  • nginx的配置和ffmpeg推流参数没有对应上
  • html文件中<source>配置没有和nginx实际访问地址对应上
  • ffmpeg推流失败

如下图是ffmpeg推流成功的情形:
在这里插入图片描述
下面两图是ffmpeg推流失败的情形:
在这里插入图片描述
在这里插入图片描述
针对以上问题,请朋友们仔细按照本文操作流程与注意点核对。是一定可以正常推流与播放的。


找到我

欢迎关注,共同成长。vx搜索「如其所斯」


参考:
Linux-安装FFmpeg
ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
ffmpeg java 实时视频流转码(ffmpeg-cli-wrapper
https://github.com/bramp/ffmpeg-cli-wrapper/
java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
FFMPEG转码视频源帧数据中没有PTS问题的解决

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

Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放 的相关文章

  • 当请求太大时,Nginx(我认为)会以错误的权限保存文件

    所以 我对托管和 Linux 等都是完全陌生的 所以如果我说错了 请原谅我 我还在学习 我正在使用 Django 创建一个小型个人网站 我想把它放到网上看看是否一切正常 我从 linode 买了一台便宜的服务器 并使用 Digital Oc
  • 如何将多个域路由到多个节点应用程序?

    我习惯了典型的 Lamp Web 托管环境 您只需单击 cpanel 中的几个按钮 您的域就会被分区并映射到 htdocs 中的文件夹 我经常使用 Node js 但做同样的事情似乎并不那么简单 如果我有多个节点应用程序 并且我想将doma
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • 访问 AVFrame 的每个像素

    我需要访问 FFMPEG 的 AVFrame 对象的每个像素信息 如果是 RGB 则每个像素的每种颜色 R G 和 B 我怎样才能做到这一点 如果您已经前进到正确的框架 类似于 img convert ctx ffmpeg sws getC
  • 如何使用Java将h.264直播流编码为RTP数据包

    我正在为 Android 操作系统开发一个应用程序 我需要来自摄像机的实时解码视频流 该视频流使用 h 264 编解码器进行编码 将帧数据转换为 RTP 数据包并将数据包发送到服务器 首先 可以尝试在 PC 上实现从 HDD 中预先录制的视
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • 无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

    我目前正在进行一个涉及读取 mp4 视频文件的项目 我遇到的问题是它在Windows 7机器上使用Python 2 7 32位 OpenCV 2 4 3 cv2 pyd 代码片段如下 try video cv2 VideoCapture v
  • 如何在Android项目中使用libffmpeg.so?

    我正在尝试在 Android 中创建一个屏幕录制应用程序 为此 我使用 FFmpeg 我已经创建了 libffmpeg so 文件 现在我想在 Android 项目中使用相同的方法来调用它的本机函数 我怎样才能做到这一点 本教程提供了有关此
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • 使用nginx容器作为反向代理时的原始url

    我有一个 Web 应用程序部署为码头集装箱 我也有一个nginx容器 使用dnsmasq解析器 设置为充当 Web 应用程序前面的反向代理 它的 80 端口映射到主机 我的应用程序使用 SSO 身份验证 当我使用身份提供商登录时 回调 ur
  • 连接到上游时 Nginx 错误:(13:权限被拒绝)

    我在我的中收到此错误nginx error log file 2014 02 17 03 42 20 crit 5455 0 1 connect to unix tmp uwsgi sock failed 13 Permission den
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • 适用于 iPhone 和 HTTP 直播的实时视频聊天

    所以一般来说 我想为 iPhone 制作一个具有视频聊天功能的应用程序 但经过多次搜索 我仍然找不到任何成功的结果 是否有任何公共或私有 API 可用于在 iPhone 上执行此操作 如果您的答案是 是 请帮助我 基本上 我想要的是读取连接
  • 在 ffmpeg 中,如何使用scale2ref 过滤器缩放 dvdsub 字幕以匹配视频大小?

    我有一个从直播电视录制的 mpeg 文件 其中包含视频以及多个音频和字幕流 我的最终目标是能够创建较小的视频文件 因为 mpeg 文件大小为数 GB 我在这条道路上的第一步只是能够选择视频 音频和字幕流中的每一个并将它们复制到 mkv 文件
  • 如何修复 Nginx 自动 301 重定向到带有尾部斜杠的相同 URL?

    当我尝试将 Web 应用程序的子目录中的索引文件访问到相同的 URL 但附加了斜杠 时 Nginx 出现了不良行为 它正在重新路由请求 我有一个简单的 Web 应用程序 其中设置了一个根目录和其中的许多子目录 每个子目录中都有一个 inde
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • 如何使用 ffmpeg 将两个视频/音频流混合为一个

    我有两个视频 v1 flv 和 v2 flv 想要创建 v3 flv 其中包含来自 v1 flv 的视频流以及来自 v1 flv 和 v2 flv 的 混合 音频流 使用 ffmpeg 命令可以实现类似的操作吗 谢谢 我认为使用 ffmpe

随机推荐

  • python乱码怎么办_解决python发送邮件乱码问题

    使用python发邮件很简单 但是遇到乱码问题很烦恼 乱码问题有几种 有发件人名称乱码 有标题乱码 也有正文乱码的问题 一 发件人名称乱码 要解决发件人名称乱码问题 必须使用Header 如下代码 from email header imp
  • 记忆化搜索简介

    记忆化搜索 算法上依然是搜索的流程 但是搜索到的一些解用动态规划的那种思想和模式作一些保存 一般说来 动态规划总要遍历所有的状态 而搜索可以排除一些无效状态 更重要的是搜索还可以剪枝 可能剪去大量不必要的状态 因此在空间开销上往往比动态规划
  • 【IDEA】Idea 报错 Module was compiled with an incompatible version of Kotlin. The binary version of its

    1 场景1 提示 在项目本地DEBUG或者build的时候报了以下错误 kotlin stdlib common kotlin module Module was compiled with an incompatible version
  • vant的中文的文档

    vant的中文的文档 拿走把小傻瓜 https vant contrib gitee io vant zh CN 但是本着点赞自愿 收藏吃灰 还是多少可以支持一下
  • TCP连接的状态详解以及故障排查

    1 TCP状态 了解TCP之前 先了解几个命令 linux查看tcp的状态命令 1 netstat nat 查看TCP各个状态的数量 2 lsof i port 可以检测到打开套接字的状况 3 sar n SOCK 查看tcp创建的连接数
  • C++中非常好用的泛型函数

    1 泛型函数 泛型函数结合lambda函数可以实现很多功能如 将序列中的每个负数替换为其绝对值 transform vi begin vi end vi begin int x return x lt 0 x x 查找第一个长度大于等于sz
  • Camera ISP

    1 ISP工作原理 ISP Image Signal Processor 即图像信号处理 主要作用是对前端图像传感器输出的信号做后期处理 依赖于 ISP 才能在不同的光学条件下都能较好的还原现场细节 景物通过 Lens 生成的光学图像投射到
  • 微信小程序- 选择器 合并时间和日期

    https developers weixin qq com miniprogram dev component picker html 从底部弹起的滚动选择器 类型有普通选择器 多列选择器 时间选择器 日期选择器 省市区选择器 没有现成的
  • Unity3D打包时,编译错误

    最近打包Unity3D的APK包时 报编译错误 Failed to compile Java code to DEX D Work Parkour branches 20131219 box360 Temp StagingArea gt j
  • VLC裁剪和移植到S3C6410

    1 由于项目需求 这几天在折腾VLC 需要将它裁剪并移植到PowerPC上 由于板子没有到 先在6410上跑 目前从需求看我们只要VLC作为一个server即可 先贴配置 如下 几乎disable掉所有东东 bin sh for arm C
  • Loki搭建日志收集系统

    Loki 什么是Loki Loki是受Prometheus启发的水平可扩展 高度可用的多租户日志聚合系统 他被设计为非常经济高效且易于操作 它不索引日志内容 而是为每个日志流设置一组标签 Loki文档网址 https grafana com
  • 牛客面试必刷TOP101——二分查找排序

    列表 二分查找 I BM17 二维数组中的查找 BM18 寻找峰值 BM19 组中的逆序对 BM20 旋转数组的最小数字 BM21 比较版本号 BM22 二分查找 I BM17 原题 请实现无重复数字的升序数组的二分查找 给定一个 元素升序
  • 不可控器件——电力二极管(电导调制效应)

    电力二极管 也被称之为半导体整流器 是不可控器件 原理简单 工作可靠 以半导体PN结为基础 PN结是由一个N型掺杂区和一个P型掺杂区紧密接触所构成的 由于两者的多子是不同的 会造成两者的多子向另一个方向做扩散运动 到对方区域形成少数载流子
  • 分库分表?如何做到永不迁移数据和避免热点?

    本文经授权转载自今日头条号 老顾聊技术 原文地址 www toutiao com i6677459303055491597 一 前言 中大型项目中 一旦遇到数据量比较大 小伙伴应该都知道就应该对数据进行拆分了 有垂直和水平两种 垂直拆分比较
  • VMware ESXi网络配置

    目录 一 ESXi网络配置方法 二 虚拟机网络配置方法 一 ESXi网络配置方法 1 搭建完成ESXi平台后 即可为它设置系统IP 如下图 在此界面按F2 输入用户名密码后进入配置界面 2 左侧菜单栏可以看到 Configure Manag
  • 关于redis的主从、哨兵、集群

    开发十年 就只剩下这套Java开发体系了 gt gt gt 关于redis主从 哨兵 集群的介绍网上很多 这里就不赘述了 一 主从 通过持久化功能 Redis保证了即使在服务器重启的情况下也不会损失 或少量损失 数据 因为持久化会把内存中数
  • SpringBoot2.x中的应用监控:Actuator+Prometheus+Grafana

    总览 Actuator 提供端点将数据暴露出来 Prometheus 定时去拉取数据并保存和提供搜索和展示 Grafana 提供更加精美的图像化展示 Actuator SpringBoot2 x使用Actuator来做应用监控 Promet
  • STM32 One or more Device Family Pack Devices are not present解决方法

    最近刚刚接触STM32 利用STM32Cube创建工程用Keil后利用打开报如下错误 摸索了一番 发现这里是因为缺少相应的SDK 附一个连接 http www keil com dd2 pack eula container 建议找国内镜像
  • 阿里云CenterOs 7 安装mongodb数据库

    安装 添加下载源 配置yum仓库 vim etc yum repos d mongodb org 3 4 repo mongodb org 3 4 repo文件内容 mongodb org 3 4 name MongoDB Reposito
  • Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放

    概述 本文介绍通过Nginx FFmpeg实现rtsp流转hls流 在WEB通过H5 video标签实现视频播放功能 此方法可用于网络摄像头RTSP视频流WEB端实时播放 一 FFmpeg Nginx转流hls 1 FFmpeg安装 官网