下载链接:Windows | SRS
执行命令:
ffmpeg -i "rtsp://admin@[email protected]:554/Streaming/Channels/101" -c:v copy -c:a aac -f flv "rtmp://localhost:1935/live/stream"
适用于将本地摄像头实时推流到 RTMP 服务器。
ffmpeg -f v4l2 -i /dev/video0 -f flv rtmp://localhost:1935/live/stream
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:0 -f flv rtmp://localhost:1935/live/stream
/dev/video0
为摄像头设备路径。hw:0
为音频输入设备路径(可用 arecord -l
查看设备列表)。将本地已有的视频文件推送到流媒体服务器。
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -f flv rtmp://localhost:1935/live/stream
-re
:以文件的原始播放速度(实时)进行推流。input.mp4
:本地视频文件路径。-c:v libx264
:使用 H.264 编码。-preset veryfast
:优化推流速度。将本地屏幕捕获后推流到流媒体服务器。
ffmpeg -f x11grab -i :0.0 -f flv rtmp://localhost:1935/live/stream
:0.0
:代表显示器,适用于 X11 系统。
ffmpeg -f gdigrab -i desktop -f flv rtmp://localhost:1935/live/stream
gdigrab
:Windows 的屏幕捕获接口。将网络上的视频流(如 HTTP 或 RTSP)转推到 RTMP 流媒体服务器。
ffmpeg -re -i http://example.com/stream.m3u8 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
ffmpeg -i rtsp://username:[email protected]:554/stream -f flv rtmp://localhost:1935/live/stream
通过 ffmpeg
自定义生成实时视频并推送到流媒体服务器。
ffmpeg -f lavfi -i color=c=blue:s=1280x720:r=30 -f flv rtmp://localhost:1935/live/stream
color=c=blue
:生成蓝色画面。s=1280x720
:分辨率为 1280x720。r=30
:帧率为 30 fps。
ffmpeg -f lavfi -i testsrc=s=1280x720:r=30 -f flv rtmp://localhost:1935/live/stream
从一个实时更新的文件中读取内容进行推流。
ffmpeg -re -i fifo_input.mp4 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
fifo_input.mp4
是一个动态写入的文件(例如,后台程序不断更新)。将本地摄像头流与叠加的文字/图片组合后推流。
ffmpeg -f v4l2 -i /dev/video0 -vf "drawtext=text='Live Stream':fontcolor=white:fontsize=24:x=10:y=10" -f flv rtmp://localhost:1935/live/stream
ffmpeg -f v4l2 -i /dev/video0 -i overlay.png -filter_complex "[0:v][1:v] overlay=10:10" -f flv rtmp://localhost:1935/live/stream
将屏幕录制和摄像头画面进行画中画组合后推流。
ffmpeg -f x11grab -i :0.0 -f v4l2 -i /dev/video0 -filter_complex "[0:v][1:v] overlay=W-w-10:H-h-10" -f flv rtmp://localhost:1935/live/stream
W-w-10:H-h-10
:将摄像头画面放置在屏幕画面的右下角。单独推送音频流到服务器。
ffmpeg -f alsa -i hw:0 -f flv rtmp://localhost:1935/live/stream
ffmpeg -re -i input.mp3 -f flv rtmp://localhost:1935/live/stream
仅截取一段时间内的内容推流。
ffmpeg -re -ss 00:01:00 -t 00:00:30 -i input.mp4 -f flv rtmp://localhost:1935/live/stream
-ss
:指定开始时间(1分钟)。-t
:指定持续时间(30秒)。将一个 RTMP 流转发到另一个 RTMP 流服务器。
ffmpeg -i rtmp://source-server/live/stream -c copy -f flv rtmp://target-server/live/stream
-c copy
:不重新编码,直接转发。优化分辨率、帧率和码率来控制推流质量。
ffmpeg -f v4l2 -i /dev/video0 -s 1280x720 -r 30 -b:v 1000k -f flv rtmp://localhost:1935/live/stream
-s 1280x720
:设置分辨率为 1280x720。-r 30
:设置帧率为 30 fps。-b:v 1000k
:限制视频码率为 1000 kbps。默认编码会注重压缩效率,但会增加延迟。可以使用以下参数降低延迟:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/stream
-preset ultrafast
:使用最快的编码预设(牺牲一些压缩率)。-tune zerolatency
:专为低延迟流媒体优化。-g 30
:设置关键帧间隔(GOP),较小的值可降低延迟,推荐设置为帧率的 1 倍(如 30 fps 时设置为 30)。-r 30
:限制帧率以减轻处理压力。
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -rtmp_buffer 100 -f flv rtmp://localhost:1935/live/stream
-rtmp_buffer 100
:设置 RTMP 缓冲区为 100 毫秒(默认较高)。-flvflags no_duration_filesize
:不传递文件时长和大小(减少不必要的数据传输)。音频的编码和缓冲也可能增加延迟。优化参数如下:
ffmpeg -re -i input.mp4 -c:a aac -b:a 64k -ar 44100 -ac 2 -af aresample=async=1 -f flv rtmp://localhost:1935/live/stream
-c:a aac
:使用 AAC 音频编码。-b:a 64k
:降低音频码率以减小带宽占用。-ar 44100
:设置音频采样率。-af aresample=async=1
:启用音频同步以降低延迟。网络传输速度和稳定性直接影响延迟,可以通过以下方式优化:
如果目标支持,使用 UDP 而非 RTMP,可进一步降低延迟:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts udp://
:
:
为目标服务器的 IP 和端口。调整 RTMP 超时设置,减少网络传输的额外延迟:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -timeout 1000000 -f flv rtmp://localhost:1935/live/stream
-timeout 1000000
:设置网络超时时间(单位:微秒)。推流的延迟不仅由 ffmpeg
决定,还受服务器(如 Nginx RTMP 或 Wowza)影响。
在 nginx.conf
中优化以下参数:
rtmp { server { listen 1935; chunk_size 4096; # 减小 chunk_size 降低延迟(单位:字节) application live { live on; gop_cache off; # 禁用 GOP 缓存以降低延迟 sync 10ms; # 同步时间戳(低值可降低延迟) publish_notify on; # 启用推流状态通知 } } }
如果你使用的机器性能有限,可以启用硬件加速来减少延迟。
ffmpeg -re -i input.mp4 -c:v h264_qsv -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/stream
ffmpeg -re -i input.mp4 -c:v h264_nvenc -preset p1 -tune ll -f flv rtmp://localhost:1935/live/stream
-preset p1
:最快的 NVENC 预设。-tune ll
:为低延迟优化。可以使用 ffprobe
检测流的延迟:
ffprobe -i rtmp://localhost:1935/live/stream -show_entries frame=pkt_pts_time -select_streams v:0
实时监控帧时间戳,判断延迟效果。
整合以上优化,适用于大多数场景的低延迟推流:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -g 30 -rtmp_buffer 100 \ -c:a aac -b:a 64k -af aresample=async=1 -f flv rtmp://localhost:1935/live/stream