AMDh264Encoder возвращает MF_E_ATTRIBUTENOTFOUND при проверке MFSampleExtension_CleanPoint

#ms-media-foundation

Вопрос:

При получении вывода из IMFTransform::ProcessOutput вызов GetUINT32(MFSampleExtension_CleanPoint) в примере завершается неудачно и возвращает MF_E_ATTRIBUTENOTFOUND только при использовании AMDh264Encoder (NV12 в, H264 из), поэтому в конечном выходном видео отсутствуют ключевые кадры, поэтому оно повреждено.

Что приводит к сбою получения атрибута MFSampleExtension_CleanPoint MF_E_ATTRIBUTENOTFOUND только в кодере AMDh264Encoder?

Ответ №1:

MFTS видеокодера поставляются поставщиками оборудования. AMD делает «AMDh264Encoder» для своего оборудования и, в частности, представляет его со своими видеодрайверами.

По этой причине реализации от разных поставщиков имеют небольшие различия, ребята из AMD решили не устанавливать эти атрибуты на произведенных образцах носителей.

Вы должны изящно пропустить это и рассматривать атрибут как необязательный.

Комментарии:

1. Спасибо, как бы я тогда определил, является ли образец ключевым кадром в этом случае?

2. Я не уверен, что AMD encoder раскрывает это, может быть, вы сможете найти что-нибудь здесь . Кроме того, кадры H. 264 сложнее, чем «ключевой кадр» и «не ключевой кадр». Чтобы получить более подробную информацию о полученных данных, вы можете ознакомиться с AMF SDK более низкого уровня от AMD. Там вы определенно сможете получить тип кадра .

3. Кроме того, относительно легко проанализировать конечные единицы из созданного битового потока (для этого вам понадобится спецификация H. 264 или поиск вопросов StackOverflow, которые расширяют это) и определить типы единиц, а затем определить, является ли это «ключевым кадром» или нет.