使用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://xiahunao.cn/news/3030299.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

centos7.8 迁移为 TencentOS Server 2.4(TK4) 报错解决

文章目录 一 问题二 解决三 注意 一 问题 CentOS 官方计划停止维护 CentOS Linux 项目,公司某台腾讯云的centos7.8服务器计划迁移为 TencentOS Server 2.4(TK4) 。在下载rpm包执行迁移命令后报错,场景还原如下。 首先 安装 Python 3 yum install -y p…

【智能优化算法】白鲨智能优化算法(White Shark Optimizer,WSO)

白鲨智能优化算法(White Shark Optimizer,WSO)是期刊“KNOWLEDGE-BASED SYSTEMS”(中科院一区期刊 IF8.6)的2022年智能优化算法 01.引言 白鲨智能优化算法(White Shark Optimizer,WSO)的核心理念和基础灵感来自大白鲨的行为,包括它们在导航和…

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…

自然资源-地质勘查工作的流程梳理

自然资源-地质勘查工作的流程梳理 地质勘查从广义上可理解为地质工作,地质队员就好像是国家宝藏的“寻宝人”,通过地质勘查,为国家找矿,以保障国家能源资源安全和服务国计民生,发挥着地质工作在国民经济建设中的基础性…

AI PC后时代:重新理解大模型的最佳载体

如果站在人机交互变革的角度来畅想,AI PC所带来的变革可以说是人机交互史上的又一次“颠覆”。元宇宙时代下,是苹果让AI装进了Vision Pro里;那么在如今的AI时代,又将会是谁将AI PC彻底照进现实?谁才是最终赢家&#xf…

代码随想录算法训练营第六十三天|84.柱状图中最大的矩形

代码随想录算法训练营第六十三天|84.柱状图中最大的矩形 84.柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入&…

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

【算法入门赛】A.坐标变换(推荐学习)C++题解与代码

比赛链接:https://www.starrycoding.com/contest/8 题目描述 武汉市可以看做一个二维地图。 牢 e e e掌握了一项特异功能,他可以“瞬移”,每次瞬移需要分别设定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy,瞬移完成后位置会…

leetcode刷题:对称二叉树

题目: 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示&#xf…

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

灰狼优化算法(Grey Wolf Optimizer)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法引言 灰狼算法(Grey Wolf Optimizer, GWO)是一种受自然界灰狼行为启发的优化算法。它模拟了灰狼的社会层次和狩猎策…

fb设备驱动框架分析

一、字符设备注册过程: 归根到底,fb设备也是一个字符设备,所以逃不开常规的字符设备驱动框架: Linux内核中编写字符设备驱动通常遵循以下步骤: ①、定义主设备号: 在Linux中,每个字符设备都…

怎么思维导图下载?推荐三个方法

怎么思维导图下载?随着信息时代的到来,思维导图作为一种有效的思维整理工具,被广泛应用于学习、工作和生活中。它可以帮助我们更好地组织信息,理清思路,提高学习效率和工作效率。下面,我将为大家推荐几款优…

【RSGIS数据资源】1980-2021年中国土地利用覆盖和变化数据集

文章目录 摘要1. 数据集概况2. 数据集组织形式2.1 1980-2015年中国森林覆盖数据集CFCD2.2 1980-2021年中国土地利用覆盖与变化数据集 3. 数据生产服务单位4. 引用 摘要 通过融合森林资源清查数据和20种遥感土地利用产品,重建生成了1980-2015年中国森林覆盖数据集&a…

[MRCTF2020]Ez_bypass1 and [网鼎杯 2020 青龙组]AreUSerialz1()php语言基础学习,以及序列化概念的基本了解

1.[MRCTF2020]Ez_bypass1 (1)打开环境后它是一串很长并且看起来非常混乱的代码,看不懂那咱就先不管,直接查看源码 (2)看了之后可以发现它涉及到很多东西 首先就是要进行一个仔细的代码审计,分…

码题杯 世界警察 思想:双指针

https://www.matiji.net/exam/brushquestion/4/4446/16A92C42378232DEB56179D9C70DC45C 双指针 思路是这样的,首先r指针向右走,如果r指针遇到了和l指针一样的,那么l指针就,一直加到r指针的位置,此时a[l]a[r]&#xff0…

云衔科技成为卓豪Zoho中国区代理商,开启智能化企业管理新篇章

每一家企业数字化转型,都在寻求通过技术创新实现业务的飞跃。为了更好地服务于中国企业的数字化转型需求,云衔科技荣幸宣布正式成为卓豪Zoho中国区代理商,这一强强联合将为市场带来全新的数字化解决方案与服务体验,共同开启中国企…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

河南大学大礼堂火灾事故引发安防监控对智能分析技术应用的思考

一、方案背景 2024年5月2日&#xff0c;在修缮施工期间的河南大学河南留学欧美预备学校旧址大礼堂发生火情。现场航拍画面显示&#xff0c;大礼堂经过火灾&#xff0c;房顶已经基本坍塌&#xff0c;被火烧过的建筑呈焦黑状。 公开资料显示&#xff0c;大礼堂属河南留学欧美预…

ASP.NET网上图书预约系统的设计

摘 要 《网上图书预约系统的设计》是以为读者提供便利为前提而开发的一个信息管理系统&#xff0c;它不仅要求建立数据的一致性和完整性&#xff0c;而且还需要应用程序功能的完备、易用等特点。系统主要采用VB.NET作为前端的应用开发工具&#xff0c;利用SQL Server2000数据…