1

我观察到对于相同价格范围内的设备,基于 Snapdragon 的解码器可以比基于 Exynos 的解码器具有更高的解码延迟。这在解码 H264 流时,SPS 中的值“pic_order_cnt_type”设置为 0 而不是 2 时最为明显。我想知道您是否也观察到这种行为以及是否有任何解决方法(我已经在这里打开了一个问题但目前没有回应)

一些技术细节:

我已经构建了一个简单的示例应用程序,它使用 AMediaCodec 来解码 h264 流。它将“解码延迟”作为测试结果上传到 Firestore 数据库。代码

以下是 Pixel 4(使用 snapdragon 解码器)和三星 Galaxy Note 9(使用 exynos 解码器)上不同 h264 流的解码延迟比较:

像素 4 银河注 9
像素 4 在此处输入图像描述

如您所见,对于名为 jetson/h264/2/test.h264 的视频,snapdragon 设备的解码时间比三星设备高约 21 倍。此流的 pic_order_cnt_type==0。然而,在其他流上,解码时间的差异是微不足道的。(他们都使用 pic_order_cnt_type==2)

决定骁龙解码器是否进入“低延迟解码路径”的主要参数似乎是上面提到的 pic_order_cnt_type 值。如果我正确理解 h264 规范,如果此值设置为 2 图片重新排序是不可能的(没有缓冲帧)。如果设置为 0,图片重新排序是可能的,但编码器不必使用。但是,snapdragon 解码器并没有区分“可能”和“编码器实际使用”,导致解码延迟差异很大。

我能够通过在将比特流发送到解码器之前对其进行操作来减少 snapdragon 的解码延迟(添加带有 num_reorder_frames=0 和 max_dec_frame_buffering=0 的 VUI),但它永远不会导致 0 个缓冲帧,只会产生更少的缓冲帧。

4

0 回答 0