Я пытаюсь понять, как использовать класс Android MediaCodec для декодирования видео H.264. Для начала я пытаюсь вручную разобрать единицы NAL из файла H.264 и передать их MediaCodec для декодирования. Я считаю, что правильно разбираю элементы NAL из файла (поиск 0x00 0x00 0x01 в файле, указывает начало блока NAL), но MediaCodec всегда отключается и возвращает -1 каждый раз, когда я делаю вызов dequeueOutputBuffer(). Кто-нибудь знает особенности того, как подавать блоки NAL H.264 в MediaCodec для декодирования? Должен ли я снимать последовательность 0x00 0x00 0x01, прежде чем я отправлю ей блок NAL? Нужно ли игнорировать/удалять определенные типы элементов NAL? Нужно ли предварительно добавлять извлеченные данные SPS и PPS (с или без последовательности 0x00 0x00 0x01) перед каждым блоком NAL? Я играю с большим количеством идей здесь, и никто из них не выкачивает. Любое руководство в этой области было бы очень оценено.Как я могу подавать блоки NAL H.264 в Android MediaCodec для декодирования?
7
A
ответ
4
Насколько я понял, декодер вернет -1 на dequeueOutputBuffer(), если вы не передаете ему информацию sps/pps. Когда вы это сделаете, декодер должен вернуться с флагом INFO_OUTPUT_FORMAT_CHANGED (-2) на dequeueOutputBuffer(), после чего будет правильно возвращать декодированные кадры.
Если декодер все еще возвращает -1, попробуйте добавить информацию о sps/pps в декодер с флагом BUFFER_FLAG_CODEC_CONFIG.
0
AFAIK вам нужно взять заголовок, а также подать его с помощью SPS/PSS в качестве первых буферов, но получение -1 не является большим делом, это будет нормальное поведение. Некоторые устройства будут сбой, если они не будут переданы SPS/PPS перед другими NAL.
Смежные вопросы
- 1. Как использовать класс MediaCodec для декодирования потоков H.264
- 2. Странные заголовки NAL H.264
- 3. H.264 Temporal Reference
- 4. Android MediaCodec h.264 Декодирование Поверхностный режим Цветовое кодирование
- 5. H.264 закодированное разделение NAL/slice
- 6. Android MediaCodec не работает
- 7. Библиотека для декодирования H.264 RTSP stream
- 8. Как определить последний NAL узла доступа в H.264
- 9. Как найти заголовок Nal в h.264 RTP-пакет
- 10. Декодирование потока H.264 с использованием MediaCodec API JNI
- 11. Декодирование H.264 отдельных единиц измерения
- 12. Live encode поток H.264 на Android
- 13. Проблемы с декодером MediaCodec с вызовом dequeueOutputBuffer (H.264)
- 14. Декодирование потока h.264 с MediaCodec, dequeueOutputBuffer всегда возвращает -1
- 15. Android H.263 или H.264 файл?
- 16. Вывод Raw H.264 с помощью MediaCodec not playble
- 17. как разобрать блок доступа в h.264
- 18. h.264 и mpeg header
- 19. Преобразование H.264 в H.263 для телефона android
- 20. Tune FFmpeg H.264 Decoder
- 21. Ошибка декодирования MediaCodec h264 на одном устройстве
- 22. Декодирование H.264 NALU stream
- 23. Openmax на Android для декодера H.264?
- 24. H.264 AVC поддерживается для телефонов android?
- 25. как анализировать двоичные данные этих пакетов h.264 и организовать поток h.264 для их декодирования, используя ffmpeg?
- 26. Mediacodec контролирует прогресс декодирования
- 27. Как обнаружить аппаратное ускорение Android H.264
- 28. Бесплатные/Open h.264 библиотеки декодирования видео? (Non-GPL)
- 29. Android MediaCodec MixVBP: неизвестный заголовок 12 разобран
- 30. H.264 в Firefox
В качестве альтернативы вы можете добавить его в «MediaFormat». Примеры обоих подходов можно увидеть в CTS EncodeDecodeTest. См. Строки 567 и 855 в https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java – fadden