我已经使用AForge库来制作这个小程序,它显示从网络摄像头到PictureBox的实时馈送。
private FilterInfoCollection VideoCaptureDevices;
private VideoCaptureDevice FinalVideoDevice;
private void Form1_Load(object sender, EventArgs e)
{
VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
try
{
foreach (FilterInfo VidCapDev in VideoCaptureDevices)
{
comboBox1.Items.Add(VidCapDev.Name);
comboBox1.SelectedIndex = 0;
}
FinalVideoDevice = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideoDevice.NewFrame += new NewFrameEventHandler(FinalVideoDevice_NewFrame);
FinalVideoDevice.Start();
}
catch
{
MessageBox.Show("No camera found. Please connect your camera and click RESET.");
}
}
//////////////////////////////////////////////////////////////////////////////////////////
void FinalVideoDevice_NewFrame(object sender, NewFrameEventArgs e)
{
try
{
pictureBox1.Image = (Bitmap)e.Frame.Clone();
}
catch { }
}
但我还需要从IP摄像头获取流。什么是获得它的最佳方法?
答案 0 :(得分:13)
使用来自同一个AForge.net的MJPEGStream解决它:)
MJPEGStream stream = new MJPEGStream("http://192.168.2.5:8080/videofeed");
stream.NewFrame += new NewFrameEventHandler(video_NewFrame);
stream.Start();
答案 1 :(得分:2)
IP摄像机在Windows中没有特定的媒体接口/ API,它们只是LAN上的设备。此外,还有成百上千的模型,它们不共享公共访问接口(甚至接近)。
首先,您必须具体了解您感兴趣的模型。
此外,一些供应商提供额外的“驱动程序”,将IP摄像机作为多媒体设备公开,例如“用于IP摄像机的DirectShow驱动程序”。在大多数情况下,这些都是特定于供应商的,不适用于其他相机。
下一次机会是相机实现了一个众所周知的流媒体协议,在这种情况下,一些通用驱动程序也可以很好地工作。
或者,只要您是C#guy,就可以检查IP摄像机的HTTP / CGI API,并在代码中自行实现流式传输,通过HTTP / TCP / UDP连接与设备发送和接收数据。
答案 2 :(得分:2)
我曾与directShow.net library合作过。它使您可以访问DirectShow的大多数功能,其中之一是捕获。如果您可以在DirectShow中使用ip网络摄像头,也可以在程序中使用它。
答案 3 :(得分:2)
和我一样的问题就像你一样,这是我用c#开发或定制Ip相机解决方案的最后一年项目。但是我浪费了我的时间,通过浏览来获取用C#编写的任何可以轻松访问ip camera流的代码,我很快就找到了第三方Ozeeki sdk。但是这个是试验并且在一周内到期并且也不会工作。或者可能是Ozeeki想要他们的网站的反向链接。 首先,你必须限制自己选择一个相机。在我的情况下,我有一个HIkvision网络摄像头。 只需从此处下载适用于海康威视相机的设备网络SDK: http://www.hikvision.com/en/us/download_more.asp?id=1482
提取它,您可以在SDK文件夹中找到4个子文件夹。 在#34; doc"文件夹,你会发现"设备网络SDK编程手册" 打开它并展开"编程指南"树。 单击主过程API参考或预览模块过程。在这里,您将找到所有路线图,您需要采取哪些步骤来调用功能以从相机获取实时流。 所有功能的声明都在"基本接口定义"树扩展它并逐一阅读它们。 游戏还没有结束,但刚刚开始; 具有所有功能的SDk是用C / C ++非托管代码库编写的。并且不能在Manged C#项目解决方案参考中添加。所以你必须为从摄像机获取流的所有这些包装器做一个包装器,并从c#中调用它们。通过文档手册,它们是什么功能。 在推特上关注我 : https://twitter.com/CodingVampire 祝你好运(
)答案 4 :(得分:1)
Nager.VideoStream基于ffmpeg,因此可以轻松地在各个平台上使用。可以通过ffmpeg访问网络摄像机和网络摄像头。
PM> install-package Nager.VideoStream
var inputSource = new StreamInputSource("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov");
//var inputSource = new WebcamInputSource("Microsoft® LifeCam HD-3000");
var cancellationTokenSource = new CancellationTokenSource();
var client = new VideoStreamClient();
client.NewImageReceived += NewImageReceived;
var task = client.StartFrameReaderAsync(inputSource, OutputImageFormat.Bmp, cancellationTokenSource.Token);
//Console.ReadLine();
client.NewImageReceived -= NewImageReceived;
private static void NewImageReceived(byte[] imageData)
{
File.WriteAllBytes($@"{DateTime.Now.Ticks}.bmp", imageData);
}