目录
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")