安装windows版本srs
下载链接:Windows | SRS
执行下令:
ffmpeg推流下令:
ffmpeg -i "rtsp://admin@xxzx@192.168.1.64:554/Streaming/Channels/101" -c:v copy -c:a aac -f flv "rtmp://localhost:1935/live/stream"
1. 推流本地摄像头到流媒体服务器
实用于将本地摄像头实时推流到 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 查看装备列表)。
2. 推流本地视频文件
将本地已有的视频文件推送到流媒体服务器。
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:优化推流速度。
3. 推流本地屏幕录制
将本地屏幕捕获后推流到流媒体服务器。
Linux
ffmpeg -f x11grab -i :0.0 -f flv rtmp://localhost:1935/live/stream
Windows
ffmpeg -f gdigrab -i desktop -f flv rtmp://localhost:1935/live/stream
4. 推流网络视频流
将网络上的视频流(如 HTTP 或 RTSP)转推到 RTMP 流媒体服务器。
HTTP 流
ffmpeg -re -i http://example.com/stream.m3u8 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
RTSP 流
ffmpeg -i rtsp://username:password@192.168.1.100:554/stream -f flv rtmp://localhost:1935/live/stream
5. 推流实时生成的视频内容
通过 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
6. 推流实时写入的文件
从一个实时更新的文件中读取内容举行推流。
ffmpeg -re -i fifo_input.mp4 -c:v libx264 -f flv rtmp://localhost:1935/live/stream
- 这里的 fifo_input.mp4 是一个动态写入的文件(比方,背景程序不断更新)。
7. 推流实时摄像头 + 视频叠加
将本地摄像头流与叠加的文字/图片组合后推流。
叠加文字
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
8. 推流屏幕+摄像头画中画
将屏幕录制和摄像头画面举行画中画组合后推流。
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:将摄像头画面放置在屏幕画面的右下角。
9. 推流音频(如麦克风或音频文件)
单独推送音频流到服务器。
推流本地麦克风
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
10. 推流实时截取内容
仅截取一段时间内的内容推流。
ffmpeg -re -ss 00:01:00 -t 00:00:30 -i input.mp4 -f flv rtmp://localhost:1935/live/stream
- -ss:指定开始时间(1分钟)。
- -t:指定持续时间(30秒)。
11. 转推流
将一个 RTMP 流转发到另一个 RTMP 流服务器。
ffmpeg -i rtmp://source-server/live/stream -c copy -f flv rtmp://target-server/live/stream
12. 推流分辨率/帧率/码率优化
优化分辨率、帧率和码率来控制推流质量。
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解决耽误
1. 降低编码耽误
利用低耽误编码设置
默认编码会注意压缩服从,但会增长耽误。可以利用以下参数降低耽误:
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:限定帧率以减轻处置惩罚压力。
2. 调解缓冲设置
RTMP 缓冲设置
- RTMP 推流默认会有缓冲,可以通过以下方式镌汰缓冲区引起的耽误:
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:不传递文件时长和大小(镌汰不必要的数据传输)。
3. 镌汰音频编码耽误
音频的编码和缓冲也大概增长耽误。优化参数如下:
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:启用音频同步以降低耽误。
4. 优化网络传输
网络传输速度和稳固性直接影响耽误,可以通过以下方式优化:
设置 UDP 推流
假如目标支持,利用 UDP 而非 RTMP,可进一步降低耽误:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts udp://<ip>:<port>
- 更换 <ip>:<port> 为目标服务器的 IP 和端口。
利用自定义 RTMP 超时时间
调解 RTMP 超时设置,镌汰网络传输的额外耽误:
ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -timeout 1000000 -f flv rtmp://localhost:1935/live/stream
- -timeout 1000000:设置网络超时时间(单位:微秒)。
5. 优化服务器端设置
推流的耽误不光由 ffmpeg 决定,还受服务器(如 Nginx RTMP 或 Wowza)影响。
优化 Nginx RTMP 设置
在 nginx.conf 中优化以下参数:
rtmp { server { listen 1935; chunk_size 4096; # 减小 chunk_size 降低耽误(单位:字节) application live { live on; gop_cache off; # 禁用 GOP 缓存以降低耽误 sync 10ms; # 同步时间戳(低值可降低耽误) publish_notify on; # 启用推流状态关照 } } }
6. 硬件加速
假如你利用的机器性能有限,可以启用硬件加速来镌汰耽误。
Intel Quick Sync
ffmpeg -re -i input.mp4 -c:v h264_qsv -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/stream
NVIDIA GPU (NVENC)
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:为低耽误优化。
7. 监控耽误效果
可以利用 ffprobe 检测流的耽误:
ffprobe -i rtmp://localhost:1935/live/stream -show_entries frame=pkt_pts_time -select_streams v:0
实时监控帧时间戳,判断耽误效果。
8. 综合低耽误推流示例
整合以上优化,实用于大多数场景的低耽误推流:
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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |