Tange Cloud for Device
Rev.333 |
例如:对一个2通道的设备的
DoubleLight
属性,固件返回"Yes"
意味两个通道都有白光灯。等同于["Yes", "Yes"]
。如果返回["Yes", "No"]
则表示仅在第一个通道上有白光灯。
多(扩展)属性表达与解析 能力可能有多个属性, 如果属性值是字符串格式,多个属性间用分隔符隔开。
分隔符可以是','或';'。之前的文档里,有的指定';',有的指定',',一般情况下这两者在功效上并没有区别。因此,除特殊情况(目前是Cap-Zoom
),APP要能兼容这两种分隔符.
因为多属性的存在,除了No
值以外,APP端要避免直接字符串比较。而是要先用 ','和';'分割,再在分割得到数组中搜索。
多属性情形,属性间可能存在依赖关系。为方便解析,规定主属性在前。
是否支持4G [2024/4/17 rev.190 更新支持simtype]
imei:yyyy;iccid:xxxx;simtype:ZZZ
- 支持,并在此返回imei/iccid号和SIM类型{"imei":"yyyy", "iccid":"xxxx", "simtype":"ZZZ"}
- 支持,以json格式返回imei、iccid和SIM卡类型其中 simtype
是可选的,取值:
"esim"
ESIM卡"vsim"
VSIM卡simtype
键时,表示普通物理卡是否支持报警灯
是否有蜂鸣器
当设备支持蜂鸣器时,还可以有以下扩展属性(用','分隔)。能力值中具有扩展属性时,Yes
可省略。
Timer
- 支持定时控制。要支持 TCI_CMD_GET_TIMER_TASK / TCI_CMD_SET_TIMER_TASK支持的对讲音频格式: “音频编码:采样频率:采样位宽:声道数”
如果没有此描述,默认为 "g711a:8000:16:1"
。或者在收到实时音频后取与之相同的配置。
是否支持自动追踪
电池摄像机能力
Yes
- 普通电池摄像机,不支持休眠唤醒。需要支持指令
Dormant
- 支持休眠唤醒的电池摄像机。固件会在sdk空闲时通过 TciCB::on_status() 回调收到 STATUS_IDLE
通知。需要支持指令:
Solar
- 可以边放电边充电的电池摄像机。例如太阳能电池摄像机。要支持的指令同 Dormant
。设备行为参见 手动控制电源模式AOV
- 可休眠和远程唤醒。无事件的休眠期间进入定时唤醒抽帧录像模式。有全天录像服务,抽帧录像回放采用缩时播放逻辑扩展属性用‘’;'`分隔,追加到主能力后面。
对 Dormant
类型摄像机,定义如下扩展属性:
timed-wakeup
- 设备支持主动定时唤醒。需要支持 TCI_CMD_SET_AWAKE_TIME / TCI_CMD_GET_AWAKE_TIME 指令呼叫的时间配置。
时间单位为秒,计时从触发呼叫那一刻开始(对app来说是呼叫事件的时间)。
呼叫超时时间: 超时无人接听,设备呼叫终止,事件状态为missed
。
超时后设备端的默认行为是下电(否则设置标志),APP应退出接听界面或不再尝试连接。
门锁的默认值是60", 其余设备类型为30"。
最大持续时间: 如果非0,接听在到达最大存在时间时强行中止。
设备端强行中止时要调用 TciForceSleeping(), app会在视频通道上收到 RTM_GOINGTO_SLEEP 通知。
APP端收到通知,或倒计时到0,都要断开连接。
30“呼叫超时后,设备下电;拒接或挂断后设备立即下电;用户接听后可以一直通话。
30"呼叫超时后,设备下电;拒接或挂断后设备立即下电;用户接听到180"(从呼叫开始计时)强制关断设备下电。
30"呼叫超时后,设备和app端停止振铃;在180”内用户可以任意接听、挂断、重新连接和退出;180"时强制下电。
AI能力分硬AI(设备设备硬件的AI能力,hw_ai
)和软AI(通过AI服务器获取的AI能力,'sw_ai')两种. 设备在此描述中分别描述这两种能力.
上报格式为一个json数组,格式见例子。
NOTE – 见后面的说明 !!!
* fd
– 人脸检测 (face detection) * fr
– 人脸识别 (face recognition) * mt
– 移动跟踪 (movement tracking) * ot
– 物体跟踪 (object tracking)
body
– 人体检测。cry
– 哭声检测(cry)bad_posture
– 坐姿检测(sitting pose detection)tumble
– 摔倒pet
– 宠物car
– 汽车下面两种取值不再有效,要合并并改为 body
[Rev217, 2024/8/29]
bd
– 人体检测 (body detection)bt
– 人体跟踪 (body tracking) 0
:要购买服务; 1
:不需要购买服务0
:不支持显示边框1
:支持为目标加边框。 要实现指令 TCI_CMD_SET_SHOW_BOX/ TCI_CMD_GET_SHOW_BOX0
:不支持特写1
:支持特写。当检测到对象时输出对象局部放大的图像。 要实现指令 TCI_CMD_SET_ENABLE_CLOSEUP/ TCI_CMD_GET_ENABLE_CLOSEUP表示设备有如下软AI能力: [软AI "sw_ai" 已废弃]
* 移动跟踪(mt): 要购买服务 ----— 软AI都要通过购买猎取
硬AI能力:
为保持兼容,APP要支持旧的"用逗号隔开的一种或多种ai能力字符串"
格式(形如:"body,fd,mt"
),对这种描述,其标志值按=0
处理, 即要购买服务。
新增AI类型,这个类型的名字会以平台注册,但在SDK不会再添加一个对应事件类型的枚举类型(例如 ECEVENT_CRY
)。对这类事件,固件要采用自定义事件标签的方式上报(EVENTPARAM::event=ECEVENT_USER_DEFINED),事件的名字与AI类型的名字一致。
有对应的事件枚举定义的,可以继续使用特定枚举的方式。
在此处描述的ai类型,其对应事件不用在 EventSet
里再描述一次。
布撤防能力
bundle
- 所有报警源共用一个布撤防设置"0xNNN[:0xMMM]"
- 字符串型的支持布撤防的报警类型掩码。["0xNNN", "0xMMM"]
- json数组表示的报警类型掩码(使用字符串是为了避免出现数值溢出)0xNNN
/0xMMM
: 都是数值的16进制 字符串 表示。转成数值后位n
如果为1
,表示事件n
被设置。事件n
取值见 ECEVENT 。
0xNNN
: 为支持独立配置的报警类型。
0xMMM
: 为不支持独立(合并在一起)配置的报警类型。如果缺省,表示其余类型不支持布/撤防。
设备支持布撤防时,要支持指令: TCI_CMD_GET_DEFENCE_REQ/ TCI_CMD_SET_DEFENCE_REQ
支持独立设置的报警源,还要支持指令: TCI_CMD_SET_EVENT_STATE / TCI_CMD_GET_EVENT_STATE
如果设备支持 移动侦测
、人形检测
、声音
三种报警, 并且声音
报警可以单独开关。三种报警类型常数为
于是:
1<<ECEVENT_SOUND = 0x08
,(1<<ECEVENT_MOTION_DETECTED | 1<<ECEVENT_HUMAN_BODY) = 0x06
最后,得到能力描述为 "0x08:0x06"
或 ["0x08", "0x06"]
。
如果设备返回 "0x08"
, 则意味着仅可以对声音报警进行布撤防设置。
设备报告支持独立设置,APP在实现上也可能选择一起配置。固件要能处理这种情况
以上面的能力描述为例。设备报告声音侦测支持独立设置,但APP实现还是采用的统一布撤防。固件在收到的 TCI_CMD_SET_DEFENCE_REQ 命令的请求中 Tcis_SetDefenceReq::items[0].event_mask 值为 ECEVENT_ALL 或 0x0e
,那么声音侦测的布撤防采用本处的统一设置。
之后APP升级,对声音采用单独布撤防设置,event_mast
取值为 0x08
, 那么声音侦测要采用新的的配置,原来的统一设置中要排除声音侦测。
APP调用 TCI_CMD_GET_DEFENCE_REQ 获取配置时,如果能力为 "bundle"
, 命令参数被忽略。否则要使用以下参数结构:
以前面的配置为例,需要在进入声音的布撤防界面前,以
请求声音布撤防配置。在进入另一个对其它项的配置界面前,以 req.event = 0
获取其它报警类型共用的布撤防配置。
设备的变倍(焦)参数及相关属性描述
"times:DESC,DESC[,TOTAL]" "times:DESC[,,TOTAL]" | 变焦能力描述 | TCI_CMD_SET_PTZ_POS TCI_CMD_PTZ_LONG_COMMAND 变焦操作控制指令说明 |
"times:unknown" | 支持,但是变焦倍数未知. APP上只有Z+/Z-按钮 | |
"2lenses" | 双目摄像机 | TCI_CMD_SET_PTZ_POS 双目摄像机的控制 云台配置 |
"2lenses;times:xxx" | 双目+变焦. 双目和变焦描述的组合,用一个';'隔开 | TCI_CMD_SET_PTZ_POS TCI_CMD_PTZ_LONG_COMMAND TCI_CMD_GET_PSP 双目+变焦摄像机的控制 |
其它 | 不支持 |
扩展属性用 ‘’;'`与其它发生隔开
no-shortcut
适用于双目摄像机。如果有此属性,APP端不显示 "远景"/"近景" 按钮。(默认显示)mfocus
手动调焦(manually-focus)。是否支持日夜切换
Yes
- 支持,独立控制。 TCI_CMD_SET_DAYNIGHT_REQ, TCI_CMD_GET_DAYNIGHT_REQAuto
- 支持,状态受白光灯状态控制。亮灭逻辑如下表:白光灯配置 | 白光灯规则 | 红外灯状态 |
---|---|---|
开 | 白天灭,夜间亮 | 灭 |
关 | 灭 | 白天灭,晚上亮 |
自动 | 白天灭。晚上触发移动侦测时亮 | 白天灭,晚上亮。有移动侦测时灭,并触发白光灯 |
设备类型。
设备类型规定了设备主要的行为模式。但相关能力配置仍然需要准确描述。例如台灯类别默认有灯、灯光可调、支持定时器,这些能力仍然需要在DoubleLight
里配置。
DriveRec
- 行车记录仪. see also ProfileDoorBell
- 门铃LockBell
- 门锁LampCam
-台灯(或"Lamp WebCam")BirdFeeder
- 喂鸟器PetFeeder
- 喂食器。要支持 TgCloudCmd_sp.h
中喂食器定义的接口 喂食器KLM
- Kid's Learning Monitor(或称AI伴读宝,但仅在监视功能上增加(并仅支持)坐姿 ECEVENT_SITPOS、入座`x:seated` 、离座 x:off-seat
检查,app端增加统计功能)是否支持白光灯。(实际应叫 WhiteLight, 从历史)
Yes
- 支持。TCI_CMD_GET_DOUBLELIGHT_REQ/ TCI_CMD_SET_DOUBLELIGHT_RESP.
当设备支持白光灯时,还可以有以下扩展属性(用','分隔)。能力值中具有扩展属性时,Yes
可省略。
Dim
- 可调节。在Yes
属性的基础上,支持 TCI_CMD_GET_LIGHT/ TCI_CMD_SET_LIGHT.
设备支持调节的功能项在TCI_CMD_GET_LIGHT 命令的 Tcis_LightState::fMask 中返回。
例如返回 SETLIGHT_F_INTENSITY | SETLIGHT_F_ONOFF, 表示支持调光强度和开关
Timer
- 支持定时控制。要支持 TCI_CMD_GET_TIMER_TASK / TCI_CMD_SET_TIMER_TASK扩展功能的位标识
该能力的值为一个无限位整数的16进制字符串表示。这个字符串表示的数值可以超出本机可以表示的最大整数值。
位 | 功能 | 说明 |
---|---|---|
0 | 为1时表示设备端正确支持了SD卡录像列表中的事件类型 SAvExEvent::event | 以前的 iCam365/WeCAM App没有检查设备SD卡录像列表中事件类型成员 SAvExEvent::event, 导致旧的固件中没有正确返回的这个值。新 iCam365/WeCAM APP 的 UI 将要显示使用这个成员。为了与旧的固件作区分,如果固件正确设置了 SAvExEvent::event, 则设置此标志,App按返回值显示具体事件类型;否则只区分是否为事件。 客户自己开发设备和App的,可以忽略此标志或自行约定 |
更长的例子
假设应用能处理的最大整数类型是uint32
,这个字符串表示的值已经溢出。应用要把它解析成3个32位整数的数组:
标志的第N
位,在数组中对应 vals[N/32]
的 位 (N%32)
设备额外支持或屏蔽的事件集合。
设备按类型,参考硬件配置,会被赋予有一个默认允许的事件集合。集合外的事件会被过滤掉。如果要支持或屏蔽额外的事件,需要在此处报告。
自定义事件需要在此处报告
EventSet
的是一个2元或4元素的数组,每两个元素组为一对,每一对的第一个元素表示要开启的事件,第二个元素表示要屏蔽的事件(或者表述为:下标0、2的表示开启,下标1、3的元素表示禁止)。
元素类型可以是一个整数(用第N位表示事件N),也可以是一个字符串(内容为逗号‘’,'或分号
';'`分割的事件名列表),还可以是另一个JSON数组(事件名)。
整数用来表达SDK预定义事件,因为SDK只对外提供了事件的数值符号,没有公开名称。
字符串或 JSON 字符串数组用来表达用户扩展的事件。
扩展事件以 "`x:`" 开头,仍然需要先在平台注册
门铃设备默认支持呼叫事件 ECEVENT_DOORBELL
,如果要额外支持pir和人形事件,禁用移动侦测(假设。实际门铃默认不支持移动侦测)。要开启和屏蔽的标志:
SDK将EventSet
上报给平台时会把掩码转成tag数组。例如:
在前例基础上,假设用户定义并注册了两个扩展事件 "`x:earthquake`" 和 "`x:volcano_erpt`", 下面的表达都是有效的
SDK通知给平台的内容
(最后更新于 2024-06-28 rev207)
支持的扩展指令集。格式为分号';'(APP端要允许逗号','分隔)隔开的指令名,或者是一个 JSON 数组。
示例:
"close-device;pbrate;status-led"
["close-device", "pbrate", "status-led"]
是否支持G-Sensor
Yes
- 支持(对DeviceType为DriveRec时缺省支持) TCI_CMD_SET_GSENSOR, TCI_CMD_GET_GSENSOR. 不支持场景(Tcis_GsensorSetting::scene 无效(固定为0)"scene"
- 支持按场景设置g-sensor。TCI_CMD_SET_GSENSOR, TCI_CMD_GET_GSENSOR 命令里带场景 Tcis_GsensorSetting::scene 为预定义的场景常数。 【2022/10/24】【2022/10/24】
如果只支持灵敏度设置,可以设置G-Sensor为"scene",并处理 scene=1(GSENSORSCENE::GSENSOR_SCENE_PARKING) 的情形
但推荐使用新的能力值: 在 ExtInstructions 中包含 "parking-mon"
是否支持Gps
移动侦测能力
Default
- 支持Sensitivity
- 支持灵敏度设置Zone
- 支持区域VisibleZone
- 支持区域,并且区域可显示Sensitivity,Zone
- 同时支持灵敏度和区域设置。Sensitivity,VisibleZone
- 支持灵敏度和区域设置。区域可显示支持时要实现的指令:TCI_CMD_SETMOTIONDETECT_REQ, TCI_CMD_GETMOTIONDETECT_REQ
如果区域可显示(VisibleZone
), 需要支持TCI_CMD_GET_MDAREA_STATE, TCI_CMD_SET_MDAREA_STATE
多通道设备(例如画中画),如果只对某一个通道进行设置,配置要写成数组形式。例如
表示要在通道1上进行移动侦测设置
是否有麦克风。默认为有,但不能控制。下面的值要明确指定。
No
不支持Yes
|Muteable
- 支持静音。指令:
TuneVol
- 支持开关和拾音灵敏度调节。支持指令:
附加属性以','隔开追加在主属性后面
AEC
- 设备支持回声消除算法(因此支持全双工对讲)2023-04-07:
多路图像
"{n}-{relation}"
支持 n 路视频。
{relation}
为:
"composed"
: 多路视频一路音频
"independ"
: 多路独立音视频
是否支持PIR(灵敏度设置)
Yes
- 支持. TCI_CMD_SET_PIR, TCI_CMD_GET_PIR用于选择设备支持的服务。内容分公共属性
和特定属性
。
特定属性
同设备类型相关,同时具体内容取决于需求文档的约定。
Profile
的值是一个json
字符串(2024/04/28) ,不再使用非格式化的字符串表示(App要保留对旧的设备的支持,目前只有"EyeplusEU"
一种无格式取值)
NoRemoteLiveAccess
– 是否禁用远程实时音视频访问1
不能远程访问实时音视频0
默认值。可以正常访问NoCloudStorageService
– 是否禁用云存服务1
禁用云存服务0
默认值。有云服务WxVoIP
– 是否支持微信VoIP1
支持0
默认值。 不支持NoVideo
– 设备是否没有视频能力1
无视频。因此无实时视频访问/无云存/无AI 以及其它所有同视频相关的功能Microphone=No
0
默认。有音视频ExtFuncSet
– 扩展功能集(Extended Function Set), 其值是一个json数组。
"KLM"
- 增加学习监视功能(坐姿 ECEVENT_SITPOS、入座`x:seated` 、离座 x:off-seat
检查,app端增加统计功能)例子: Profile = { "ExtFuncSet":["KLM"] }
DeviceType = DriveRec
这种配置用公共属性 ‘'NoRemoteLiveAccess’`代替
""
- 默认。全功能EyeplusEU
- 爱加欧美行车记录仪,无实时视频 https://tange-ai.feishu.cn/docx/Vb3AdES6SoipCfx966ecuwaNnObDeviceType
= IPC
LightSens
- Sensor感光能力
Star
– 星光级Black
– 黑光级
例子: Profile={"LightSens": "Black"}
(是否支持)SD卡录像配置
"res"
- 支持设置分辨率 TCI_CMD_SETRECORD_REQ, TCI_CMD_GETRECORD_REQ. Tcis_SetRecord::recordStream 为录像码流。新的固件应该支持此设置"time-lapse"
- 支持延时缩影 TCI_CMD_SET_TIMELAPSE_RECORD, TCI_CMD_GET_TIMELAPSE_RECORD"no-media"
- 不支持(SD卡)本地录像多个开关值用‘’,'隔开,或写成json数组格式。例如:
"res,time-lapse"或
["res", "time-lpase"]`
是否支持画面旋转
No
- 不支持CW90
|CW180
|CW270
- sensor旋转导致图像顺时针旋转的角度,需要APP端做反向旋转设备支持的图像质量
图像质量描述项的组合.默认 0HD+1SD. 参见 多码流支持
设备屏显描述
"{编码}:{分辨率}:{拉伸标志}[:{旋转}]"
{编码}
: 可以是 mjpg
|h264
|h265
{分辨率}
: {width}x{height}{拉伸标志}
- 0
:不具拉伸能力; 1
:有拉伸能力{旋转}
- cw90
|cw180
|cw270
(与 RotateVideo 的取值一样)。app端在编码前要旋转的角度(手机竖屏时为0度)。该配置的可选的。【增加于2023/12/21】"mjpg:320x240:0:cw90"
要求App抓取320*240的jpeg图片,并且把图像顺时针旋转90度.
"h264:1280x720:1"
App可以视网络情况传输 1280*720 或 640*360(或别的分辨率) 的h264图像,图像的长宽比应基本一致。
扬声器属性
"No"
- 无扬声器"TuneVol"
- 音量可调 TCI_CMD_SET_VOLUME, TCI_CMD_GET_VOLUME是否支持云台, 以及云台控制方式和其它属性
"Yes"
| Relative - 支持(按方向控制)
Absolute
- 支持按位置控制
Hybrid
- 同时支持按方向和位置控制
要支持云台,设备必须在属性中返回 "Yes"
, "Relative"
, "Absolute"
, "Hybrid"
中的一个值("Yes"
和"Relative"
是等效的)【2023-03-31】
如果设备支持云台,能力描述中可以追加其它属性。追加属性放在后面,用','隔开。
PresetPos
- 预置位。
例: "Relative,PresetPos"
.
需要支持命令:
WatchPos
- 守望位.
例:"Absolute,WatchPos"
. 支持守望位就一定支持预置位,需要响应命令
Reset
- 支持云台复位。
有此属性要响应命令 TCI_CMD_PTZ_LONG_COMMAND 的Tcis_PtzCmd::control 参数取值 TCIC_MOTOR_RESET_POSITION (=35)
。并在复位完成后给一个应答
HorzOnly
| VertOnly
- 仅支持水平或垂直方向控制。
默认为同时支持水平和垂直
Cruise
- 支持巡航和线扫。
编辑巡航轨迹使用 TCI_CMD_GET_PTZ_TRACK / TCI_CMD_SET_PTZ_TRACK . 调用巡航轨迹使用 TCI_CMD_PTZ_LONG_COMMAND(设置 Tcis_PtzCmd::control 为 TCIC_PTZ_CALL_TRACK(=10), 或 TCIC_PTZ_AUTO_SCAN(=9))
LocInPic
- 图片内定位(枪球联动)。
有此属性的通道,APP可以允许用户选择该路图像中一个位置并通过 TCI_CMD_LOCATE_IN_PIC 命令回传给设备,设备驱动本通道(如果本通道没有云台,则是另一路有云台的通道(联动))云台指向选中的位置。
有或没有云台的通道都可以有此属性。
举例:
["LocInPic", "Yes"]
通道0无云台,在画面内点击,通道1云台会联动["Yes,LocInPic"]
单通道云台机,可以在画面内点击【多枪一球的产品,约定有云台的这一路为通道0】
品字形布局、双枪并列的机器,当球与两路枪联动时,如果不另加说明,App默认将两路枪的图像按在数组中出现的顺序左右排列,并将两路图像从逻辑上视为合为一路(一枪)。发送 `TCI_CMD_LOCATE_IN_PIC` 时,x
取值基于合成的后的图像。
Y
:计算方式不变。
X
:‘X’ = 先按原来的方式计算相对原始图像(通道1或通道2)宽度的比例除以2。对通道1,
X=X'; 对通道2,
X=X'+0.5`
参数中的channel
忽略(可传0,即带云台这一路的通道号)
传统摄像机,一路视频就对应一个镜头、一路音频、0或一个云台等。命令中用到的channel
参数,就意味这样一套实体的组合。
双目和画中画摄像机,存在独立或共享云台(可能还有别的硬件)情形,在描述上会有一些特殊的地方。
如果两个镜头不是随动(独立)的,要用一个长度为2的数组来描述哪一个镜头下可以操纵云台。
数组元素0和1分别对应画中画设备的通道0、1,双目摄像机的远景和近景。
云台控制命令中channel
取0
或1
,对应数组下标。
以 SupportPTZ = ["No", "Yes"]
为例:
SupportPTZ | 元素0(No) | 元素1(Yes) |
---|---|---|
画中画 | 通道0: 不支持云台 | 通道1 支持云台 |
双目摄像机 | 远景: 不支持云台 | 近景 支持云台 |
"Relative,PresetPos"
。channel=0
Absolute
属性设备不支持 PresetPos
预置位功能完全在APP端实现。APP调用 TCI_CMD_GET_PTZ_POS 获取当前位置并保存为一个预置位,以后调用 TCI_CMD_SET_PTZ_POS 来恢复到预定位置
设备支持PresetPos
这种配置是为了让APP保存预置位时,调用 TCI_CMD_SET_PSP 通知设备,以便于设备连接第三方控制器(NVR)时预置位信息可以在APP和第三方间保持同步。
Relative
和 PresetPos
用户自定义Feature
这个值用于第三方开发者扩展自己的属性。获取能力集时,这个值透传给App端,App的SDK再返回给应用自行处理。
UDF
的值是一个json对象的字符串表示。例如 {"feat1":"value1", "feat2":"value2"}
如果对象中含有一个名为 从rev320起设备端取消ext_attrs。UDF的所有内容都上报到平台ext_attrs
的属性,这个属性值会传给平台并在平台端保存。在获取设备列表时可以在 ext_attrs::udf
里得到这个值。
在App从设备获取能力集时,可以在 "UDF"
下拿到上面的值:
从平台拉取列表时,可以得到:
本语法用来描述设备所具有的变倍能力的类型(光学/电子放大)、放大倍数和控制方式。
下面公式中的 '+', 空格,[], 引号 是用来表示连接、分隔和常量字符串,不是最终能力字符中一部分
total_steps
- 总的变倍步数. 如果单独指定了各级变倍的步数,则不需要这个值. 缺省为总的变倍倍数num_of_steps
- 某一级的变倍步数EMPTYDESC
- 空字符串,等于不支持变倍(1倍)tlist
- 支持的倍数列表- 光学变倍 *
'E'- 电子变倍 *
'S'- APP模拟电子变倍 *
times- 放大倍数, <span style="color:red">浮点类型</span> *
presentation-
times`的表征放大倍数, 浮点类型。 待解释{DESC}
TIMESSTR
中,有两个或两个以上的{DESC}
times:4,1.5
4倍光学/1.5倍电子,6.0步调整(默认)
times:4,2,5
4倍光学/2倍电子,5步调整。这种步数的描述太粗略,应该采用下面的形式
times:L4@(1:1.5:2:3:4),E2/9
4倍光学变倍,可以分5步控制(在 1x/1.5x/2x/3x/4x
时停下来)
2倍光学变倍,可以细分9步,每步间隔 (倍数2 - 1)/(步数9 - 1)
。 本例中每步分别对应 1x, 1.125x, 1.25x, 1.375x, 1.5x, 1.625x, 1.75x, 1.875x, 2x
.
times:S4,,
这个是要求在APP端模拟4倍电子变焦。步数为默认的4步。因为只有一种变焦方式,所以第2个{DESC}
为空
2lenses;times:S1.5F3,S4
这个是双目摄像机,两个镜头各自在APP端模拟1.5倍和4倍电子放大。并且,近景镜头放大到1.5倍时,APP会定位显示到3 -— 这个看效果!!!
变焦控制指令使用现有的云台操作命令,请求结构体不变,但参数增加新的语义。
APP端的UI可能有不同设计,因而操作方式也不一样:
x=y=-1.0
,z
为变倍位置.space
结构成员中x=y=0
, zoom>0表示zoom-in, zoom<0表示zoom-out,设备在执行变焦操作后调动一个定时器(或延时),到时后停止动作control=TCIC_LENS_ZOOM_IN
(23)或TCIC_LENS_ZOOM_OUT
(24),设备执行zoom-in或zoom-out动作。用户释放按钮时control=TCIC_PTZ_STOP
(0),设备动作停止。双目摄像机(Cap-Zoom = "2lenses"),两个镜头的切换,视为2倍变焦摄像机在1x和2x间做变倍操作。
使用 TCI_CMD_SET_PTZ_POS 指令,参数 PtzPos 的 z
取 0.0
和 1.0
,分别对应APP界面上的两个快捷按钮【近景】和【远景】。
切换镜头时,要在新的镜头的第一帧前调用 TciSendLensSwitchFlag() 插入一个标志帧。
在APP端会收到一个 FRAMEINFO_t
结构,其成员 flags = 1
,其余皆为0
.
【双目+变焦】 摄像机,可以有两种控制UI:
APP上只有变焦界面,对用户隐藏双目切换操作。
设备按普通变焦像机上报能力(Cap-Zoom="times:xxx"
)和响应 TCI_CMD_SET_PTZ_POS 指令
APP上有变焦和远/近景切换界面。
设备要上报能力 Cap-Zoom="2lenses;times:xxxx"
(双目和变焦能力的组合,用';'隔开),响应 TCI_CMD_SET_PTZ_POS 指令
远/近景按钮对应的变倍位置z
不再是固定的0.0
和1.0
,而是通过指令 TCI_CMD_GET_PSP 获取
此处码流
的概念,定义为某种质量的图像输出。选择一种码流
,即是选择一种不同的图像质量(分辨率/fps/bitrate等的不同)。 双码流设备支持同时输出两种不同质量的码流。 三码流设备可以输出3种不同质量的码流,但不一定有能力同时输出。当不能同时输出时,靠切换某一路码流的质量实现。
质量组合
: 设备可以输出的图像质量。由质量描述项
,按质量从高到低的顺序,用‘’+'`连接.质量描述项
: 由码流编号
连接质量描述符
构成。码流编号
:0, 1, 2, ...
,低的编号对应更高的分辨率质量描述符
: 质量描述符
不一定限于分辨率。例如可能是HD12fps
,HD30fps
,Prefer
等任意字符串。其意义由固件自行解释,并与APP约定在UI上提示的方式。
质量描述项
举例:
0HD
: 表示码流0上的高清图像1SD
: 表示码流1上的标清图像质量组合
举例:
0HD+1SD
: 设备只支持双码流,在码流0上输出高清,码流1上输出标清 0FHD+1HD+2SD
: 设备支持3路码流同时编码, 分别在码流0/1/2上输出全高清/高清/标清图像 0FHD+1HD+1SD
: 设备支持3种质量,但同时只能编码两路图像。它的码流0固定为FHD,码流1可以为SD或HD。
TCI_CMD_SETSTREAMCTRL_REQ
命令,在命令请求里携带质量参数quality
。取值TCIC_QUALITY_MAX(1)
或TCIC_QUALITY_MIN(5)
, 分别对应设备的高分辨率(0)和低分辨率码流(1)修改后的逻辑使用同样的命令和quality
参数。但quality
的值会映射到质量描述项
而不是码流。
为了兼容旧实现,保留原有的图像质量常数定义。
暂时最多支持5种质量。质量常数与码流的对应关系,要看设备的Resolutions
能力。
使用索引来引用质量描述项
是最简单的。但为了兼容,需要使用一种更复杂的映射方式:
N
种质量,下表中第3列包含数字N
的,其对应的质量常数会被用来标识N
种质量中的一种。质量常数 | 含义 | 设备支持的码流(质量)数 |
---|---|---|
TCIC_QUALITY_MAX | 最高质量 | 2,3,4,5 |
TCIC_QUALITY_HIGH | 4,5 | |
TCIC_QUALITY_MIDDLE | 中等质量 | 3,4,5 |
TCIC_QUALITY_LOW | 5 | |
TCIC_QUALITY_MIN | 最低质量 | 2,3,4,5 |
例如,设备支持3种质量(码流),则会用到3种质量常数TCIC_QUALITY_MAX
/TCIC_QUALITY_MIDDLE
/TCIC_QUALITY_MIN
,分别对应设备上报的Resolutions
中的第1/2/3种质量。
APP收到设备的Resolutions
能力后,忽略质量描述项
前面的数字(注意:可能存在旧的固件没有数字)。
将描述符转成文字在UI上显示
根据描述项
数目,确定每个描述项对应的质量常数
(如前表)
用户在UI选择 高清/标清/... 时,APP在 TCI_CMD_SETSTREAMCTRL_REQ
命令的quality
中传入相应的质量常数
SDK收到质量选择命令,如果请求的质量对应的码流下有多个质量设置,则将质量常数
转换为质量描述项
, 调用应用的TciCB::switch_quality(int channel, int stream, const char *qstr)
回调。
参数 stream/qstr
对应Resolutions
中某一项的值。例如 "0FHD"
对应stream=0, qstr="FHD"
.
设备检查对应码流的质量设置是否与请求一致,如果不一致则修改之。
设备能力: 0FHD+1HD+1SD
质量常数和设备端对应的码流/质量:
质量描述项 | 质量常数 | APP显示 | 当前设置 |
---|---|---|---|
0FHD | TCIC_QUALITY_MAX | 全高清 | * |
1HD | TCIC_QUALITY_MIDDLE | 高清 | * |
1SD | TCIC_QUALITY_MIN | 标清(或流畅) |
假设设备当前设置为:
用户打开APP时,默认请求的高清图像。
TCI_CMD_SETSTREAMCTRL_REQ
命令的 quality
参数中传入 TCIC_QUALITY_MIN
。TCIC_QUALITY_MIN
对应的质量描述项
为1SD
(码流为1,支持HD
和SD
两种质量)。SDK调用TciCB::switch_quality(0, 1, "SD")
,固件知道当前质量为高清,因此将码流1的质量设为标清。