Как уменьшить задержку декодирования видео Android hw?30мс для H264 720p? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь проверить, возможно ли использовать документирование HW для связи в реальном времени, скажем, 100 мс для задержки клиента 720p, 40 мс для системной задержки и 60 мс для сети, iOS с VT уже в порядке.Когда я попробовал это с AMediaCodec, похоже, что кодек всегда буферизует более 8 кадров до того, как будет доступен первый вывод.Продолжайте вызывать AMediaCodec_queueInputBuffer для ввода видеокадров AMediaCodec_dequeueOutputBuffer для обработки вывода.Но я не получу никаких доступных выходных данных, пока не будет введено 8 или более кадров. Вместо этого получил AMEDIACODEC_INFO_TRY_AGAIN_LATER.Пробовал как H264 высокий профиль и базовый уровень.Я получил DPB (Decoded Picture Buffer) размера 8, когда я проверял выгруженный поток h264 с помощью Codecvisa, похоже на подсказку для дополнительной буферизации?

Я также выполнил простое тестирование MoviePlayer.java в Grafika MediaCodec.образец кода.Я обращаю внимание на то, сколько выходных буферов хранит кодек после начальной задержки декодирования. Первоначальная задержка - это то, что я могу принять, так как это только в начале.Я добавляю 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
...