织梦CMS - 轻松建站从此开始!

罗索

Andrew Kirillov著Camera Vision - video surveilla

jackyhwei 发布于 2011-05-02 00:36 点击:次 
纵观当前的视频监控系统,很容易发现人们越来越倾向于基于IP的解决方案。越来越多的制造商提供了大量的IP视频摄像器材.本文的源码基于C#应用程序,同时允许显示单个或多个摄像机或视频服务器。
TAG:

纵观当前的视频监控系统,很容易发现人们越来越倾向于基于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


这些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 
作者网站:http://www.aforgenet.com
(yufangbo)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201105/11359.html]
本文出处:CSDN博客 作者:yufangbo
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容