sumith sudesan Ответов: 1

Проблема с кодировщиком H264 (окно 10)


hr = MFCreateMediaType(&mediaTypeIn);
hr = mediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
hr = mediaTypeIn->SetGUID(MF_MT_SUBTYPE,  MFVideoFormat_AYUV);
hr = mediaTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
hr = MFSetAttributeSize(mediaTypeIn, MF_MT_FRAME_SIZE, width, height);
hr = MFSetAttributeRatio(mediaTypeIn, MF_MT_FRAME_RATE, fps_num, fps_den);
hr = MFSetAttributeRatio(mediaTypeIn, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);

hr = MFCreateMediaType(&mediaTypeOut);
hr = mediaTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); 
hr = mediaTypeOut->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
hr = mediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
hr = mediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, bit_rate);
hr = mediaTypeOut->SetUINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_Main)
hr = MFSetAttributeSize(mediaTypeOut, MF_MT_FRAME_SIZE, width, height);
hr = MFSetAttributeRatio(mediaTypeOut, MF_MT_FRAME_RATE, fps_num, fps_den);
hr = MFSetAttributeRatio(mediaTypeOut, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);

hr = vx->sinkWriter->AddStream(mediaTypeOut, &vx->streamIndex);
hr = vx->sinkWriter->SetInputMediaType(vx->streamIndex, mediaTypeIn, NULL);

SetInputMediaTyp () не удалось и возвращает с ошибкой 'MF_E_INVALIDMEDIATYPE'

Что я уже пробовал:

Этот код отлично работает в windows 7 и не работает в windows 10.

SetInputMediaType () не удалось и возвращает MF_E_INVALIDMEDIATYPE?

В случае с переменным битрейтом (VBR'eAVEncCommonRateControlMode_Quality'), требуемое значение MF_MT_AVG_BITRATE' это?

1 Ответов

Рейтинг:
2

KarstenK

Сообщение об ошибке ясно, что есть что-то неправильно настроенное в IMFSinkWriter.

Вам лучше ознакомиться с документацией Microsoft о
кодировка H. 264. Совершите более глубокое погружение в GUID Типа Видео.

Часто не все преобразования поддерживаются. Так что попробуйте несколько вариантов.