FFmpeg 推流会用到的参数 {#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-服务器}
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 2 3
| file 'video1.mp4' file 'video2.mp4' file 'video3.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"
|