推流场景
推本地文件为直播流(RTMP)
bash
复制代码
ffmpeg -re -stream_loop -1 -i input.mp4 \
-c:v libx264 -preset veryfast -b:v 1500k \
-c:a aac -b:a 128k \
-f flv rtmp://your_server/live/stream
摄像头 + 麦克风 推流(Linux)
bash
复制代码
ffmpeg -f v4l2 -i /dev/video0 \
-f alsa -i default \
-c:v libx264 -preset veryfast -c:a aac \
-f flv rtmp://your_server/live/stream
屏幕录制推流(Linux X11)
bash
复制代码
ffmpeg -f x11grab -s 1920x1080 -r 25 -i :0.0 \
-f alsa -i default \
-c:v libx264 -preset ultrafast -c:a aac \
-f flv rtmp://your_server/live/stream
拉流场景
拉 RTMP 流播放本地或转发
bash
复制代码
ffmpeg -i rtmp://server/live/stream \
-f sdl "RTMP Viewer"
拉 RTSP 流保存为 MP4
bash
复制代码
ffmpeg -rtsp_transport tcp -i rtsp://ip/stream \
-c copy -f mp4 output.mp4
拉 RTSP → RTMP 转发
bash
复制代码
ffmpeg -rtsp_transport tcp -i rtsp://ip/stream \
-c:v copy -c:a copy -f flv rtmp://server/live/stream
拉 HLS 流并推送 RTMP
bash
复制代码
ffmpeg -i https://yourdomain/playlist.m3u8 \
-c copy -f flv rtmp://your_server/live/stream
协议转换 / 多协议分发
RTMP → HLS
bash
复制代码
ffmpeg -i rtmp://your_server/live/stream \
-c:v copy -c:a copy \
-f hls -hls_time 6 -hls_list_size 5 -hls_flags delete_segments \
./hls/playlist.m3u8
RTMP → fMP4 (for LL-HLS/DASH)
bash
复制代码
ffmpeg -i rtmp://your_server/live/stream \
-c copy -f mp4 -movflags frag_keyframe+empty_moov \
output.mp4
直播录制(支持分段/时间戳)
单文件录制直播流
bash
复制代码
ffmpeg -i rtmp://your_server/live/stream \
-c copy output.mp4
按时间分段保存
bash
复制代码
ffmpeg -i rtmp://your_server/live/stream \
-c copy -f segment -segment_time 600 -reset_timestamps 1 \
record_%Y%m%d_%H%M%S.mp4
直播转码 + 推送多码率
转码 + 推多码率(1080p、720p)
bash
复制代码
ffmpeg -i rtmp://your_server/live/stream \
-map 0:v -map 0:a -s:v:0 1920x1080 -b:v:0 3000k \
-map 0:v -map 0:a -s:v:1 1280x720 -b:v:1 1500k \
-c:v libx264 -preset veryfast -c:a aac -f tee \
"[f=flv]rtmp://server/live/1080p|[f=flv]rtmp://server/live/720p"
HLS 直播流切片生成(网页播放用)
bash
复制代码
ffmpeg -re -i input.mp4 \
-c:v libx264 -c:a aac \
-f hls -hls_time 5 -hls_list_size 10 \
-hls_flags delete_segments+append_list \
./hls/live.m3u8
常用参数说明
参数 |
含义 |
-re |
模拟实时速率播放输入 |
-c copy |
不转码,直接拷贝流 |
-c:v libx264 |
使用 H.264 编码 |
-preset |
速度优先级:ultrafast → medium → slow |
-f flv |
输出封装为 FLV(适用于 RTMP) |
-segment_time |
每段时间长度(用于分段录制) |
-hls_time |
每个 HLS ts 文件时长 |
-hls_list_size |
m3u8 保留多少段 |
-rtsp_transport tcp |
使用 TCP 模式拉 RTSP(更稳定) |
推流到多路 CDN(Tee 多输出)
bash
复制代码
ffmpeg -re -i input.mp4 \
-c:v libx264 -c:a aac -f tee \
"[f=flv]rtmp://cdn1/live/stream|[f=flv]rtmp://cdn2/live/stream"
直播低延迟优化建议
项目 |
建议 |
编码延迟 |
使用 ultrafast preset |
GOP 设置 |
保持稳定 GOP(如每2秒关键帧) |
音频设置 |
使用 AAC,48kHz,128kbps |
推送协议 |
优先使用 RTMP 或 LL-HLS |
网络 |
优先使用 TCP,防丢包 |
播放器端 |
缩短缓冲区,设置超时重连策略 |