ffmpeg,nginx,vlc把rtsp流转hls

ffmpeg:rtsp=>hls流;

nginx 托管hls流服务;

vlc测试hls流服务;

参考了很多相关文档和资料,由于比较乱就不在一一引用介绍了,下面的是实操OK的例子;

  • 1)ffmpeg (ffmpeg-4.4.1-full_build),要用full版本,否则会缺某些插件;

rtsp地址
rtsp://admin:admin123@192.168.30.168:554用ffmpeg把rtsp流转hls流
ffmpeg -rtsp_transport tcp -r 25 -i rtsp://admin:admin123@192.168.30.168:554  -fflags flush_packets -max_delay 1 -segment_time 5 -an -flags -global_header -hls_time 1 -hls_list_size 3 -hls_wrap 4 -vcodec copy -y "D:\hls\dh.m3u8"

  • 1.1)经测试ffmpeg 6.0最新版如下命令可用
ffmpeg.exe -fflags nobuffer ^-loglevel debug ^-rtsp_transport tcp ^-i rtsp://admin:admin123@192.168.30.22:554 ^-vsync 0 ^-copyts ^-vcodec copy ^-movflags frag_keyframe+empty_moov ^-an ^-hls_flags delete_segments+append_list ^-f hls ^-hls_time 1 ^-hls_list_size 3 ^-hls_segment_type mpegts ^"D:\hls\dh.m3u8"

如上参数参考(refs:Convert RTSP to HLS using FFmpeg | Mike Polinowski),原文为5.0版本;

依然有10秒左右延时;

其他参考

FFMPEG:Convert RTSP live stream to HLS

官方参数解释

(FFmpeg Formats Documentation)

  • 2)nginx 1.24.0版

配置如下

worker_processes  1;events {worker_connections  1024;
}http {server{listen	80;server_name localhost;location / {root   html;index  index.html index.htm test.html;}#监控视频点播服务location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}add_header Cache-Control no-cache;#存放hls切片的路径alias 'D:/hls';autoindex off;expires 1h;}}
}
  • 3)vlc 播放网络流

http://127.0.0.1:1935/hls/dh.m3u8

以上为ffmpege转rtsp流为hls流,并在web页面显示的步骤,基本OK,但延时较大,约10秒;

以下为nginx种的test.html页面代码,测试web播放功能; 

​<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
html, body {margin: 0;padding: 0;height: 98%;overflow: hidden;
}
#video {width: 95%;height: 95%;background: black;
}
</style>
</head>
<body><video id="video" muted controls autoplay playsinline></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@1.4.10/dist/hls.min.js"></script><script>const create = () => {const video = document.getElementById('video');// always prefer hls.js over native HLS.// this is because some Android versions support native HLS// but don't support fMP4s.if (Hls.isSupported()) {const hls = new Hls({maxLiveSyncPlaybackRate: 1.5,});hls.on(Hls.Events.ERROR, (evt, data) => {if (data.fatal) {hls.destroy(); setTimeout(create, 2000);}});hls.loadSource('http://localhost/hls/dh.m3u8');hls.attachMedia(video); video.play(); } else if (video.canPlayType('application/vnd.apple.mpegurl')) {// since it's not possible to detect timeout errors in iOS,// wait for the playlist to be available before starting the streamfetch('http://localhost/hls/dh.m3u8').then(() => {video.src = 'http://localhost/hls/dh.m3u8';video.play();});}
}; 
window.addEventListener('DOMContentLoaded', create); 
</script> 
</body>
</html>

===========

下面尝试转为webrtc,看是否能减少延时。

4)用ffmpeg转发rtsp流到mediamtx服务;(csdn下载)


ffmpeg -rtsp_transport tcp -i rtsp://admin:admin123@192.168.30.22:554  -vcodec copy -f rtsp rtsp://127.0.0.1:8554/mystream

vlc播放测试,地址即为

rtsp://localhost:8554/mystream

