我正在尝试使用Gstreamer和h264编解码器在Freescale imx6上构建实时视频流嵌入式服务器。客户端(Linux PC)通过无线链接连接,该链接通过流传输服务器传输的视频。
最近,我进行了一些测试,以测量Freescale imx6处理器上h264编码文件的平均比特率。我使用了GStreamer元素“ testvideosrc”,将其运行了60秒钟,并使用了利用硬件编码器(h264)的gstreamer-imx插件对其进行了编码并保存了文件,并计算了比特率。 以下是命令:
timeout --signal=SIGINT 60s \
gst-launch-1.0 -ev videotestsrc pattern=18 ! \
video/x-raw,width=100,height=50,framerate=10/1 ! \
imxvpuenc_h264 bitrate=5 ! h264parse ! \
filesink location=60s.h264 && \
echo $(( $(stat --format=%s 60s.h264) / 60 * 8))
该测试是在10 fps下针对不同的分辨率执行的,其比特率如下:
Resolution BitRate
100 x 50 ~120.3K
320 x 240 ~93.7K
640 x 480 ~52.7K
1280 x 960 ~32.3K
我试图了解H264编码器的行为,以了解为什么比特率与分辨率大小的增加成反比。我曾希望随着分辨率的提高,比特率也将提高,因此选择了较低分辨率的图像,以便通过无线链接进行流传输。 谁能解释,为什么h264 codedc存在此行为?还是我在理解比特率需求上有错。