如何捕获视频并使用 C# 播放?

Posted

技术标签:

【中文标题】如何捕获视频并使用 C# 播放?【英文标题】:How to capture video and play it with C#? 【发布时间】:2012-04-17 14:14:55 【问题描述】:

我想构建需要能够使用 C# 从网络摄像头捕获视频的应用程序。 捕获的视频应该使用一些编解码器(没有什么特别的,任何可以节省空间的可用的东西)进行压缩,并在捕获时写入文件。不需要实时预览捕获。

第一个问题是哪种 API 适合于此,您会推荐(我见过 DirectShow、Windows Media Foundation 包装器等...不确定哪个最适合托管环境和 C#)?

我还需要 WPF 中的视频播放器来播放捕获的视频。此播放器必须能够从任意位置播放捕获的视频、暂停和开始/停止视频。 总而言之 - 视频是从后台的网络摄像头捕获的,同时播放器播放正在捕获的视频,但它可以暂停、倒带、停止 - 类似于现代 DVR。

第二个问题 - 是否可以使用 WPF MediaElement 创建这样的播放器? (混淆是关于同时从捕获中填充并在播放器中播放的文件)

【问题讨论】:

您需要使您的问题更加具体 - 将其分解为处理您在尝试某事后遇到的特定问题的块。 我需要关于使用哪种 API(技术)进行捕获的建议,这不是关于问题的问题,而是关于建议的问题! 那样的话,恐怕不适合***。 【参考方案1】:

如何制作你想要的所有东西的好例子WebCam

【讨论】:

【参考方案2】:

我使用 AForge(http://www.aforgenet.com/) 库集来逐帧接受视频。我使用 (private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)) 函数来做到这一点。

【讨论】:

当他们标记 WPF 时,我假设他们想在 WPF 中使用它,而 aforge 似乎只与 winforms 兼容【参考方案3】:

你可以试试 DirectShow.net 库。

http://directshownet.sourceforge.net/

【讨论】:

【参考方案4】:

我用过VlcDotNet。它非常灵活且易于使用。它也有一个非常活跃的用户群。

我用它来显示实时视频流以及录制到文件。

【讨论】:

【参考方案5】:

我可以推荐 WPF ffmediaelement。它建立在ffmpeg 之上。那么什么都可以ffmpeg,也可以ffmediaelement。可以从网络摄像头和采集卡采集视频。与 DirectShow 不同,它非常简单。 以下是设置视频源的方法:

Media.Source = new Uri("device://dshow/?video=Osprey-460e Video Device 1C");

...及其在 MediaOpening 事件中的参数:

Media.OnMediaOpening(s, e) =>

    e.Options.Input["framerate"] = "25";
    e.Options.Input["video_size"] = "768x576";
    e.Options.Input["pixel_format"] = "yuyv422";
;

【讨论】:

以上是关于如何捕获视频并使用 C# 播放?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何实现视频在线播放

使用网络摄像头捕获视频并使用 c# 保存为 avi [重复]

如何在 C# 中使用 ContentPushStream 播放块音频?

如何在 react-konva 中捕获视频的第一帧

如何使用 C# .Net 将屏幕捕获为视频?

使用 naudio 捕获音频并使用 javascript 播放