【问题标题】:Black screen after rendering multiple video streams渲染多个视频流后黑屏
【发布时间】:2014-02-24 13:34:02
【问题描述】:

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

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

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

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

我什至尝试过手工重新制作图表,看看图表本身是否有问题,并且运行顺利。

我使用以下代码 sn-p 将视频源添加到 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;
}

任何帮助将不胜感激。

【问题讨论】:

    标签: c# xna directshow


    【解决方案1】:

    问题出在 NVidia 驱动程序上。以下代码 sn -p 导致错误:

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

    如果 VMR9NormalizedRect 使用除 0、0、1、1 之外的任何参数进行初始化,它只会显示黑屏。该代码在我尝试过的任何 ATI 卡上都能完美运行。

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

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多