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

时间:2015-07-10 13:48:18

标签: c++ winapi video-encoding ms-media-foundation

设置输入类型时遇到问题。我收到此错误:

  

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 个答案:

答案 0 :(得分:1)

你不能告诉我们什么是宽度,高度,fps_num,fps_den等等。因此,例如,如果width为零,您将收到MF_E_INVALIDMEDIATYPE ......

修改

以下是答案:Matt Andrews Microsoft (MSFT)

  

如本主题前面所述,默认情况下未注册Microsoft屏幕编码器。屏幕编码器的CLSID是CLSID_CMSSCEncMediaObject2。如果要在应用程序中使用它,则需要使用CoCreateInstance手动创建它,然后将其插入拓扑中,或使用MFTRegisterLocalByCLSID在本地注册它。

系统默认不存在MFVideoFormat_MSS2。