提前在电脑上把视频转码为 H.264 视频 + AAC 音频 封装的 MP4 文件。
这样在开发板上推流时,可以直接使用 -c copy(不解码不编码),CPU 占用率不到10%
在电脑上用 FFmpeg ,把视频转换成 imx6ull 开发板专用的格式:
设置分辨率: "scale=480:272" 或者 "scale=800:480"
下面是视频的转换命令:
ffmpeg -i 原始视频.mp4 -c:v libx264 -profile:v baseline -preset fast -vf "scale=480:272" -c:a aac -b:a 64k output-imx6ull.mp4
转换后的视频,拷贝到开发板。
开发板的推流命令:
ffmpeg -re -i output-imx6ull.mp4 -c copy -f flv rtmp://192.168.137.199:1935/live/test
虚拟机的拉流命令:
ffplay -fflags nobuffer -flags low_delay -framedrop rtmp://192.168.137.199:1935/live/test
虚拟机拉流播放 800x480 mp4 视频

imx6ull CPU 占用率不到10%

如果想让这个视频像监控一样 24 小时循环推流,需要加一个 -stream_loop -1 参数:
ffmpeg -stream_loop -1 -re -i output-imx6ull.mp4 -c copy -f flv rtmp://192.168.137.199:1935/live/test
-stream_loop -1:表示无限循环。0表示不循环,1表示循环1次(播放2遍),-1表示永远播下去。
结合上一篇博客,阶段性总结:
- 推摄像头(必须软编码):用
-c:v libx264 -pix_fmt yuv420p -preset ultrafast死压 CPU。 - 推本地视频(必须硬拷贝):提前在 PC 转好 H.264 格式,用
-c copy零消耗推流。 - 低延迟拉流:用
ffplay -fflags nobuffer -flags low_delay -framedrop强制追赶最新帧。