Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365590
  • 博文数量: 242
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1134
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-20 10:53
文章分类

全部博文(242)

文章存档

2015年(1)

2014年(10)

2013年(18)

2012年(213)

分类:

2012-11-07 10:40:30

原文地址:MJPEG协议入门介绍 作者:iARM

 Mjpeg是Motion JPEG 的简称。它的原理是把视频镜头拍成的视频分解成一张张分离的jpg数据发送到客户端。当客户端不断显示图片,即可形成相应的图像.

  大部分低端的网络摄像头都支持的MJPG,较为高级的摄像头支持是H.264.

  MJPG的优点是实现简单,客户端实现简单,不会出现马赛克的情况。缺点就是占带宽比较大,因为是一帧一帧按图像来传输的.

  MJPG可以在多种传输上传输,比如TCP/UDP,最常见是在HTTP上采用传输。大部分的摄像头也是采用HTTP+MJPG的传输形式的。我们后续将采用这个进行分析。

  一.mjpg分析

  -----------------------------------------------------------

  mjpg的在http的mime type是"x-mixed-replace".但mjpg

  首先是要由客户发一个GET取一个特殊文件(不同摄像头有不同的定义)

  如果ipcam返回200,表示已经接收的请求,并在返回的头里指明边界字符串,这是在context type的boundary子属性来指明的。

  然后ipcam开始发送JPG数据,首先是发送类型和长度。

  Content-Type= image/jpeg以及用Content-Length指向随后的长度。

  当一个图发送完毕后,以边界字符串来结束。

  以Original LIVECAM Motion JPEG为例,它的mjpg流程是

  这里的边界字符串是ThisRandomString.

  GET /xxx.jpg HTTP/1.1

  HTTP/1.0 200 OK Server: Digital Video Technology PUSH1 Expires: 0 Pragma: no-cache

  Content-Type: multipart/x-mixed-replace;boundary=ThisRandomString

  --ThisRandomString

  Content-Type: image/jpeg

  Content-Length: 6280

  ...(jpeg数据)

  --ThisRandomString

  二.mjpg-streamer的说明

  ------------------------------------------------------------

  在本次监控项目中,我们使用了mjpg-streamer, mjpg-streamer是常用来实现mjpg流传输的开源项目,我们分析一下它的协议内容。

  首先是发送 GET /?action=streamnn

  响应200表示联接成功.并指明是multipart/x-mixed-replace的mjpg数据,边界字符串是boundarydonotcross

  HTTP/1.0 200 OK

  Connection: close

  Server: MJPG-Streamer/0.2

  Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0

  Pragma: no-cache

  Expires: Mon, 3 Jan 2000 12:34:56 GMT

  Content-Type: multipart/x-mixed-replace;boundary=boundarydonotcross

  --boundarydonotcross

  接下是开发发送JPG数据

  Content-Type: image/jpeg

  Content-Length: 19454

  <中间19454字节就是一个JPG完整的图像>

  --boundarydonotcross

  当连续不断发送这个数据,在客户端即可显示视频

阅读(213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~