Формат конфигурационной записи декодера H. 264, взятой из файла. mp4


Я проверяю запись конфигурации декодера, содержащуюся в видеофайле. mp4, записанном с устройств Android. Некоторые устройства имеют странные или неправильные параметры, записанные в конфигурационной записи декодера.

Вот пример из Galaxy Player 4.0, который неверен:

DecoderConfigurationRecord: 010283f2ffe100086742000de90283f201000568ce010f20
       pictureParameterSetNALUnits : 68ce010f20
       AVCLevelIndication : 242
       AVCProfileIndication : 2
       sequenceParameterSetNALUnits : 6742000de90283f2
       lengthSizeMinusOne : 3
       configurationVersion : 1
       profile_compatibility : 131
       profile_idc : 103
       constraint_set : 16
       level_idc : 0

AVCLevelIndication == 242 это неверно, потому что стандартное состояние 51 является наивысшим значением.

AVCProfileIndication должен быть внутри (66, 77, 88, 100, 120, ..)

profile_compatibility называется constraint_set?_flags и 2 наименее значимых бита являются зарезервировано и разделено, чтобы быть равным 0

Вот как это должно выглядеть:

DecoderConfigurationRecord: 0142000dffe100086742000de90283f201000568ce010f20
       pictureParameterSetNALUnits : 68ce010f20
       AVCLevelIndication : 13
       AVCProfileIndication : 66
       sequenceParameterSetNALUnits : 6742000de90283f2
       lengthSizeMinusOne : 3
       configurationVersion : 1
       profile_compatibility : 0
       profile_idc : 103
       constraint_set : 16
       level_idc : 0
Как можно вывести AVCLevelIndication и AVCProfileIndication из profile_idc и level_idc? Есть ли способ проверить или, возможно, исправить неправильные параметры, сравнивая их с параметрами SPS?
1 2

1 ответ:

level_idc есть 10 * level. то есть, если вы используете Уровень 3.1, он будет 31.

profile_idc указывается в приложении а к ISO/IEC 14496-10. Например, базовый профиль - 66, основной профиль - 77 и расширенный профиль - 88.

Кроме того, вы можете увидеть синтаксис для SPS RBSP и PPS RBSP в разделе 7.3.2.1 и 7.3.2.2 соответственно. Примечание ue(x) и se(x) указывают на беззнаковое экспоненциальное кодирование Голомба и знаковое экспоненциальное кодирование Голомба.

Правка: мои извинения. The AVCProfileIndication и AVCLevelIndication должно быть таким же, как profile_idc и level_idc