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

目录

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

在实时音视频领域,我们经常需要处理从各种源(如摄像头)获取的视频流。本文将详细介绍如何通过FFmpeg工具链,从RTSP视频流中按秒抽取帧生成图片,并进一步将这些图片转化为连续的视频流,最终推送至自建的Nginx RTMP服务器进行实时直播。这将涵盖从视频流切片、转码到直播发布的一整套技术流程。

一、FFmpeg安装与配置教程

FFmpeg作为一款功能丰富的跨平台音视频处理软件,在Windows平台上有着广泛的应用场景,如格式转换、抓取流媒体、视频编码解码、截图制作等等。为了充分利用其强大功能,正确安装和配置FFmpeg至关重要。

FFmpeg的选择与下载

选择合适的版本
首先,访问FFmpeg官方下载页面(https://ffmpeg.org/download.html),在这里可以找到最新的稳定版或 nightly 构建版本。对于大多数常规用途,推荐下载预编译的Windows静态版本,它不需要额外的库支持即可运行。

在这里插入图片描述

下载ZIP文件

在官方下载页面中找到适用于Windows系统的版本链接,并直接下载压缩包,如果追求更高的效率和最新特性,也可以下载预编译的FFmpeg完整二进制包。

Releases:https://github.com/BtbN/FFmpeg-Builds/releases

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

FFmpeg的安装与解压

解压缩文件
下载完成后,使用7-Zip、WinRAR或其他解压工具打开压缩包。解压后,你会得到一个“ffmpeg-master-latest-win64-gpl-shared”这样的文件夹,其中包含了所有必要的FFmpeg执行文件和动态链接库。

在这里插入图片描述

配置环境变量

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

验证FFmpeg安装与基本使用

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

在这里插入图片描述

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

为了将上述视频内容推送到新的直播地址供用户观看,我们需要搭建一个Nginx RTMP服务器。以下是简化的配置过程:

  1. 下载

下载Nginx源码和RTMP模块:

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

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

  1. 配置RTMP模块

在Nginx配置文件( nginx.conf)中添加如下RTMP相关设置:

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

这配置了RTMP服务器监听1935端口,开启直播应用,并禁用录制功能。

  1. 启动Nginx RTMP服务器
    运行Nginx可执行文件来启动服务器。对于Windows系统,在命令行切换到Nginx bin目录下运行 nginx.exe;对于Linux系统,可能需要使用 ./nginx 命令启动。

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

首先,确保你的系统已安装FFmpeg,并且有足够的权限访问文件系统。下面是一个示例bash命令,用于从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服务器地址和流密钥。

完成以上步骤后,FFmpeg会读取图片序列并将其转码成视频流,然后推送到指定的RTMP服务器地址。可以通过VLC播放URL观看这个由图片生成的实时流。

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

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

相关文章

Yolov8目标检测——在Android上部署Yolov8 tflite模型

1. 简介 YOLOv8 是一种用于目标检测的深度学习模型,它是 YOLO(You Only Look Once)系列的最新版本之一。YOLO 系列因其高效和准确性而在计算机视觉领域非常受欢迎,特别是在需要实时目标检测的应用中,如视频监控、自动…

Jmeter中线程组介绍

1.线程数的意义 Jmeter采用了线程来模拟用户,即1个线程代表1个用户,线程可以简单理解为计算机处理任务时的一个具体执行人。 一个任务可以由多个人(线程)共同完成,也可以由一个人(线程)来完成&a…

Fastapi+docker+tortoise-orm+celery

因为项目是后期引入celery,所以导致构建docker的时候只有fastapi的项目,celery的重启比较麻烦 1.docker安装celery pip install celery安装celery的时候注意python版本与celery版本的适配,有些celery的版本不支持python的版本,具体的版本请看…

网络基础-ICMP协议

ICMP(Internet Control Message Protocol, Internet控制消息协议) ICMP协议是IP协议的辅助协议,用于在IP网络上发送控制消息,它通常被用于诊断网络故障、执行网络管理任务以及提供一些错误报告;对于收集各…

深入理解线程的两阶段终止模式:确保线程安全退出

序言 在多线程编程中,线程的安全退出是一个重要的问题。在实际应用中,我们经常需要确保线程在退出时能够完成必要的清理工作,同时避免因资源泄漏或状态不一致而导致的问题。线程的两阶段终止模式是一种解决这个问题的有效方法。本文将深入探…

React - sass配置

1. idea下载Easy Sass插件: 2. 启用后,我们写的scss文件不能直引用,所以还要下载sass依赖: (推荐使用.scss,因为与原生.css写法接近,.sass格式更严格) // 下载sass依赖 npm install sass sass-loader --s…

目标检测算法YOLOv7简介

YOLOv7由Chien-Yao Wang等人于2022年提出,论文名为:《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》,论文见:https://arxiv.org/pdf/2207.02696 ,项目网页&#xff…

【Linux】从零开始认识动静态库 - 静态库

送给大家一句话: 永不言弃,就是我的魔法! ——阿斯塔《黑色四叶草》 ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ 从零…

Linux虚拟机运行“yum install gcc-c++”报错“Loading mirror speeds from cached hostfile”

目录 一、在Linux上安装Redis时,在终端执行命令“yum install gcc-c”时,报错: 二、然后发现linux的网络不通,什么网站都访问不了 三、连上网后,再变换yum源 四、重新运行yum install gcc 一、在Linux上安装Redis时…

Java中55种锁,高级面试题,最新面试题

Java中乐观锁在实际应用中如何解决并发问题? 乐观锁通过假设并发冲突发生概率较低来解决并发问题,主要通过数据版本控制实现。在更新数据前,会检查数据版本是否发生变化,只有在数据版本未变时才允许更新,这样可以避免…

nginx_01

1.安装 yum install epel-release -y # 安装yum的扩展包 yum install nginx -y systemctl start nginx.service #启动nginx systemctl enable nginx.service # netstat -lntup # 查看端口占用情况 # 可以看到nginx默认占用了80端口 2.nginx配置 # 注意配置文件的语法格式…

万物生长大会 | 创邻科技再登杭州准独角兽榜单

近日,由民建中央、中国科协指导,民建浙江省委会、中国投资发展促进会联合办的第八届万物生长大会在杭州举办。 在这场创新创业领域一年一度的盛会上,杭州市创业投资协会联合微链共同发布《2024杭州独角兽&准独角兽企业榜单》。榜单显示&…

小红书搞钱美学课-6.0升级版,账号搭建/爆款创作/工具实战/账号变现篇

让我们用视觉撬动流量 课程体系 334253课程权益(5周服务期) 3节账号运营基础课3节自媒体笔记创作课。4节封面设计实操课2次实操加餐分享5次作业指导(一对一)3次答疑直播 课程大纲 一、账号搭建篇 变现模板、精准定位 二、爆款创作篇爆款选题、首图、文案与脚本、快速涨粉…

【计算机毕业设计】springboot工资管理系统

人类现已迈入二十一世纪,科学技术日新月异,经济、资讯等各方面都有了非常大的进步,尤其是资讯与 网络技术的飞速发展,对政治、经济、军事、文化等各方面都有了极大的影响。 利用电脑网络的这些便利,发展一套工资管理系…

权力集中,效率提升,中心化模式的优势与挑战

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:权力集中…

IO 5.10

在一个进程中,创建一个子线程。 主线程负责:向文件中写入数据 子线程负责:从文件中读取数据 要求使用线程的同步逻辑,保证一定在主线程向文件中写入数据成功之后,子线程才开始运行,去读取文件中的数据#incl…

学习java的继承

1.什么是继承 java中提供了一个关键字,extends,可以让一个类与另一个类建立起父子关系。 例如 public class B extends A { --- } 在这里,我们称A类为父类(也被称为基类或者超类)B类称为子类(或者是派生…

debian10 (armbian) 配置CUPS 服务

更新apt apt-update安装相关软件 apt-get install ghostscript apt-get install dc apt-get install foomatic-db-engine apt-get install cups3.修改配置文件 nano /etc/cups/cupsd.conf Listen localhost:631改为 Listen 0.0.0.0:631 以下四段配置加入Allow All # Only li…

【智能优化算法】矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)

矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)是期刊“COMPUTER METHODS IN APPLIED MECHANICS AND ENGINEERING”(IF 7.3)的2022年智能优化算法 01.引言 矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)模仿矮猫鼬的觅食行…

天府锋巢直播产业基地构建成都电商直播高地

天府锋巢直播产业基地自成立以来,一直秉承着创新、协同、共赢的发展理念,吸引了众多直播企业纷纷入驻。随着直播产业的迅猛发展,改成都直播基地内的配套服务也显得尤为重要。本文将深入探讨入驻天府锋巢直播产业基地后,配套的直播…