//----------分割线---------一些问题------------------

  • 昨日在家,也是如此搭配,却没有成功;
  • 1)发现ffmpeg必须用full版本,否则会缺失;

家中版本(ffmpeg version 2023-08-17-git-9ae4863cc5-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers  built with gcc 12.2.0 (Rev10, Built by MSYS2 project))

公司版本 ffmpeg 4.4.1;

新版的参数可能不一样,而参考的文档大都是旧版参数,所以新版不成功;

  • 2)ffmpeg 转换时会出现-10054错误,自动断开,后把tcp改成udp,才算可以;

怀疑ffmpeg的参数不一致,在家测试的版本参考的有个优化是减少延时;当前虽然OK,但延时较大(约有12秒);

  • 3)nginx配置后始终无法下载m3u8文件,虽然就在那个文件下;

误以为是nginx缺少hls模块导致,现在看来不是这样,nginx的配置就有问题;

当时在/hls节点用的是 root  'D:\hls',可能是错误的,用alias更合理。

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

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

相关文章

Python实现企业微信群告警

Python实现企业微信告警 1. 创建企业微信群机器人 1-1. 什么是企业微信群机器人&#xff1f; 企业微信群机器人是企业微信平台提供的一种功能&#xff0c;可以通过Webhook方式将消息发送到指定的企业微信群中。它可以用于自动化发送通知、告警等信息&#xff0c;实现监控和信…

飞天使-k8s基础组件分析-持久化存储

文章目录 emptyDirhostpathpv和pvc介绍nfs作为静态pv案例nfs作为动态pv案例使用本地文件夹作为pv改变默认存储类及回收策略参考文档 emptyDir 重启文件还有&#xff0c;但是如果杀了进程&#xff0c;则会丢失文件 创建pod # kubectl apply –f redis.yaml校验pod是否处于运行&…

数据结构(7)

B树 B树中允许一个节点拥有多个key。设定参数M&#xff0c;构造B树 1.每个结点最多右M-1个key&#xff0c;并且以升序排列 2.每个结点最多右M个子结点 3.根节点至少右两个子结点 通过磁盘预读&#xff0c;将数据放到B树中&#xff0c;3层B树可容纳1024*1024*1024差不多10亿…

CentOS7.9安装Java11

文章目录 Java11版本介绍安装步骤查看并卸载已有版本安装Java11最新版本配置生效 openjdk介绍 Java11版本介绍 Java 11是Java编程语言的一个重要版本&#xff0c;于2018年9月发布Java 11在语言特性、性能优化和安全性方面都有一些显著的改进&#xff0c;为Java开发者提供了更多…

MySQL每日一练--销售管理系统

一&#xff0c;创建数据库SaleSys 二&#xff0c;在数据库SaleSys中创建3张表 品牌信息表&#xff08;brand&#xff09; BrandId --品牌编号&#xff0c;整型&#xff0c;自动增长&#xff0c;主键BrandName --品牌名称&#xff0c;字符型&#xff0c; 唯一约束 商品表…

若依Cloud集成Flowable6.7.2

项目简介 基于若依Cloud的Jove-Fast微服务项目&#xff0c;集成工作流flowable(接上篇文章) 若依Cloud集成积木报表 项目地址&#xff1a;https://gitee.com/wxjstudy/jove-fast 后端 新建模块 目录结构如下: 引入依赖 前提:引入依赖之前先配置好maven的setting.xml &…

ES 7.6 - APi基础操作篇

ES7.6-APi基础操作篇 前言相关知识索引相关创建索引查询索引查询所有索引删除索引关闭与打开索引关闭索引打开索引 冻结与解冻索引冻结索引解冻索引 映射相关创建映射查看映射新增字段映射 文档相关(CURD)新增文档根据ID查询修改文档全量覆盖根据ID选择性修改根据条件批量更新 …

iOS开发之查看静态库(.a/.framework)中包含的.o文件和函数符号(ar,nm命令)

