【问题标题】:How to preview/display video from bytes如何从字节预览/显示视频
【发布时间】:2014-06-20 13:17:17
【问题描述】:

如何使用 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找到。

谢谢。

【问题讨论】:

  • 这不是BMD Decklink SDK技术支持的问题吗?
  • 你是对的安东尼联系他们应该是第一步。但是,我有一些制造商的经验,他们可能只是说他们没有任何 C# 开发人员,他们只有简单的 C# 示例;)即使 BMD 不是这种情况,SO 社区也拥有比任何其他人更广泛的知识制造商。

标签: c# video-capture


【解决方案1】:

如果您使用 DeckLink SDK 来捕捉视频,那么您有责任将帧转换为格式,供演示 API(GDI、GDI+、DirectShow、Media Foundation 等)使用 - 需要付出一定的努力,因为您通常以非 RGB 像素格式捕获,并且可能以非标准步幅捕获。

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

【讨论】:

  • 我不确定要使用哪一个演示 API。你有“最爱”吗? DirectShow.NET 似乎有点过时了。 WPF MediaKit 仍然使用它(和 MF),这可能是最快和最安全的方式。谢谢
  • My personal favorite is DirectShow,但我不是在推动这个。使用 MF 的唯一原因是它在 DirectShow 被强制停止的最新平台上得到支持。 DirectShow.NET 信誉良好(周围有更多信息/示例),您可能会因为看不到新开发而感到困惑,但这很好,因为整个 API 和包装器都处于稳定状态。
猜你喜欢
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2014-08-18
  • 2013-04-10
  • 2021-04-27
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多