FFMPEG 推流并转码 - housekeeper-software/tech GitHub Wiki
从文件中推流
./ffmpeg -re -stream_loop -1 -i 1.mp4 -map 0 -c:a copy -c:s copy -vf scale=640:360 -an -vcodec libx264 -b:v 720k -preset:v ultrafast -tune:v zerolatency -g 30 -f flv -y rtmp://192.168.180.67/live/livestream
ffmpeg -re -rtsp_transport tcp -threads 1 -buffer_size 1024000 -max_delay 500000 -i rtsp:admin:@192.168.3.22:554/stream1 -c:v libx264 -b:v 350k -profile:v baseline -level 3.0 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -fflags nobuffer -preset ultrafast -tune zerolatency -vcodec h264 -f flv -an rtmp://192.168.153.128:1935/live/192168322
--from https://www.jianshu.com/p/2647393f956a
从rtsp拉流转码推流
./ffmpeg -i rtsp://username@password:xxx.xx.xx.xx:port/ -map 0 -c:a copy -c:s copy -vf scale=640:360 -an -vcodec libx264 -b:v 720k -preset:v ultrafast -tune:v zerolatency -g 30 -f flv -y rtmp://192.168.180.67/live/livestream
这里假设 rtsp流是 h265,我们转为h264然后推流
-g 30,表示30帧输出一个关键帧,这样可能有效的降低观看端延迟
此种方式比较耗费CPU资源,包含265解码,h264编码,所以,网关最好有GPU
D:\ffmpeg\bin\ffmpeg.exe -re -rtsp_transport tcp -i "rtsp://192.168.19.102:9090/dss/monitor/params?cameraid=1000112$0&substream=1" -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 "rtmp://localhost:1935/mylive/1"
从rtsp拉流直接推流
./ffmpeg -i rtsp://admin:[email protected]:554/Streaming/Channels/102 -vcodec copy -acodec copy -f flv -y rtmp://192.168.180.67/live/livestream
如果摄像头输出h264,可以直接推流,无需转码,此种方式CPU占用很低,因为只是收包再打包而已。
SRS 配置
如果我们前端选择webrtc,./objs/srs -c rtmp2rtc.conf
candidate $CANDIDATE;默认为本机ip
推流端用 ffmpeg, 推rtmp流到srs,srs转换为webrtc
FFMPEG 参数
-rtsp_transport tcp:用tcp拉流,默认用udp拉流
-max_delay 1000 延迟( 微妙)
ffmpeg -rtsp_transport tcp -i rtsp://admin:[email protected]:554/Streaming/Channels/101 -vcodec libx264 -preset ultrafast -tune zerolatency -b:v 400k -r 25 -s 640x480 -g 30 -max_delay 100 -f flv -y rtmp://192.168.180.70:1935/live/123456
ffmpeg -rtsp_transport tcp -i rtsp://admin:[email protected]:554/Streaming/Channels/101 -map 0 -c:v libx264 -pix_fmt yuv420p -strict experimental -crf 20 -preset ultrafast -tune zerolatency -b:v 400k -r 25 -s 640x480 -g 30 -max_delay 1000 -f flv -y rtmp://192.168.180.70:1935/live/123456
在未知源分辨率的情况下设置目标分辨率
ffmpeg -i 1.mp4 -strict -2 -vf scale=-2:480 4.mp4
表示,指定高度为480,但宽度根据480同比缩放
对输入视频成比例缩放
ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4
改变为原视频的90%大小:
ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4
参考
https://www.jishuchi.com/read/ffmpeg-basics/12475
https://developer.nvidia.com/zh-cn/blog/nvidia-ffmpeg-transcoding-guide/