您的位置:首页 > 编程语言 > C#

C#中多路IP摄像机的视频监控系统

2008-03-19 22:46 489 查看
[翻译]
Andrew Kirillov著Camera Vision - video surveillance on C#

[简介]

纵观当前的视频监控系统,很容易发现人们越来越倾向于基于IP的解决方案。越来越多的制造商提供了大量的IP视频摄像器材。

本文的源码基于C#应用程序,同时允许显示单个或多个摄像机或视频服务器。
应用程序支持的视频资源有:
1 不断更新的JPEG图象
2 MJPEG(动态JPEG)数据流
3 一些Axis网络摄像机和视频服务器(205, 206, 2100, 2110, 2120, 2130R, 2400, 2401, 2460)
4 D-Link 摄像机(只支持JPEG )
5 松下Panasonic摄像机
6 PiXORD 网络摄像机
7 StarDot 网络摄像机
8 支持DirectShow 的本地设备
9 MMS (微软多媒体服务Microsoft Media Services)流



访问JPEG和MJPEG

从JPEG数据源(摄像机)读取数据是非常简单的——你只要不断向这个数据源发送HTTP的请求,下载传回的数据(Response),从中抽取出一个位图出来就可以了。
下面是一个从IP摄像机读取单个JPEG侦的示例:

string sourceURL = "http://webcam.mmhk.cz/axis-cgi/jpg/image.cgi";
byte[] buffer = new byte[100000];
int read, total = 0;
// create HTTP request
HttpWebRequest req = (HttpWebRequest) WebRequest.Create( sourceURL );
// get response
WebResponse resp = req.GetResponse( );
// get response stream
Stream stream = resp.GetResponseStream( );
// read data from stream
while ( ( read = stream.Read( buffer, total, 1000 ) ) != 0 )
{
total += read;
}
// get bitmap
Bitmap bmp = (Bitmap) Bitmap.FromStream(
new MemoryStream( buffer, 0, total ) );


但是,大部分的 摄像机都不会让任何人随便读取的,一般需要有用户名和密码,如下面:

// create HTTP request
HttpWebRequest req =
(HttpWebRequest) WebRequest.Create( sourceURL );
// set login and password
req.Credentials = new NetworkCredential( login, password );
...


访问MJPEG 资源稍微麻烦点,首先,让我们看看Response回来内容的类型。

multipart/x-mixed-replace; boundary=--myboundary


它们可能回传的不一样,不过一定会有multipart/x-mixed-replace ,然后,后面跟着一个分隔字符串。
本例中是"--myboundary"。
再让我们看看实际的流数据:

--myboundary
Content-Type: image/jpeg

... image binary data ...

--myboundary
Content-Type: image/jpeg

... image binary data ...

--myboundary
Content-Type: image/jpeg

...


总结一下,访问MJPEG 的算法:
1 匹配回传的内容,找到边界
2 读取第一边界的流
3 读二进制数据知道下一边界
4 从缓冲中抽取一个图形
5 处理图形(如显示)
6 继续执行3-5

Axis 网络摄像机和视频服务器

Axis 网络摄像机和视频服务器,是目前最好的IP视频摄像机。从用户的角度来说,它提供了非常好的视频质量和帧速率,而且,非常容易安装和配置。从程序员的角 度,它看上去更好;公司提供了最完善的开发文档,即包括了如何通过HTTP访问摄像机,也提供了如何通过SDK访问。

下面格式的URL用于访问Axis 网络摄像机/服务器的JPEG和MJPEG图形流

JPEG: http://<servername>/axis-cgi/jpg/image.cgi MJPEG: http://<servername>/axis-cgi/mjpg/video.cgi[/code] 
这些URL还可以接收,改变图像质量的参数。用的最多的是图像分辨率,摄像机的编号,和希望的帧速率。

例如:

http://<servername>/axis-cgi/jpg/image.cgi?resolution=320x240 http://<servername>/axis-cgi/mjpg/video.cgi?camera=2 http://<servername>/axis-cgi/mjpg/video.cgi?camera=2&des_fps=5


StarDot 摄像机/视频服务器

他们的优点是,一个视频服务器可以支持6个模拟摄像机。但是缺点是帧速率比较小,而且,不支持MJPEG。

URL的访问格式:

StarDot NetCam: http://<servername>/netcam.jpg StarDot Express 6 (video server) http://<servername>/jpeg.cgi?<cameranumber> http://<servername>/jpeg.cgi?3


PiXORD 摄像机

他们的URL访问格式如下:

JPEG: http://<servername>/images<channel><resolution> http://<servername>/images1sif
MJPEG: http://<servername>/getimage?camera=<channel>[&fmt=<resolution>][&delay=<delay>] http://<servername>/getimage?camera=1&fmt=sif&delay=10


Panasonic 松下摄像机

他们的URL访问格式如下:

JPEG: http://<servername>/SnapshotJPEG[?Resolution=<resolution>][&Quality=<quality>] http://<servername>/SnapshotJPEG?Resolution=320x240&Quality=Standard
MJPEG: http://<servername>/nphMotionJpeg[?Resolution=<resolution>][&Quality=<quality>] http://<servername>/nphMotionJpeg?Resolution=320x240&Quality=Standard


D-Link摄像机

D- Link生产了大量的IP视频摄像机,它以第一个开始在它们的摄像机中使用MPEG-4而著名。事实上,他们早就把支持MPEG-4作为他们的摄像机的主 要目标,因为他们的摄像机根本就不支持MJPEG。其中大部分支持音频,一些还支持双声道。作为用户,他们非常容易使用和配置。不过作为程序员,就不是那 么简单了。公司不想共享他们的开发文档,大家很难从他们的公司网站上得到什么有价值的开发文档。另外一个大麻烦是,开发人员不得不自己开发监控系统,因 为,他们的监控软件有很多的BUG。:(

我所知道的一种访问D-Link 摄像机的方法是:

http://<servername>/cgi-bin/video.jpg
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: