1

我正在尝试测试是否可以使用硬件代码进行实时通信,例如 100 毫秒用于 720p 客户端到客户端延迟,40 毫秒用于系统延迟和 60 毫秒用于网络,带有 VT 的 iOS 已经可以了。当我用 AMediaCodec 尝试它时,看起来编解码器总是在第一个输出可用之前缓冲超过 8 帧。继续调用 AMediaCodec_queueInputBuffer 来输入视频帧 AMediaCodec_dequeueOutputBuffer 来处理输出。但是在输入 8 帧或更多帧之前,我不会得到任何可用的输出。改为使用 AMEDIACODEC_INFO_TRY_AGAIN_LATER。尝试了 H264 高配置和基线。当我使用 Codecvisa 检查转储的 h264 流时,我得到了大小为 8 的 DPB(解码图片缓冲区),看起来像是额外缓冲的提示?

我还在 Grafika MediaCodec 示例代码中对 MoviePlayer.java 进行了一些简单的测试。我正在关注编解码器在初始解码滞后后拥有多少个输出缓冲区,初始延迟是我可以接受的,因为它只是在开始时。我添加了一个extra_buffer_cnt,它在queueInputBuffer succuss 和- dequeueOutputBuffer 时++,并且我还添加了一个while 循环来调用dequeueOutputBuffer 以确保可以及时调用dequeueOutputBuffer。从日志中,我可以看到对于某些流,额外的缓冲区始终为 8,而对于其他流,可能为 0。

12-07 10:57:45.614   : decoderInputBuffers pts 0
    submitted frame 0 to dec, size=40658
12-07 10:57:45.634   : no output from decoder available
    loop
    decoderInputBuffers pts 98000
    submitted frame 1 to dec, size=17438
12-07 10:57:45.664   : no output from decoder available
    loop
    decoderInputBuffers pts 200000
    submitted frame 2 to dec, size=17410
    decoder output buffers changed
12-07 10:57:45.674   : no output from decoder available
    loop
    decoderInputBuffers pts 351000
    submitted frame 3 to dec, size=22043
12-07 10:57:45.704   : no output from decoder available
    loop
    decoderInputBuffers pts 450000
    submitted frame 4 to dec, size=21515
12-07 10:57:45.724   : no output from decoder available
    loop
    decoderInputBuffers pts 550000
    submitted frame 5 to dec, size=21449
12-07 10:57:45.754   : no output from decoder available
    loop
    decoderInputBuffers pts 650000
    submitted frame 6 to dec, size=21640
12-07 10:57:45.774   : no output from decoder available
    loop
    decoderInputBuffers pts 750000
    submitted frame 7 to dec, size=25636
12-07 10:57:45.804   : no output from decoder available
    loop
    decoderInputBuffers pts 848000
    submitted frame 8 to dec, size=21466
12-07 10:57:45.814   : no output from decoder available
    decoder output format changed: {mime=video/raw, crop-top=0, crop-right=359, slice-height=640, color-format=2141391876, height=640, width=368, what=1869968451, buffer-size=380928, crop-bottom=639, crop-left=0, stride=384}
    loop
    decoderInputBuffers pts 950000
12-07 10:57:45.824   : submitted frame 9 to dec, size=25224
    startup lag 210.543229 ms
    surface decoder given buffer 14 (size=8)
    dequeueOutputBuffer pts 0 extra buffer 9
12-07 10:57:45.834   : surface decoder given buffer 13 (size=8)
    dequeueOutputBuffer pts 98000 extra buffer 8
    loop
    decoderInputBuffers pts 1046000
    submitted frame 10 to dec, size=25172
12-07 10:57:45.844   : surface decoder given buffer 12 (size=8)
    dequeueOutputBuffer pts 200000 extra buffer 8
12-07 10:57:45.864   : no output from decoder available
    loop
    decoderInputBuffers pts 1149000
    submitted frame 11 to dec, size=25137
12-07 10:57:45.874   : surface decoder given buffer 11 (size=8)
    dequeueOutputBuffer pts 351000 extra buffer 8
12-07 10:57:45.884   : no output from decoder available
    loop
    decoderInputBuffers pts 1248000
    submitted frame 12 to dec, size=25343
12-07 10:57:45.894   : surface decoder given buffer 10 (size=8)
    dequeueOutputBuffer pts 450000 extra buffer 8
12-07 10:57:45.914   : no output from decoder available
    loop
    decoderInputBuffers pts 1400000
    submitted frame 13 to dec, size=22197
12-07 10:57:45.924   : surface decoder given buffer 9 (size=8)
    dequeueOutputBuffer pts 550000 extra buffer 8
12-07 10:57:45.934   : no output from decoder available
    loop
    decoderInputBuffers pts 1499000
    submitted frame 14 to dec, size=26267
12-07 10:57:45.944   : surface decoder given buffer 8 (size=8)
    dequeueOutputBuffer pts 650000 extra buffer 8
12-07 10:57:45.954   : no output from decoder available
    loop
    decoderInputBuffers pts 1600000
    submitted frame 15 to dec, size=25947
12-07 10:57:45.964   : surface decoder given buffer 7 (size=8)
    dequeueOutputBuffer pts 750000 extra buffer 8
12-07 10:57:45.984   : loop
    decoderInputBuffers pts 1700000
    submitted frame 16 to dec, size=26060
12-07 10:57:45.994   : surface decoder given buffer 6 (size=8)
    dequeueOutputBuffer pts 848000 extra buffer 8
12-07 10:57:46.004   : no output from decoder available
    loop
    decoderInputBuffers pts 1799000
    submitted frame 17 to dec, size=26003
12-07 10:57:46.014   : surface decoder given buffer 5 (size=8)
    dequeueOutputBuffer pts 950000 extra buffer 8
12-07 10:57:46.024   : no output from decoder available
    loop
    decoderInputBuffers pts 1900000
    submitted frame 18 to dec, size=22085
12-07 10:57:46.034   : surface decoder given buffer 13 (size=8)
    dequeueOutputBuffer pts 1046000 extra buffer 8
12-07 10:57:46.044   : no output from decoder available
    loop
    decoderInputBuffers pts 2012000
12-07 10:57:46.054   : submitted frame 19 to dec, size=26195
    surface decoder given buffer 12 (size=8)
    dequeueOutputBuffer pts 1149000 extra buffer 8
12-07 10:57:46.074   : no output from decoder available
    loop
    decoderInputBuffers pts 2097000
    submitted frame 20 to dec, size=25963
12-07 10:57:46.084   : surface decoder given buffer 11 (size=8)
    dequeueOutputBuffer pts 1248000 extra buffer 8
12-07 10:57:46.094   : no output from decoder available
    loop
    decoderInputBuffers pts 2200000
    submitted frame 21 to dec, size=25869
4

0 回答 0