You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用SharpDx录扩展屏调用SetInputMediaType出现HRESULT:0xC00D36B4错误

问题根因

你遇到的0xC00D36B4错误对应的是Media Foundation框架的MF_E_INVALIDMEDIATYPE异常,即你设置的输入媒体类型不被Sink Writer接受。主屏录制正常、扩展屏异常,通常是扩展屏的参数计算异常、媒体属性缺失导致的兼容性问题。

排查&修复方案

  • 首先校验第二屏的宽高参数合法性
    检查你获取第二屏分辨率的逻辑,如果扩展屏的起始坐标是负值(比如放在主屏左侧),直接用右边界减左边界可能得到负的宽高值,在做((long)width << 32) | (uint)height计算时会产生非法的超大帧尺寸,直接触发类型不兼容错误。需要先把宽高转成无符号整数再进行位运算。
  • 补充必填的媒体类型属性
    你当前的MediaType设置缺失两个必选属性,高分辨率场景下Sink会直接拒绝:
    • 逐行扫描标识:video.Set(MediaTypeAttributeKeys.InterlaceMode, (int)VideoInterlaceMode.Progressive);
    • 行跨度属性:video.Set(MediaTypeAttributeKeys.Stride, width * 4);(RGB32格式每像素占4字节,行跨度为宽度*4)
  • 可选优化兼容性操作
    如果修复参数后依然报错,可以把子类型从VideoFormatGuids.Rgb32替换为VideoFormatGuids.NV12,系统内置编码器对NV12格式的兼容性远高于RGB32,适配不同分辨率场景的能力更强。

修复后核心代码示例

using (var video = new MediaType())
{
    // 提前校验宽高合法性,强制转无符号
    uint uWidth = (uint)Math.Abs(width);
    uint uHeight = (uint)Math.Abs(height);
    
    video.Set(MediaTypeAttributeKeys.MajorType, MediaTypeGuids.Video);
    video.Set(MediaTypeAttributeKeys.Subtype, VideoFormatGuids.Rgb32);
    video.Set(MediaTypeAttributeKeys.FrameSize, ((long)uWidth << 32) | uHeight);
    // 新增必选属性
    video.Set(MediaTypeAttributeKeys.InterlaceMode, (int)VideoInterlaceMode.Progressive);
    video.Set(MediaTypeAttributeKeys.Stride, (int)(uWidth * 4));
    if (Options.RecordingFrameRate != 0)
    {
        video.Set(MediaTypeAttributeKeys.FrameRate, ((long)frameRateNumerator << 32) | (uint)frameRateDenominator);
        // 补充比特率属性,提升兼容性
        uint bitrate = uWidth * uHeight * 4 * (uint)frameRateNumerator / (uint)frameRateDenominator;
        video.Set(MediaTypeAttributeKeys.AvgBitrate, bitrate);
    }
    Trace("Add Video Input Media Type");
    writer.SetInputMediaType(_videoOutputIndex, video, null);
}

内容的提问来源于stack exchange,提问作者Selim Boz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:06:03