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-
--