渲染多个视频流后出现黑屏

时间:2014-02-24 13:34:03

标签: c# xna directshow

目前我正在使用一个VMR9渲染器并将其放在XNA纹理上,同时渲染两个不同的视频。我目前使用的代码管理一个视频渲染,但它在两个视频上做了一些讨厌。在我的工作设置上,完整的视频播放工作完美无缺,但当我尝试切换计算机时,它会让我成为黑屏。

我正在使用本主题中建议的过滤器图表:Can one Video Mixing Renderer 9 (VMR9) render more video streams?

如果我在当前运行的程序上附加GraphStudioNext,它将显示以下图表: http://s11.postimg.org/z7d3qyyxf/graph.png

起初我认为问题在于编解码器设置之间存在一些差异,但是在我在两台不同的机器上管理相同的配置后,只有图形发生了变化:即使一台机器正确显示视频而另一台机器只显示一条,它们也会变得相同黑屏。

我甚至试图手动重新制作图表,看看图表本身是否有任何问题并且运行顺畅。

我使用以下代码段将视频源添加到VMR9渲染器:

protected override HRESULT OnInitInterfaces()
{
    IBaseFilter bsFilter;
    m_GraphBuilder.AddSourceFilter(@"C:\Video\Digitales CLP_tic tac Strawberry Mix_HUN_FIN.mp4", "first", out bsFilter);
    IEnumPins ePins;
    bsFilter.EnumPins(out ePins);
    IPin[] pins = new IPin[1];
    IntPtr fetched = IntPtr.Zero;
    ePins.Next(1, pins, fetched);
    int hr = m_GraphBuilder.Render(pins[0]);

    m_GraphBuilder.AddSourceFilter(@"C:\Video\UIP_StarTrek.mp4", "second", out bsFilter);
    bsFilter.EnumPins(out ePins);
    ePins.Next(1, pins, fetched);
    hr = m_GraphBuilder.Render(pins[0]);

    return (HRESULT)hr;
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题在于NVidia驱动程序。以下代码段导致错误:

VMR9NormalizedRect r1 = new VMR9NormalizedRect(0, 0, 0.5f, 1);
VMR9NormalizedRect r2 = new VMR9NormalizedRect(0.5f, 0, 1, 1);
hr = (HRESULT)mix.SetOutputRect(0, ref r1);
hr = (HRESULT)mix.SetOutputRect(1, ref r2);

如果使用除0,0,1,1之外的任何参数初始化VMR9NormalizedRect,它将仅显示黑屏。代码在我试过的任何ATI卡上运行都很完美。

似乎自2006年以来NVidia无法修复此错误: https://forums.geforce.com/default/topic/358347/