C# 如何从字节预览/显示视频

C# 如何从字节预览/显示视频,c#,video-capture,C#,Video Capture,如何使用Black Magic Design DecklinkAPI.dll显示/预览输入视频?我可以逐帧获取视频,但我不知道如何在窗体/窗口中显示该帧。我可以实现IDeckLinkInputCallback: void IDeckLinkInputCallback.VideoInputFrameArrived(IDeckLinkVideoInputFrame video, IDeckLinkAudioInputPacket audio) { IntPtr pData;

如何使用Black Magic Design DecklinkAPI.dll显示/预览输入视频?我可以逐帧获取视频,但我不知道如何在窗体/窗口中显示该帧。我可以实现IDeckLinkInputCallback:

void IDeckLinkInputCallback.VideoInputFrameArrived(IDeckLinkVideoInputFrame video,
    IDeckLinkAudioInputPacket audio)
{
    IntPtr pData;
    video.GetBytes(out pData);

    // What should I do to get the preview?

    System.Runtime.InteropServices.Marshal.ReleaseComObject(video);
}
我看到的另一种方法是实现IDeckLinkScreenPreviewCallback:

void IDeckLinkScreenPreviewCallback.DrawFrame(IDeckLinkVideoFrame theFrame)
{
    // Constructor: m_ph = new CDeckLinkDX9ScreenPreviewHelper();
    m_ph.SetFrame(theFrame);

    // Should I use this method instead to get the preview?

    System.Runtime.InteropServices.Marshal.ReleaseComObject(theFrame);
}
有更多完整的代码示例,但仍然缺少重要的代码: . 可以找到BMD Decklink SDK文档


谢谢。

如果你使用DekLink SDK来捕获视频,那么你有责任将帧转换成格式,它可以被演示API(GDI、GDI+、DirectShow、MediaFoundation等)所消耗。这里的某些努力是预期的,因为你通常以非RGB像素格式捕获,并且可能在非标准步幅。p>
或者,您可以使用DeckLink DirectShow视频捕获源来捕获视频,并将其作为与兼容的提要提供。可以使用标准组件预览和处理视频。您可以在C#至中构建和控制DirectShow图形。

这不是BMD Decklink SDK技术支持的问题吗?您是对的,联系他们应该是第一步。然而,我对制造商有一些经验,他们可能会说他们没有任何C#开发人员,他们只有简单的C#示例;)即使BMD不是这样,但社区的知识面比任何制造商都要广得多。我不确定使用哪一种演示API。你有“最爱”吗?DirectShow.NET似乎有点过时了。WPF MediaKit仍然使用它(和MF),这可能是最快、最安全的方式。谢谢,但我不是在推这个。使用MF的唯一原因是它在DirectShow被强制停止的最新平台上得到支持。DirectShow.NET运行良好(有更多的信息/示例),您可能会对没有看到新的开发感到困惑,但它很好,因为整个API和包装器都处于稳定状态。