【媒体开发】利用FFMPEG进行推拉流

发布时间:2023年12月17日

目录

1. 下载并启动媒体服务

2. 使用?FFMPEG?拉流并推送到指定服务地址

3. 客户端拉流


1. 下载并启动媒体服务

MediaMTX,也即之前的rtsp-simple-server,是一个即用型、零依赖的实时媒体服务器和媒体代理,允许发布、读取、代理和记录视频和音频流。

Releases · bluenviron/mediamtx · GitHub找到最新版,下载对应平台的软件包,如?linux?x86-64?选绿色框那个,windows?x86-64?则选红色框那个:

解压后,运行即可:

# linux x86-64:
./mediamtx mediamtx.yml

2. 使用?FFMPEG?拉流并推送到指定服务地址

2.1 关于FFMPEG

ffmpeg是一个通用媒体转换器。它可以读取多种 输入 - 包括实时抓取/记录设备 - 过滤和转码它们 成多种输出格式。

ffmpeg从任意数量的输入“文件”读取。 (可以是常规的 文件、管道、网络流、抓取设备等),由 -i 选项,并写入任意数量的输出“文件”,这些文件是 由纯输出 url 指定。在命令行中找到的任何内容 不能将选项解释为被视为输出 url。

每个输入或输出 URL 原则上可以包含任意数量的流 不同类型(视频/音频/字幕/附件/数据)。允许的数量和/或 流的类型可能受到容器格式的限制。选择哪个 输入将进入的流,输出将自动完成 或使用 -map 选项(请参阅流选择章节)。

要引用选项中的输入文件,您必须使用它们的索引(从 0 开始)。例如。 第一个输入文件是 0,第二个是 1,依此类推。同样,流 文件内由它们的索引引用。例如。 2:3 指的是 第三个输入文件中的第四个流。另请参阅流说明符一章。

作为一般规则,选项将应用于下一个指定的 文件。因此,顺序很重要,你可以有相同的 多次在命令行上使用选项。每次出现都是 然后应用于下一个输入或输出文件。 此规则的例外是全局选项(例如详细级别), 应首先指定哪些内容。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有 输出文件。也不要混合属于不同文件的选项。全部 选项仅适用于下一个输入或输出文件,并在文件之间重置。

——官方文档介绍

安装:

对于Debian或者Ubuntu:

sudo apt-get update
sudo apt-get install ffmpeg

对于CentOS:

sudo yum install epel-release
sudo yum install ffmpeg

2.2 开始拉流、推流

启动媒体服务后,即可进行拉流并推送:

ffmpeg -re -i 视频文件路径或者网络摄像头地址 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

如果想循环推某个视频,可以使用参数-stream_loop,可以指定循环多少次,如为-1,则循环无数次:

ffmpeg -re -stream_loop -1 -i 视频文件路径 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

3. 客户端拉流

可直接用?ffplay?进行拉流与展示:

ffplay rtsp://127.0.0.1:8554/stream

也可用某些支持网络?URL?的播放器进行播放,如?VLC,SMPlayer?等;

也可以通过?opencv?拉流来获取每一帧图像进行各种处理:

video = cv2.VideoCapture("rtsp://127.0.0.1:8554/stream")

文章来源:https://blog.csdn.net/oYeZhou/article/details/134858339
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。