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侦的示例:
但是,大部分的 摄像机都不会让任何人随便读取的,一般需要有用户名和密码,如下面:
访问MJPEG 资源稍微麻烦点,首先,让我们看看Response回来内容的类型。
它们可能回传的不一样,不过一定会有multipart/x-mixed-replace ,然后,后面跟着一个分隔字符串。
本例中是"--myboundary"。
再让我们看看实际的流数据:
总结一下,访问MJPEG 的算法:
1 匹配回传的内容,找到边界
2 读取第一边界的流
3 读二进制数据知道下一边界
4 从缓冲中抽取一个图形
5 处理图形(如显示)
6 继续执行3-5
Axis 网络摄像机和视频服务器
Axis 网络摄像机和视频服务器,是目前最好的IP视频摄像机。从用户的角度来说,它提供了非常好的视频质量和帧速率,而且,非常容易安装和配置。从程序员的角 度,它看上去更好;公司提供了最完善的开发文档,即包括了如何通过HTTP访问摄像机,也提供了如何通过SDK访问。
下面格式的URL用于访问Axis 网络摄像机/服务器的JPEG和MJPEG图形流
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
相关文章推荐
- [转]C#中多路IP摄像机的视频监控系统
- 基于视频压缩的实时监控系统-A2:linux中最优秀的多路复用机制Epoll
- 家庭视频监控系统Ⅱ--C#登录模块实现过程
- 应用案例:某小区视频监控系统
- 优秀开源项目之一:视频监控系统iSpy
- 基于深度神经网络的视频监控系统的车辆识别构思
- 优秀开源项目之一:视频监控系统iSpy
- Linux-视频监控系统(14)-项目总结
- Linux-视频监控系统(2)-Epoll的介绍及使用
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(三)命令行工具集
- 基于.NET打造IP智能网络视频监控系统
- 勤智OneCenter:视频监控系统运维解决方案
- OpenCV3.2+Qt5.8.0+Win10开发视频监控系统----(2)Qt之中文显示
- 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint3-采集端传输子系统设计
- H.264嵌入式视频监控系统项目指导
- 视频联网监控系统之目录编码
- 视频监控系统结构
- 基于onvif规范的视频监控系统客户端(四):QT5.8+FFMPEG实现rtsp流的播放
- 手机视频监控系统
- 基于Linux的视频监控系统构建方法