设置输入类型时出现问题。我得到了一个错误:
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);发布于 2015-07-13 12:08:50
你不告诉我们什么是宽度,高度,fps_num,fps_den等等。因此,例如,如果宽度为零,您将收到MF_E_INVALIDMEDIATYPE.
编辑
以下是答案:微软(MSFT)
如前所述,默认情况下Microsoft屏幕编码器不会注册。屏幕编码器的CLSID是CLSID_CMSSCEncMediaObject2。如果您想在应用程序中使用它,您需要使用CoCreateInstance手动创建它,然后将它插入到拓扑中,或者使用MFTRegisterLocalByCLSID在本地注册它。
默认情况下,系统上不存在MFVideoFormat_MSS2。
https://stackoverflow.com/questions/31342440
复制相似问题