104 项目设计

104.1 mjpg-streamer视频服务器

mjpg-streamer是一款开源的第三方网络视频服务器,以多线程方式工作,一方面实时捕获UVC摄像头拍摄到的视频帧画面,另一方面通过HTTP协议为视频客户机提供视频数据的下载服务。如下图所示:

mjpg-streamer采用高聚低耦的架构模式,将输入插件和输出插件分离。其中,intput_testpicture.so插件用于从静态图片输入数据,而intput_uvc.so插件则用于从UVC摄像头输入数据。output_http.so是个输出插件,用于将捕获到的视频帧画面,通过HTTP协议,输出给客户机。每次启动视频服务器,输入插件只能有一个,而输出插件则可以有多个。

104.2 UVC摄像头

UVC是USB Video Class,即USB视频类的缩写。UVC是一个开放标准,拥有维护良好的驱动,并已经成为Linux操作系统内核的一部分。将任何UVC设备的引线插入USB接口即可工作,无须重编内核或额外安装驱动程序。

UVC摄像头即符合UVC标准规范的摄像头设备。它包括V4L2内核设备驱动和用户空间工具补丁。所有UVC兼容 设备都共用一个通用的驱动程序。

104.3 HTTP协议

HTTP即Hyper Text Transfer Protocol,超文本转移协议,是一个工作在应用层的网络协议。一次HTTP交互由一个HTTP请求和一个HTTP响应构成。 HTTP协议允许参与通信的双方传输任意类型的数据,并通过包头中的Content-Type字段加以标记。HTTP服务器默认监听80端口。

104.4 JPEG图片

一副JPEG图片由若干标记码(TAG)和为标记码所引导的数据流组成。标记码包括两个字节,第一个字节固定为0xff,第二个字节因紧随其后的数据流的不同而取不同的值。

104.5 MJPG视频

MJPG或MJPEG即Motion-JPEG,是一种用多幅静态JPEG图片组成动态视频的编码标准。一段MJPG视频中的每一帧画面都是一副JPEG格式的图片。

104.6 《远程视频监控系统》之视频客户机

视频客户机的工作流程如下:

连接视频服务器
向视频服务器发送请求
GET /?action=stream HTTP/1.1
接收服务器返回的响应
从响应中剥离单帧画面
将单帧画面显示在界面窗口中