用 FFmpeg 实现 RTMP 推流直播
-
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。
-
一般来说,直播服务商会给你:
-
✅ 一个 RTMP 推流地址(你推视频上去)
-
✅ 一个 HLS 或 FLV 拉流地址(观众观看用)
-
看你是自己构建的直播平台还是接入第三方直播服务(如微赞、抖音、B站等),反正拿到这个推流的RTMP地址就可以了。
我这里是用微赞
观看地址:https://ject.h5.weizan.cn/sl/0ea4bd2f0623ed57a810621e1109f1e3
推流地址:rtmp://push-hssh.vzan.com/v/1982222222221?t=911111
拉流地址:https://p2hssh.vzan.com/111111/22222/live.m3u8?zbid=3333&tpid=4444
基础命令结构
FFmpeg 推流使用 flv 格式通过 RTMP 协议推送,命令格式如下:
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -tune zerolatency -c:a aac -f flv "rtmp://your.rtmp.server/live/stream-key"
参数解释:
参数 | 含义 |
---|---|
-re | 按真实速度读取输入,适合直播 |
-i input.mp4 | 输入源(可为视频文件、摄像头等) |
-c:v libx264 | 视频编码格式 |
-preset veryfast | 编码速度设置,越快 CPU 压力越小 |
-tune zerolatency | 直播优化,降低延迟 |
-c:a aac | 音频编码(推荐使用 AAC) |
-f flv | 输出格式,RTMP 需要使用 FLV 容器 |
"rtmp://..." | 推流目标地址 |
几种常见推流场景
1. 推送本地视频文件
ffmpeg -re -i index.mp4 -c:v libx264 -preset veryfast -tune zerolatency -c:a aac -f flv "rtmp://your.rtmp.server/live/stream-key"
推送本地的index.mp4
2. 循环推送视频(无限轮播)
ffmpeg -re -stream_loop -1 -i 6a7045fbf54a85c6c3979fdc23526907.mp4 -c:v libx264 -preset veryfast -tune zerolatency -c:a aac -f flv "rtmp://your.rtmp.server/live/stream-key"
视频播放完自动回到开头继续推
3. 推送摄像头画面
Windows 示例(先列出摄像头名称):
ffmpeg -list_devices true -f dshow -i dummy
然后推流:
ffmpeg -f dshow -i video="Integrated Camera" -c:v libx264 -preset veryfast -tune zerolatency -c:a aac -f flv "rtmp://your.rtmp.server/live/stream-key"
4. 推送桌面屏幕(Windows)
ffmpeg -f gdigrab -framerate 15 -i desktop -c:v libx264 -preset veryfast -tune zerolatency -f flv "rtmp://your.rtmp.server/live/stream-key"