Официальным способом является наличие префиксов начального кода (которые необходимы для наличия нескольких единиц NAL в одном пакете) — это то, что ожидают все декодеры OpenMAX IL (стандарт, используемый внутри MediaCodec) (даже если некоторые также могут поддерживать другие форматы). ). Независимо от того, есть ли у вас SPS/PPS в отдельном буфере (с установленным флагом BUFFER_FLAG_CODEC_CONFIG
) или в начале буфера с модулями VCL NAL, не должно иметь значения — я думаю, что декодеры должны иметь возможность обрабатывать и то, и другое. Я не думаю, что вы найдете какой-либо отдельный документ, разъясняющий это для Android, кроме неявного вывода из того, что на самом деле делают устройства.
Можете ли вы назвать, какие устройства (и какие версии платформ) выводят какую комбинацию этих вариантов битового потока, и какая комбинация не работает на каком устройстве? Насколько я знаю, поток с присутствующими стартовыми кодами должен работать везде, но, конечно, могут быть исключения. Начиная с Android 4.3, эти функции должны работать намного лучше, чем в версиях 4.1 и 4.2.
Некоторые поставщики, кажется, делают нестандартные вещи в MediaExtractor - я написал отчет об ошибке по адресу https://code.google.com/p/android/issues/detail?id=74356. В этом случае особое нестандартное поведение Samsung сигнализируется с помощью ключа isDMCMMExtractor=1
в MediaFormat. Я действительно согласен с тем, что MediaExtractor должен быть более строгим, потому что сейчас он в основном используется только для передачи данных в MediaCodec (где предполагается, что он понятен, по крайней мере, для аппаратных кодеков конкретного поставщика), но трудно сказать, что он на самом деле делает. , если приложение хочет сделать что-то еще с выходными данными MediaExtractor (например, декодировать с помощью стороннего декодера или отправить извлеченные данные по сети и т. д.).
Если какое-то устройство не может декодировать де-факто стандартный формат битового потока (но успешно только в том случае, если оно искажено так, как это делает MediaExtractor этой платформы), похоже, требуется еще один тест на совместимость с CTS путем тестирования декодирования необработанных, жестко закодированных пакетов (так что что MediaExtractor не может вмешиваться и преобразовывать вещи). Правильно ли работают на этом устройстве тесты CTS, такие как EncodeDecodeTest (см. http://bigflake.com/mediacodec/)? Если это так, но если декодирование стандартных форматов пакетов не удается, это будет означать, что кодировщик устройства также выдает что-то нестандартное.
person
mstorsjo
schedule
01.03.2015