由于项目需要检测媒体流的码率,有很多方法,但是不建议使用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或者用了其他录制工具录下来)可能会导致码率变化,导致数据不准。

大家有啥又快又方便又准的方法也可以提供一下