基于mediamtx+ffmpeg实现视频推流,基于python-deffcode实现视频拉流
软件依赖:mediamtx、ffmpeg
python包依赖:deffcode
mediamtx下载地址:https://github.com/bluenviron/mediamtx/releases
ffmeg下载地址:https://ffmpeg.org/download.html
deffcode安装命令:pip install deffcode
1、mediamtx下载安装
MediaMTX(原名 rtsp-simple-server)是一款即用型、零依赖的实时媒体服务器和媒体代理,可用于发布、读取、代理、录制和播放视频和音频流。它被设想为一个“媒体路由器”,可将媒体流从一端路由到另一端。
其支持的流协议有:
打开https://github.com/bluenviron/mediamtx/releases/tag/v1.9.0,根据自己的硬件环境+操作系统下载软件。
下载后解压文件,得到mediamtx.exe与mediamtx.yml。
mediamtx.ym是软件配置文件,其可以配置各种协议的默认端口,如rtspAddress设置
2、进行推流与拉流
2.1 下载安装ffmpeg
打开 https://github.com/BtbN/FFmpeg-Builds/releases ,根据自己系统下载软件包
解压项目,同时将 ffmpeg-master-latest-win64-gpl-shared\bin 的路径添加到系统环境变量中
2.2 启动mediamtx
双击mediamtx即可,可以看到开始监听指定端口了
2.3 进行推流
在cmd或终端中执行
ffmpeg -re -stream_loop -1 -i 风景视频素材分享.flv -c copy -f rtsp rtsp://127.0.0.1:8554/input
其中风景视频素材分享.flv
为视频文件名称,rtsp://127.0.0.1:8554/input
为推流的地址
执行推流时的终端如下
此时mediamtx的输出如下
2.4 拉流播放
custom_ffmpeg是ffmpeg中bin目录
from deffcode import FFdecoder
import cv2
# FFedecoder创建视频源和视频解码规则,formulate在ffmpeg中执行语句
# 本地视频
# decoder = FFdecoder("test.mp4").formulate()
# rtsp流
decoder = FFdecoder("rtsp://127.0.0.1:8554/input", custom_ffmpeg=r"D:\视频推流\ffmpeg-master-latest-win64-gpl-shared\bin").formulate()
# 从decoder中抓取RGB图像
for frame in decoder.generateFrame():
# 将rgb图像转换为bgr图像,送给opencv展示
frame_bgr = frame[:, :, ::-1]
cv2.imshow("Output Frame", frame_bgr)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
# 安全关闭解码进程
decoder.terminate()
流播放效果如下所示
此时mediamtx软件页面信息如下