基于ffmpeg模拟监控摄像头输出rtsp视频流并opencv播放

在进行视频流项目(视频监控)研发时,通常是在台式机上研发,并不能与摄像头直接进行连接,故需要使用ffmpeg将已经录制好的mp4视频推送为rtsp视频流,然后进行模拟开发。本博文涉及到ffmpeg(推流)、EasyDarwin(视频流服务器)、oepncv(代码拉流)、vlc(播放rtsp视频流)。

1、基础环境

1.1 ffmpeg

官网地址:http://ffmpeg.org/

ffmpeg 是一款非常快速的视频和音频转换器, 是开源项目 FFmpeg (Fast Forward moving pictures expert group) 的命令行程序。 它可以在任意采样率之间转换,并通过高质量的多相滤波器实时调整视频大小。ffmpeg支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

下载地址: https://github.com/BtbN/FFmpeg-Builds/releases 按照个人系统版本依照实际情况进行下载
在这里插入图片描述

安装配置: 博主下载的是不能用于编程开发的版本,解压后没有include目录。配置ffmpeg仅需要将其bin路径添加到系统环境变量path中即可。
在这里插入图片描述

1.2 easydrawin

官网地址:https://www.easydarwin.org/

EasyDarwin是一个高性能开源流媒体服务器框架,具有以下特点:
1、支持跨平台,可以在Windows、Linux、Mac OS等多种平台上运行。
2、支持多种传输协议,包括HTTP、RTMP、UDP等。
3、支持多种音视频编码格式,包括H.264、AAC等。
4、支持多种存储格式,包括MP4、FLV等。
5、支持多路并发处理。
6、使用C++编写,代码简洁、高效。

下载地址:https://github.com/EasyDarwin/EasyDarwin/releases/tag/v8.1.0
在这里插入图片描述
安装配置:EasyDarwin可以免安装使用,也可以安装使用
在这里插入图片描述

1.3 VLC

官网地址:https://www.videolan.org/

VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或multicast的流式服务器在IPv4或IPv6的高速网络连接下使用。它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。

下载地址:https://www.videolan.org/
在这里插入图片描述
安装配置:VLC不需要任何额外配置,按照正常流程的默认配置安装即可

1.4 OPENCV

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

c++版安装配置可以参考:https://blog.csdn.net/m0_74259636/article/details/128525031?spm=1001.2014.3001.5502

本博文使用python版opencv,安装命令为:pip install opencv-python

2、rtsp推流拉流

2.1 下载视频

You-Get 是一个使用Python开发的小型命令行实用程序,可以通过一行命令直接从Web下载媒体内容(视频,音频,图像)等,不用任何配置。使用you-get工具(python软件包)下载绝大部分网页中的视频。
安装命令:pip install you-get

使用实例

1、找到要下载视频的播放页面,并复制页面路径(URL,即图中红框部分)
在这里插入图片描述
2、在装有you-get包的python环境下执行以下命令,其中红色部分为要下载视频的页面路径(按个人情况进行调整)

在这里插入图片描述
3、下载结果如下所示,有一个xml文件没有任何用的

在这里插入图片描述

2.2 进行视频推流

启动RTSP视频流服务器

找到EasyDarwin.exe双击即可,其输出了两个地址一个是rtsp推流的地址(通常为本机ip),另一个是管理后台的地址。
在这里插入图片描述
后台内容详情如下
在这里插入图片描述

使用ffmpeg进行推流

使用详情可以参考:https://www.python100.com/html/80310.html
循环推流命令如下,将-i对应的参数换成自己的文件名

ffmpeg -re -stream_loop -1 -i 风景视频素材分享.flv -c copy -f rtsp rtsp://127.0.0.1:554/input

出现以下界面,即为推流成功
在这里插入图片描述

2.3 拉流播放

使用VLC拉流播放

打开VLC>>媒体>>打开网络串流
在这里插入图片描述
然后输入rtsp视频流地址,点击播放即可
在这里插入图片描述
播放效果如下:
在这里插入图片描述

使用opencv拉流播放

使用opencv拉流播放只能获取图像部分,具体使用代码如下。其所获取的frame 即为每一帧图像,后续可以进行其他编程操作。

import cv2
rtsp="rtsp://127.0.0.1/input"
cap = cv2.VideoCapture(rtsp)
if cap.isOpened():
    print("Opened")
while cap.isOpened():
    ret, frame = cap.read()
    cv2.imshow(rtsp,frame)
    cv2.waitKey(1)

程序执行效果如下所示,一直在刷新界面内容。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_74259636/article/details/133215010