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

时间:2014-06-20 13:17:18

标签: c# video-capture

如何使用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);
}

有更完整的代码示例,但它们仍然缺少重要的代码: blackmagic SDK in c#。 可以找到BMD Decklink SDK文档here

感谢。

1 个答案:

答案 0 :(得分:2)

如果您使用DeckLink SDK捕获视频,那么您有责任将帧转换为格式,这可以由演示API(GDI,GDI +,DirectShow,Media Foundation等)使用 - 由于您的某些努力,通常以非RGB像素格式捕获,并且可能以非标准步幅捕获。

或者,您可以使用DeckLink DirectShow视频捕获源捕获视频,并将其作为与DirectShow API兼容的Feed提供。您可以使用标准组件预览和处理视频。您可以通过DirectShow.NET library在C#中构建和控制DirectShow图。