FFmpeg 推流会用到的参数
-re
推流-i
输入文件-rtsp_transport tcp
TCP 推流,UDP 推流缺省即可-stream_loop -1
循环次数,-1
为无限循环-c:v libx264
以 H.264 进行重新编码-c:a aac
以 AAC 编码输出音频-b:v 1m
输出视频码率-b:a 320k
输出音频码率-r 25
输出帧率-ar 44100
输出音频采样率-ac 2
输出音频声道数-f flv
以 FLV 格式输出
推送流数据至 RTMP 服务器
RTMP 的封装格式为 FLV,视频流格式为 H.264,音频流格式为 AAC
视频
如果原视频的格式匹配,可以直接推送原视频:
1 | ffmpeg -re -i "video.mp4" -c copy -f flv "rtmp://127.0.0.1/stream/12345678" |
如果考虑到带宽不足等因素,可以对视频进行重新编码,但这样会消耗较多计算资源:
1 | ffmpeg -re -i "video.mp4" -vcodec libx264 -acodec aac -b:v 1m -b:a 320k -f flv "rtmp://127.0.0.1/stream/12345678" |
音频
由于大多数直播平台都不支持音频流,所以需要将音频流转换为视频流,这里使用 lavfi
生成一段白色的视频流,然后将音频流和视频流进行混合推流:
1 | ffmpeg -f lavfi -re -i "color=s=1920x1080:r=25:c='#FFFFFF':d=5" -f flac -re -stream_loop -1 -i "audio.flac" -c:v libx264 -b:v 320k -c:a aac -b:a 320k -f flv "rtmp://127.0.0.1/stream/12345678" |
播放列表
FFmpeg 支持播放列表,只需要通过 -i
参数将播放列表文件输入。
创建播放列表文件 playlist.txt
:
1 | file 'video1.mp4' |
在格式相同的情况下可以直接通过一条命令推流:
1 | ffmpeg -re -i "playlist.txt" -c copy -f flv "rtmp://127.0.0.1/stream/12345678" |
网络视频流
FFmpeg 的 -i
参数输入的可以是视频流或 m3u8 文件,这样可以实现转播网络视频流:
1 | ffmpeg -re -i "http://127.0.0.1/stream/12345678/play.m3u8" -c copy -f flv "rtmp://127.0.0.1/stream/12345678" |