简体   繁体   English

无法设置Windows媒体视频9屏幕编码器

[英]Cannot setup windows media video 9 screen encoder

Having trouble when setting up the input type. 设置输入类型时遇到问题。 I'm getting this error: 我收到这个错误:

MF_E_INVALIDMEDIATYPE: The data specified for the media type is invalid, inconsistent, or not supported by this object. MF_E_INVALIDMEDIATYPE:为媒体类型指定的数据无效,不一致或不受此对象支持。

Any ideas how to fix it? 任何想法如何解决它?
The error is returned at SetInputMediaType . SetInputMediaType返回错误。
This is the setup code for input and output: 这是输入和输出的设置代码:

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);

You don't tell us what is width, height, fps_num, fps_den, and so on. 你没告诉我们什么是宽度,高度,fps_num,fps_den等等。 So, for example, if width is zero, you will receive MF_E_INVALIDMEDIATYPE... 因此,例如,如果width为零,您将收到MF_E_INVALIDMEDIATYPE ...

EDIT 编辑

Here is the answer : Matt Andrews Microsoft (MSFT) 答案是: Matt Andrews Microsoft(MSFT)

As noted earlier in this thread, the Microsoft screen encoder is not registered by default. 如前面在此主题中所述,默认情况下未注册Microsoft屏幕编码器。 The CLSID for the screen encoder is CLSID_CMSSCEncMediaObject2. 屏幕编码器的CLSID是CLSID_CMSSCEncMediaObject2。 If you want to use this in an application, you either need to create it manually using CoCreateInstance and then insert it into a topology, or locally register it using MFTRegisterLocalByCLSID. 如果要在应用程序中使用它,则需要使用CoCreateInstance手动创建它,然后将其插入拓扑中,或使用MFTRegisterLocalByCLSID在本地注册它。

MFVideoFormat_MSS2 is not present by default on system. 默认情况下,MFVideoFormat_MSS2不存在于系统上。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM