CASA RT

工业相机

摄像头取视频流相关协议议1. 连接⽅方式式采⽤用TCP连接,端⼝口为60322。2. 交互协议2.1.开始获取视频流流此接⼝口⽤用于从摄像头提取视频流。流程简述:TCP连接成功后,从socker发送请求,并从此socket中接收视频流数据。请求消息请

摄像头取视频流相关协议

1. 连接⽅方式

采⽤用TCP连接,端⼝口为60322。

2. 交互协议

2.1.

开始获取视频流

此接⼝口⽤用于从摄像头提取视频流。流程简述:TCP连接成功后,从socker发送请求,并从此socket中接收视频流数据。请求消息

请求消息为⼀一个头和⼀一个json字符串串。头为===[json⻓长度]$$$ 这样的字符串串,如:

===128$$$ json格式如下:

字段名类型

msg string

t_s

integer k

string

cid integer

sid integer

描述

消息名,为:c2d.start_living 当前UTC时间md5 (设备账号|设备密码|t_s|设备通信密钥|cid|sid) ,md 5为32位⼩小写通道号,1路路摄像头固定为0 码流号,0=主码流,1=⼦子码流

设备通信密钥为:TMFj$I5ibVP#TuUX

例例:

{

{

"msg": "c2d.start_living",

, "t_s": 1524106297,

, "k": "ab54818443560435158026449601d635",

, "cid": 0,

, "sid": 0

0

}

}

其中,k在加密前的字符串串为:admin|88888888|1524106297|TMFj$I5ibVP#TuUX|0|0

总的请求消息如下例例:

===98$$${"msg":"c2d.start_living","t_s":1524106297,"k":"ab548184435604351580

026449601d635","cid":0,"sid":0}

}返回值

第⼀一个数据包为请求结果,结构如下:

typedef struct _TVV_START_MEDIA_RES

S

{

char magic[2];//媒体数据头,固定为'$$'

'char hdr_len;//数据头⻓长度,从magic开始到payload起始处为⽌止

⽌止unsigned char media_format;//媒体类型,0x10=媒体信息消息

息unsigned short res_code;//200=成功,203=⽆无权限,403=被禁⽤用

⽤用unsigned short resv;

;unsigned int tag1;

;unsigned int tag2;

;unsigned int tag3;

;

}TVV_START_MEDIA_RESULT;

;

如果第⼀一个数据包的res_code=200 ,则接下来就是视频流,格式如下:

media_header payload

有效载荷,即jpeg图媒体头⽚片数据

media_header格式如下:

typedef struct _TVV_MEDIA_HDR

R

{ char magic[2];//媒体数据头,固定为'$$' char hdr_len;//数据头⻓长度,从magic开始到payload起始处为⽌止unsigned char media_format;//媒体编码格式0x03=mjpeg unsigned char frame_type;//帧类型,0xF0-视频主帧char frame_rate;//帧率char width;//图像宽, *8后就是真实的宽char height;//图像⾼高, *8后就是真空的⾼高unsigned short timestamp;//相对时间戳,毫秒级,溢出后⾃自动从0开始unsigned short resv;//保留留unsigned int datetime;//该帧数据的utc时间,秒级unsigned int size;//该帧数据的⻓长度,即payload的字节⻓长度

}TVV_MEDIA_HDR, TVV_RECORD_MEDIA_HDR;

;

2.2. 关闭视频流

直接关闭⽤用于接收媒体流的socket即可。

2.3. 设置视频帧率

请求消息

在媒体流socket上,发送头加json字符串串。头格式如下:

===[json⻓长度]$$$

json字符串串格式如下:

字段名

类型

描述

msg

string

消息名,为:c2d.adjust_living_framerate

framerate

integer

帧率,0 < framerate <= 25

例例:

{

{

"msg": "c2d.adjust_living_framerate",

, "framerate": 10

0

}

}

例例: ===55$$${"msg": "c2d.adjust_living_framerate","framerate": 10}

}返回消息

⽆无

2.4. 获取设备id 请求消息

此请求需要另建socket进⾏行行交互,不不能在媒体流socket上发送。建议使⽤用短连接。

发送格式为头加json⽂文本。

。头格式如下:

:===[json⻓长度]$$$

$json格式如下:

字段名

类型

msg t_s

string integer

k

string

描述

消息名,为:c2d.get_devid 当前UTC时间md5 (设备账号|设备密码|t_s|设备通信密钥) ,md5为32位⼩小写

设备通信密钥为:TMFj$I5ibVP#TuUX 例例:

{

{

"msg": "c2d.get_devid",

,

"t_s": 1523523623,

,

"k": "7f355a7cacaf98028fae1a8e8fa0e4a2"

"

}

}

其中,k在加密前的字符串串为:admin|88888888|1523523623|TMFj$I5ibVP#TuUX

X

返回值

返回⼀一个json⽂文本,格式如下:

字段名

类型

描述

res

integer

返回值:203-⽆无权限,

200-成功

dev_id

string

设备ID,当res=200 时

,才返回这个字段

例例:

{

{

"res": 200,

,

"dev_id": "ID-TEST0001bfa"

"}

}

总的数据包如下例例:

===79$$${"msg":"c2d.get_devid","t_s":1523523623,"k":"7f355a7cacaf98028fae1a8e8f

a0e4a2"}

2.5. 获取视频图像参数

请求消息

此请求需要另建socket进⾏行行交互,不不能在媒体流socket上发送。建议使⽤用短连接。

发送格式为头加json⽂文本。

。头格式如下:

:===[json⻓长度]$$$

$json格式如下:

字段名

类型

描述

msg t_s cid

string integer integer

消息名,为:c2d.med当前UTC时间通道号,从0开始

ia_get_image_params

k string md5 (设备账号|设备密码|t_s|设备通信密钥|cid) ,md5为3 2位⼩小写

设备通信密钥为:TMFj$I5ibVP#TuUX

例例:

{

{

"msg": "c2d.media_get_image_params",

, "t_s": 1523523623,

, "cid": 0,

, "k": "d3a79ef225a84e9245696b2a2f28cfb5"

"

}

}

其中,k在加密前的字符串串为:admin|88888888|1523523623|TMFj$I5ibVP#TuUX|0

0返回值

返回⼀一个json⽂文本,格式如下:

字段名类型

res integer

brightness integer

contrast integer

saturation integer

hue integer

例例:

{

"res": 200,

, "brightness": 80,

, "contrast": 60,

, "saturation": 50,

, "hue": 70

0

}

描述

返回值:200-成功,203-⽆无权限,205-设备不不⽀支持,500-请求参数错误,501-内部错误亮度,0~100,res=200 时返回对⽐比度,0~100,res=200 时返回饱和度,0~100,res=200 时返回⾊色度,0~100,res=200 时返回

2.6. 设置视频图像参数

数请求消息

此请求需要另建socket进⾏行行交互,不不能在媒体流socket上发送。建议使⽤用短连接。

发送格式为头加json⽂文本。

。头格式如下:

:===[json⻓长度]$$$

$json格式如下:

字段名

类型

msg

string

t_s

integer

cid

integer

brightness

integer

contrast

integer

saturation

integer

hue

integer

k

string

描述

消息名,为:c2d.media_set_image_params 当前UTC时间通道号,从0开始亮度,0~100 对⽐比度,0~100 饱和度,0~100 ⾊色度,0~100

md5 (

设备账号

|

设备密码

|t_s|

设备通信密钥

|cid|brightne

ss|contrast|saturation|hue)

,md5

32

位⼩小写设备通信密钥为:TMFj$I5ibVP#TuUX

例例:

{

{

"msg": "c2d.media_set_image_params",

,

"t_s": 1523523623,

,

"cid": 0,

,

"brightness": 80,

,

"contrast": 60,

,

"saturation": 50,

,

"hue": 70,

,

"k": "27ae5b53d2c8d64886a617eb72e7168a"

"

}

}

其中,k在加密前的字符串串为:admin|88888888|1523523623|TMFj$I5ibVP#TuUX|0|80|60|50|70

0返回值

返回⼀一个json⽂文本,格式如下:

字段名

类型

描述

返回值:200-成功,203-⽆无权限,205-设备不不⽀支持,500-

res

integer

请求参数错误,501-内部错误

例例:

{

{

"res": 200

0

}

}

2.7. 获取设备版本信息请求消息

此请求需要另建socket进⾏行行交互,不不能在媒体流socket上发送。建议使⽤用短连接。

发送格式为头加json⽂文本。

。头格式如下:

:===[json⻓长度]$$$

$json格式如下:

字段名

类型

msg t_s

string integer

k

string

描述

消息名,为:c2d.get_dev_version 当前UTC时间md5 (设备账号|设备密码|t_s|设备通信密钥) ,md5为32位⼩小写

设备通信密钥为:

TMFj$I5ibVP#TuUX

例例:

{

{

"msg": "c2d.get_dev_version",

,

"t_s": 1523523623,

,

"k": "0dcc62cf1d1d071248bb3be50c878e60"

"

}

}

其中,k在加密前的字符串串为:

admin|88888888|1523523623|TMFj$I5ibVP#TuUX

返回值

返回⼀一个json⽂文本,格式如下:

字段名

类型

res

integer

dev_id

string

model

string

firmare

string

例例:

{

"res": 200,

,

描述

返回值:203-⽆无权限,200-成功设备ID,当res=200 时,才返回这个字段设备型号,当res=200 时,才返回这个字段固件版本,当res=200 时,才返回这个字段

"dev_id":"N079011694291",

, "model":"GM8200-N2",

, "firmware":"V2.0.5 Build 2018-05-21 14:59:2"

"

}

总的数据包如下例例:

===85$${"msg":"c2d.get_dev_version","t_s":1523523623,"k":"0dcc62cf1d1d071248bb3

be50c878e60"}

3. 下载固件接⼝口

⼝口

固件下载按以下步骤进⾏行行:

1. 从服务器器上获取摄像头的***新固件版本及相关下载信息

2. 通过http协议下载固件

3.1. 获取固件信息

固件信息通过http协议,从后台获取:

http://ppview.vveye.com:3000/firmware?model=GM8200-N2

其中GM8200-N2 为摄像头设备型号,服务器器返回如下json:

{

{

"model":"GM8200-N2",

, "firmware_ver":"V2.0.7",

, "firmware_url":"http://ppview.vveye.com/download_software?param=firmware

e

&module=GM8200-N2",

, "firmware_hash":"931a3a6e86a5783c586e5001e1029ef6"

"}

}

其中model表示摄像头型号,firmware_ver 表示摄像头固件版本,firmware_url 表示摄像头固件下载地址,firmware_hash 表示摄像头固件⽂文件的md5 hash值,⽤用于检查⽂文件的完整性。获取失败时,firmware_ver 为空。

获取到信息后,使⽤用firmware_url 下载摄像头固件。

4. 升级固件接⼝口

通过http协议,将固件上传到摄像头,上传完成后,摄像头⾃自动升级。url为:

http://ip/cgi-bin/cgi?action=upgrade_rootfs

s

其中ip是摄像头IP地址。

。Content-Type: multipart/form-data

a

参数:

:rootfs_file: 固件⽂文件名

使⽤用curl上传时的命令⾏行行:

curl -F "rootfs_file=@GM8200-N2-v2.0.7-upgrade.bin" http://192.168.199.81/cg

gi-bin/cgi?action=upgrade_rootfs

s

实例例:

POST /cgi-bin/cgi?action=upgrade_rootfs HTTP/1.1

1

Host: 192.168.199.81

1User-Agent: curl/7.60.0

0Accept: */*

*Content-Length: 917880

0Content-Type: multipart/form-data; boundary=------------------------238eed69

9a8692280

0Expect: 100-continue

e

--------------------------238eed69a8692280

0

Content-Disposition: form-data; name="rootfs_file"; filename="vvdev"

"Content-Type: application/octet-stream

m

[⽂文件的2进制数据]

--------------------------238eed69a8692280-

--