利用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

来看看我的推流效果:

相关推荐
垚垚学技术_聚焦云原生1 小时前
K8s Pod 完整生命周期详解
后端
JavaGuide1 小时前
Github 史诗级故障,与此同时,Cursor 版「GitHub」正式上线!
前端·后端
不一样的少年_1 小时前
修了 Bug、做了重构,为什么老板还是觉得你没产出?
前端·后端·程序员
水深火乐2 小时前
安全地生成验证码、密码和 Token
后端
小强19882 小时前
SQL Server 慢查询怎么定位?一套从“卡”到“快”的完整排查流程
后端
水深火乐2 小时前
interface和any
后端
步行cgn2 小时前
MyBatis Error evaluating expression ‘ids‘. Return value (3) was not iterable 错误详
java·后端
神奇小汤圆2 小时前
Spring Boot + LangChain4j实现RAG——从零搭建企业级知识库问答系统
后端
H_Peak2 小时前
Python运算符与流程控制:if条件判断
后端