Не удается настроить кодировщик экрана Windows Media Video 9

Возникли проблемы при настройке типа входа. Я получаю эту ошибку:

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

Есть идеи как это исправить?
Ошибка возвращается в SetInputMediaType,
Это код настройки для ввода и вывода:

hr = MFCreateMediaType(&mediaTypeIn);
hr = mediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
hr = mediaTypeIn->SetGUID(MF_MT_SUBTYPE,  MFVideoFormat_RGB24);
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_MSS2);
hr = mediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
hr = mediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, bit_rate);
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);

// No problems before this point, and the call below returns MF_E_INVALIDMEDIATYPE
hr = vx->sinkWriter->SetInputMediaType(vx->streamIndex, mediaTypeIn, NULL);

1

Решение

Вы не говорите нам, что такое ширина, высота, fps_num, fps_den и так далее. Так, например, если ширина равна нулю, вы получите MF_E_INVALIDMEDIATYPE …

РЕДАКТИРОВАТЬ

Вот ответ: Мэтт Эндрюс Microsoft (MSFT)

Как отмечалось ранее в этой теме, кодировщик экрана Microsoft не зарегистрирован по умолчанию. CLSID для кодировщика экрана — CLSID_CMSSCEncMediaObject2. Если вы хотите использовать это в приложении, вам нужно либо создать его вручную с помощью CoCreateInstance, а затем вставить его в топологию, либо локально зарегистрировать его с помощью MFTRegisterLocalByCLSID.

MFVideoFormat_MSS2 по умолчанию отсутствует в системе.

0

Другие решения


По вопросам рекламы [email protected]