利用FFmpeg快速实现一个RTSP推流服务器

FFmpeg本身不能直接作为RTSP服务器,需要搭配一个专门的RTSP服务器软件来配合验证。最常用的方案是使用 MediaMTX (曾用名 rtsp-simple-server)。

整个流程就是:先启动MediaMTX服务,然后用FFmpeg把本地视频文件或屏幕画面推送给它,最后用 ffplay 或者VLC来拉流播放,这样就完成了一次完整的验证。

第一步:部署RTSP服务器 (MediaMTX)

你可以选择下面任意一种方式快速启动一个RTSP服务。

方式一:直接运行二进制文件(推荐)

  1. 去 MediaMTX GitHub Releases 页面 下载和你操作系统匹配的最新版本压缩包。
  2. 解压后,在终端/命令行里执行解压出的 mediamtx 可执行文件。它会使用默认配置启动,默认监听端口是 8554。
  3. 看到类似 server is ready 的日志,就说明服务已经跑起来了。

方式二:使用Docker(如果你熟悉Docker)

如果你已经装了Docker,用一条命令就能运行,非常快捷:

bash

bash 复制代码
docker run -d --name rtsp-server -p 8554:8554 -p 8000:8000/udp -p 8001:8001/udp aler9/rtsp-simple-server

第二步:使用FFmpeg推流

接下来,打开另一个终端窗口,用FFmpeg把视频源推到你刚启动的RTSP服务器上。你需要保持第一个终端里的MediaMTX一直在运行。

这里有几个常用的推流示例,你可以选一个试试:

  • 推送一个本地视频文件(最常用) : 用 -re 参数保证视频以正常速度播放,而不是瞬间传完。

    bash

    bash 复制代码
    ffmpeg -re -i 你的视频文件.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream
  • 循环推送一个视频文件 : 加上 -stream_loop -1,视频播完后会自动从头开始循环。

    bash

    bash 复制代码
    ffmpeg -re -stream_loop -1 -i 你的视频文件.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream
  • 推送电脑屏幕(Windows) : 可以用来共享你的桌面。

    bash

    bash 复制代码
    ffmpeg -f gdigrab -framerate 15 -video_size 1920x1080 -i desktop -c:v libx264 -preset ultrafast -f rtsp rtsp://localhost:8554/mystream

第三步:验证拉流播放

推流开始后,你可以用 ffplay 直接播放刚才推送的RTSP地址,来验证整个环境是否搭建成功:

bash

bash 复制代码
ffplay rtsp://localhost:8554/mystream

如果你用的是VLC播放器,也可以打开"网络串流",输入这个地址进行播放。

顺利的话,你应该就能看到视频画面了。如果 ffplay 提示连接失败,可以检查下第一个终端里的 mediamtx 是否正常运行。如果看到视频但感觉延迟比较高,可以试试把 rtsp_transport 设置成 TCP 模式:

bash

bash 复制代码
ffplay rtsp://localhost:8554/mystream -rtsp_transport tcp

来看看我的推流效果:

相关推荐
AiMan21 分钟前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
nice_lcj5201 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
卷无止境1 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
Moment1 小时前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试
回家路上绕了弯1 小时前
为什么还是不能直接把需求丢给 AI?
后端
锋行天下2 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
桦说编程2 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码
喵个咪3 小时前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪3 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
喵个咪3 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go