使用FFmpeg处理RTSP视频流并搭建RTMP服务器实现图片转直播全流程

目录

  • 一、FFmpeg安装与配置
  • 二、搭建并配置Nginx RTMP服务器
  • 三、从RTSP视频流提取帧并保存为图片
  • 四、将图片序列转换为视频
  • 五、将视频推送为直播流
  • 六、将图片序列推送为直播流
  • 七、播放实时流

场景:如何通过FFmpeg工具链,从RTSP视频流中按秒抽取帧生成图片,并进一步将这些图片转化为连续的视频流,最终推送至自建的Nginx RTMP服务器进行实时直播。

一、FFmpeg安装与配置

FFmpeg介绍

FFmpeg是一款功能丰富的跨平台音视频处理软件,如格式转换、抓取流媒体、视频编码解码、截图制作等等。访问官方下载页面(https://ffmpeg.org/download.html)。

在这里插入图片描述

下载ZIP文件

找到适用于Windows系统的版本链接,并直接下载压缩包,也可以下载预编译的FFmpeg完整二进制包。Releases:https://github.com/BtbN/FFmpeg-Builds/releases

在这里插入图片描述
在这里插入图片描述

解压缩文件

解压后会得到一个“ffmpeg-master-latest-win64-gpl-shared”这样的文件夹,包含了所有必要的执行文件和动态链接库。

在这里插入图片描述

配置环境变量

复制bin文件夹的位置D:\Software\ffmpeg-master-latest-win64-gpl-shared\bin

在这里插入图片描述

右键点击“此电脑”或“计算机”,选择“属性” -> “高级系统设置” -> “环境变量”。
在这里插入图片描述

在“系统变量”区域中找到“Path”变量,点击“编辑”。

在这里插入图片描述
在这里插入图片描述

点击“新建”,然后添加FFmpeg所在文件夹的完整路径。

在这里插入图片描述

保存更改并关闭所有窗口。

验证安装

打开命令提示符或PowerShell,输入ffmpeg -version并回车。显示FFmpeg的版本信息则表示安装成功并已正确配置

在这里插入图片描述

二、搭建并配置Nginx RTMP服务器

下载

下载Nginx源码和RTMP模块:

git clone https://github.com/nginx/nginx.git
git clone https://github.com/arut/nginx-rtmp-module.git

将RTMP模块复制到Nginx的文件夹下面

配置RTMP模块

在Nginx配置文件( nginx.conf)中添加如下RTMP相关设置,配置了RTMP服务器监听1935端口,开启直播应用,并禁用录制功能:

rtmp {server {listen 1935; # RTMP监听端口,默认为1935chunk_size 4096;application live {live on;record off;# 示例推流地址:rtmp://localhost:1935/live/mystream}}
}

启动Nginx RTMP服务器

对于Windows系统,在命令行切换到Nginx bin目录下运行 nginx.exe;对于Linux系统,使用 ./nginx 命令启动。

三、从RTSP视频流提取帧并保存为图片

提取帧

从RTSP视频流地址每秒抓取一帧并保存为JPEG格式图片:

ffmpeg -i rtsp://admin:123@192.168.0.144 -vf fps=1 -q:v 2 /path/to/output/frame_%03d.jpg
  • -i 参数后跟随的是RTSP视频流地址。
  • -vf fps=1 指定每秒抽样一帧。
  • q:v 2 表示使用高质量进行编码。质量参数的取值范围通常是从0到51,其中0表示最高质量(文件最大),51表示最低质量(文件最小)。这个数值越小,生成的图片质量越高,但文件体积也会越大;反之,数值越大,图片质量会降低,文件体积相应减小。
  • 输出路径 /path/to/output/frame_%03d.jpg 表示将图片按照顺序命名存储。

封装

#!/bin/bash# RTSP视频流地址
rtsp_url="rtsp://admin:123@192.168.0.144"# 输出目录
output_dir="/path/to/your/output/directory"# FFmpeg命令,每秒抓取一帧并保存为JPEG格式图片
ffmpeg -i "$rtsp_url" -vf fps=1 -q:v 2 "$output_dir/frame_%03d.jpg"

四、将图片序列转换为视频

利用FFmpeg将一组按顺序命名(例如frame001.jpg, frame002.jpg, …, frameNNN.jpg)的图片序列转换为视频:

ffmpeg -framerate 30 -i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p -crf 23 -vf "scale=1280:720" output.mp4
  • -framerate 30:设置帧率,即每秒钟播放多少帧图像。
  • -i frame%03d.jpg:指定输入文件格式,这里的 %03d 表示三位数的零填充序列号(如001、002等)。
  • -c:v libx264:指定视频编码器为H.264。
  • -pix_fmt yuv420p:指定像素格式,这是大多数设备和播放器广泛支持的一种格式。
  • -crf 23:恒定质量因子(Constant Rate Factor),数值越低,视频质量越高,但文件也越大;一般在18到28之间选择一个平衡点。
  • -vf "scale=1280:720":可选的视频滤镜,用于缩放每个图片到指定分辨率(这里是1280x720)。
  • output.mp4:最终输出的视频文件名。

五、将视频推送为直播流

将图片生成的视频文件作为流推送至Nginx RTMP服务器:

ffmpeg -re -i output.mp4 -c copy -f flv rtmp://localhost:1935/live/mystream
  • -re 参数表示以实际时间速率读取输入文件。
  • -i output.mp4 指定要推送的视频文件。
  • -c copy 表示复制流而无需重新编码,提高效率。
  • -f flv 指定输出格式为FLV,适应RTMP协议。
  • 推送地址 rtmp://localhost:1935/live/mystream 应与Nginx配置中的应用及流名称匹配。

六、将图片序列推送为直播流

或者将图片文件作为流推送至Nginx RTMP服务器:

ffmpeg -framerate 30 -i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p -preset veryfast -g 60 -f flv rtmp://your.server.url/live/stream_key
  • -framerate 30:设置帧率。
  • -i frame%03d.jpg:输入图片文件格式。
  • -c:v libx264:指定视频编码器为H.264。
  • -pix_fmt yuv420p:指定像素格式。
  • -preset veryfast:设置H.264编码速度预设,veryfast适用于实时推流场景。
  • -g 60:关键帧间隔,这里设置为60帧,即每60帧产生一个关键帧(I帧)。
  • -f flv:指定输出格式为FLV,这是RTMP协议常用的封装格式。
  • rtmp://your.server.url/live/stream_key:你的RTMP服务器地址和流密钥。

七、播放实时流

完成以上步骤后可以通过VLC播放URL观看这些实时流。

在这里插入图片描述

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

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

相关文章

六西格玛管理培训对企业有哪些实际帮助?

当下,企业要想脱颖而出,不仅要有创新思维和敏锐的市场洞察力,更要有高效的管理体系和严谨的质量控制手段。而六西格玛管理培训正是这样一项能够帮助企业实现提质增效、提升竞争力的关键举措。那么,六西格玛管理培训对企业究竟有哪…

超级数据查看器 教程合集 整理版本 pdf格式 1-31集

点击下载 超级数据查看器 教程合集整理版本 pdf格式https://download.csdn.net/download/qq63889657/89311725?spm1001.2014.3001.5501

SQL Server共享功能目录显示灰色无法自行选择

SQL Server共享功能目录显示灰色无法自行调整 一、 将之前安装SQL Server卸载干净 二、 清空注册表 1. 打开注册表,winR,输入regedit 2. 注册表-》编辑-》查找,输入C:\Program Files\Microsoft SQL Server\ 3. 注册表-》编辑-》查找&#x…

量子计算机接入欧洲最快超算!芬兰加快混合架构算法开发

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:1900字丨7分钟阅读 摘要:芬兰技术研究中心(VTT)与 CSC 展开合作,基于量子计算机超算架构进行算法开…

Git大文件无法直接push用git lfs track 上传大文件具体操作

Git 因为大文件push失败 回退到git add前用git lfs track单独添加大文件 以下work flow仅代表个人解决问题的办法,有优化流程的欢迎交流 回退到git add前 以下指令回退一个commit git reset --soft HEAD~1以下指令撤销所有git add操作,但不删除本地修…

泰盈科技IPO终止:客户集中度高,业绩未达目标,高管薪酬较高

近日,上海证券交易所披露的信息显示,泰盈科技集团股份有限公司(下称“泰盈科技”)及其保荐人中金公司撤回上市申请文件。因此,上海证券交易所决定终止对该公司首次公开发行股票并在主板上市的审核。 据贝多财经了解&am…

STM32 HAL TM1638读取24个按键

本文分享一下天微电子的另一款数码管按键驱动芯片TM1638的单片机C语言驱动程序。 笔者采用的MCU是STM32单片机,STM32CubeMX Keil5开发,使用了HAL库。 一、TM1638介绍 1、基础信息 TM1638属于一款LED驱动控制专用电路,其特性如下&#xf…

【文献阅读】李井林等2021ESG促企业绩效的机制研究——基于企业创新的视角

ESG促进企业绩效的机制 摘要 0.引言与文献综述 1.理论分析与研究假设 1.1企业ESG表现与企业绩效 假设1a:企业的环境表现对企业绩效存在正向影响效应。 假设1b:企业的社会表现对企业绩效存在正向影响效应。 假设1c:企业的公司治理表现对企业…

PCIE V3.0物理层协议学习笔记

一、说明 PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。 PCIe属于高速串行点对点双通道高…

JVM---垃圾回收

目录 一、C/C的内存管理 二、Java的内存管理 三、垃圾回收的对比 四、Java的内存管理和自动垃圾回收 五、方法区的回收 手动触发回收 六、堆回收 如何判断堆上的对象可以回收? 引用计数法 可达性分析算法 五种对象引用 软引用 软引用的使用场景-缓存 弱引用 虚…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫:(搜索引擎使用,遵守robots协议)■ robots协议(君子协议) ■ 2. 聚集网络爬虫:自己写的爬虫程序 ■ urllib.request(请求模块&#xff09…

详解typora配置亚马逊云科技Amazon S3图床

欢迎免费试用亚马逊云科技产品:https://mic.anruicloud.com/url/1333 当前有很多不同的博客社区,不同的博客社区使用的编辑器也不尽相同,大概可以分为两种,一种是markdown格式,另外一种是富文本格式。例如华为云开发者…

dfs记忆化搜索,动态规划

动态规划概念: 给定一个问题,将其拆成一个个子问题,直到子问题可以直接解决。然后把子问题的答案保存起来,以减少重复计算。再根据子问题的答案反推,得出原问题解。 821 运行时间长的原因: 重复大量计算…

Pencils Protocol Season 2 收官在即,Season 3 携系列重磅权益来袭

此前Scroll生态LaunchPad &聚合收益平台Pencils Protocol(原Penpad),推出了首个资产即其生态代币PDD的Launch,Season 2活动主要是用户通过质押ETH代币、组件战队等方式,来获得Point奖励,并以该Point为依…

代码行数统计工具cloc

Release v2.00 AlDanial/cloc GitHub 代码量代码行数统计工具cloc的正确使用(windows平台亲测有效,本人踩过坑,文中提到!)_cloc代码统计工具-CSDN博客

深入理解K8S【安全认证机制kubectlconfig】

深入理解K8S【安全认证机制】 1 核心概念 1.1 安全体系 对于大型系统来说,对业务的权限、网络的安全认证是必不可少的。 对于linux系统来说,用户和组、文件权限、SELinux、防火墙、pam、sudo等,究其核心的目的都是为了保证系统是安全的。 …

K8s 二进制部署 上篇

一 K8S按装部署方式: ① Minikube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特 性使用。 部署地址:https://kubernetes.io/docs/setup/minikube ② Kubeadmin Kubeadmin也是一个工…

解决 Content type ‘application/json;charset=UTF-8‘ not supported

文章目录 问题描述原因分析解决方案参考资料 问题描述 我项目前端采用vue-elementUi-admin框架进行开发,后端使用SpringBoot,但在前后端登录接口交互时,前端报了如下错误 完整报错信息如下 前端登录接口JS代码如下 export function login(…

素数筛详解c++

一、埃式筛法 代码 二、线性筛法(欧拉筛法) 主要的思想就是一个质数的倍数(倍数为1除外)肯定是合数,那么我们利用这个质数算出合数,然后划掉这个合数,下次就可以不用判断它是不是质数,节省了大量的时间。 …

RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)

项目后本地日志 一、logback依赖 打开最外层的 pom.xml,查看 SpringBoot的依赖配置。 <dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>s…