由于项目需要检测媒体流的码率,有很多方法,但是不建议使用ffprobe进行检测
root:~# ffprobe -v quiet -show_streams 1.flv|grep bit_rate
bit_rate=128000
max_bit_rate=N/A
有2点原因
1、ffprobe检测rtmp、http等流不一定能检测出码率。因为通过一些直播服务器,可能该数据会丢失。
2、检测的码率是设置在媒体头的数据,不一定是真实码率。比如对推流参数的调整,即使ffprobe检测出来的是128K,但是实际可能是1M也有可能。
推荐的2种方法
1、通过ffmpeg命令行推流可以获取到平均码率信息,其中的bitrate就是。这里的输入源支持各种形式,如文件或者流地址等
#ffmpeg -re -y -i ./1.flv -c:v copy -f flv /dev/null
frame= 326 fps= 25 q=-1.0 Lsize= 212kB time=00:00:12.82 bitrate= 135.7kbits/s speed= 1x
2、对于流地址可以通过下载媒体流文件的大小再除以时间,也可得到平均码率.
如我们先录制10秒视频
ffmpeg -re -y -i rtmp://127.0.0.1/live/1 -c:v copy -t 00:00:10 -f flv ./1.flv
得到它的大小
root:~# ls -l 1.flv
-rw-r--r-- 1 root root 217449 8月 4 17:26 1.flv
217449B÷10秒÷1000=21.7449 KByte/s
21.7449 KByte/s x 8= 173.9592Kbit/s 这就得到我们想要的这个视频在这10秒的平均码率大小。
坑:
有时变换ffmpeg的保存格式得出的码率其实相差不大,但是如果做了转码(如-c:v libx264或者用了其他录制工具录下来)可能会导致码率变化,导致数据不准。
大家有啥又快又方便又准的方法也可以提供一下