.a/.framework其实是把编译生成的.o文件&#xff0c;打包成一个.a/.framework文件。a的意思是archive/归档的意思。 查看静态库.a文件包含的内容用下面的命令解压&#xff1a; ar x xxx.a 用ar命令打包静态库&#xff1a; 参数r是将后面的*.o或者*.a文件添加到目标文件中 参数…

Python Opencv实践 - 图像直方图自适应均衡化

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/cat.jpg", cv.IMREAD_GRAYSCALE) print(img.shape)#整幅图像做普通的直方图均衡化 img_hist_equalized cv.equalizeHist(img)#图像直方图自适应均衡化 #1. 创…

js中?.、??、??=的用法及使用场景

上面这个错误&#xff0c;相信前端开发工程师应该经常遇到吧&#xff0c;要么是自己考虑不全造成的&#xff0c;要么是后端开发人员丢失数据或者传输错误数据类型造成的。因此对数据访问时的非空判断就变成了一件很繁琐且重要的事情&#xff0c;下面就介绍ES6一些新的语法来方便…

[Stable Diffusion教程] 第一课 原理解析+配置需求+应用安装+基本步骤

第一课 原理解析配置需求应用安装基本步骤 本次内容记录来源于B站的一个视频 以下是自己安装过程中整理的问题及解决方法&#xff1a; 问题&#xff1a;stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘ 解答&#xff1a;打开webui.bat 把 if not de…

ARM-汇编指令

一&#xff0c;map.lds文件 链接脚本文件 作用&#xff1a;给编译器进行使用&#xff0c;告诉编译器各个段&#xff0c;如何进行分布 /*输出格式&#xff1a;32位可执行程序&#xff0c;小端对齐*/ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm",…

StreamingWarehouse的一些思考和未来趋势

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 一篇笔记。 以Hudi、Iceberg、Paimon这几个框架为例&#xff0c;它们支持高效的数据流/批读写、数据回溯以及数据更新。具备一些传统的实时和离线数仓不具备的特性&#xff0c;主要有几个方面&#xff1a; 这…

Python“牵手”唯品会商品列表数据,关键词搜索唯品会API接口数据,唯品会API接口申请指南

唯品会平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;唯品会API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问唯品会平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现唯…

CPU、MCU、MPU、SOC、SOCPC、概念解释之在嵌入式领域常听到的名词含义

CPU、MCU、MPU、SOC等几个在嵌入式领域学习过程中会涉及到的几个名词。我们来学习一下&#xff0c;资料从网上搜集的&#xff0c;有错的地方可以指出。。。 CPU、MCU、MPU、SOC、SOCPC、 1. CPU2. MPU3.MCUMPU和MCU的区别&#xff1a;4.SOC5. SoPC 1. CPU CPU&#xff0c;即中…

Spring之Spring生态系统的演进

未来展望&#xff1a;Spring生态系统的演进 未来展望&#xff1a;Spring生态系统的演进 摘要引言词汇解释详细介绍新技术趋势与影响开发方向与展望探讨Spring在未来的发展趋势微服务与云原生响应式编程强调开发效率和全栈式开发支持人工智能和大数据保持灵活性和创新性 针对新兴…

docker 内apt-get安装软件都不好使

报各种错误 apt-get install --no-install-recommends libboost-all-dev Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed:autoconf automake autotools-dev cpp-8 gc…

vue2 vue中的常用指令

一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 **构建用户界面 ** 的 渐进式 …

go:正确引入自己编写的包(如何在 Go 中正确引入自己编写的包)

前言 目录如下&#xff1a; 具体教程 1. 工作空间&#xff08;我的是根目录&#xff09;新建 go.work 文件 文件内容如下&#xff1a; go 1.21.0use (./tuchuang./tuchuang/testm ) 2. 添加go.mod文件 1. 包文件夹下 进入testm目录执行 go mod init testModule 2. 引用目…

设计模式——装饰器模式

装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中&#xff0c;以便动态…