简体中文

双目摄像头拉流方法

Ceres多通道拉流实现指南 | TUTK SDK 开发手册

一、概述

本文档聚焦Ceres多通道(通道0/1)拉流的核心实现方案,明确服务器、音箱端(Alexa/Google Hub)和设备端的关键操作步骤,适配双路流并行传输场景。
核心原则:
  • 通道0既支持指令传输也支持流传输,通道1仅支持流传输;
  • 服务器采用串行方式建立多通道,设备端需延长通道创建超时时间;
  • 音箱端需发起两次独立拉流请求,分别对应通道0和通道1;
  • 基于account标识和IOTC_Channel_ID区分通道类型,实现精准流传输控制。

二、API参考

多通道拉流仅使用拉流初始化接口,无需额外新增接口,支持以下3种认证类型的初始化接口:

(一)支持的拉流初始化接口

  • init_streaming:P2P场景下基于 account/password 认证
  • init_streaming_v3:P2P场景下基于 avtoken/identity 认证
  • init_streaming_v4:基于设备 credential 认证
  • 接口请求地址:https://domain:port/ceres(POST方法,Content-Type: application/json),接口请参考:Ceres拉流接口

(二)核心参数配置

通道必填参数参数值说明
通道0channel0明确指定通道编号
account(init_streaming)/ identity(init_streaming_v3)ceres-channel-0通道标识,可自定义但需与通道1区分
通道1channel1明确指定通道编号
account(init_streaming)/ identity(init_streaming_v3)ceres-channel-1必须与通道0的标识严格区分

三、Ceres服务器实现

服务器接收拉流请求后,按通道编号执行不同的连接逻辑,核心流程如下:

1. 通道0请求处理(channel=0)

  • (1)直接与目标设备建立连接;
  • (2)创建通道0的 AV Channel;
  • (3)在通道0上发送流控制指令(IOTYPE_USER_IPCAM_START、IOTYPE_USER_IPCAM_AUDIOSTART);
  • (4)拉取通道0的流数据。

2. 通道1请求处理(channel=1)

  • (1)与目标设备建立连接;
  • (2)先创建通道0的 AV Channel,通过通道0发送流控制指令;
  • (3)再创建通道1的 AV Channel;
  • (4)拉取通道1的流数据。

注意事项

服务器采用串行方式创建多通道(先通道0后通道1),设备端需将通道创建超时时间延长至合理值(建议≥30秒),避免连接失败。

四、音箱端(Alexa/Google Hub)实现

音箱端需通过两次独立拉流请求获取双路流地址,核心步骤如下:

1. 发起拉流请求

  • (1)调用拉流初始化接口(支持上述3种接口),分别发起通道0和通道1的拉流请求;
  • (2)两次请求的设备标识(device/UDID)必须一致,确保指向同一设备;
  • (3)按参数配置要求填写 channel 和 account/identity 字段(通道0填0和ceres-channel-0,通道1填1和ceres-channel-1)。

2. 流拉取与播放

  • (1)接收服务器返回的两个拉流URL(分别对应通道0和通道1);
  • (2)并行拉取两路流数据,分别解码播放;
  • (3)无需额外处理指令交互,仅需关注流数据的拉取与播放稳定性。

3. 示例请求(通道0 curl)

通道0拉流请求(curl命令)
curl -XPOST -d 'query { init_streaming(   authToken:"dm verify token",   authType:"Bearer",   device:"device UID",   account:"ceres-channel-0",   password:"secret",   protocol:"rtsp",   realm:"rd",   state:"state",   channel:0 ){   code,   url,   msg } }' https://domain:port/ceres

4. 示例请求(通道1 curl)

通道1拉流请求(curl命令)
curl -XPOST -d 'query { init_streaming(   authToken:"dm verify token",   authType:"Bearer",   device:"device UID",   account:"ceres-channel-1",   password:"secret",   protocol:"rtsp",   realm:"rd",   state:"state",   channel:1 ){   code,   url,   msg } }' https://domain:port/ceres

五、设备端实现

设备端需监听服务器连接请求,创建双AV通道并按规则处理流传输,核心步骤如下:

1. 通道创建

  • (1)监听Ceres服务器的连接请求;
  • (2)通过 IOTC_Channel_ID(0)IOTC_Channel_ID(1) 创建两个独立的 AV Channel;
  • (3)延长通道创建超时时间(建议≥30秒),适配服务器串行创建逻辑。

2. 身份判断与流传输控制

基于 avServStartEx 接口的 outConfig.account 值判断通道类型,按以下规则处理流传输:
设备端核心逻辑伪代码
// 设备端核心逻辑伪代码 if (outConfig.account == "ceres-channel-0") { // 通道0:收到控制指令后开始传流 if (receivedCmd == IOTYPE_USER_IPCAM_START || receivedCmd == IOTYPE_USER_IPCAM_AUDIOSTART) {   startStream(IOTC_Channel_ID = 0); // 传输通道0的流 } } else if (outConfig.account == "ceres-channel-1") { if (IOTC_Channel_ID == 1) {   // 通道1:直接传流,无需等待控制指令   startStream(IOTC_Channel_ID = 1); // 传输通道1的流 } else if (IOTC_Channel_ID == 0 && (receivedCmd == IOTYPE_USER_IPCAM_START || receivedCmd == IOTYPE_USER_IPCAM_AUDIOSTART)) {   // 通道0收到通道1的指令:仅用于指令传输,忽略并不传流   ignoreCmd(); } }

3. 关键规则说明

  • 通道0(account=ceres-channel-0):必须收到控制指令后才传流,支持指令+流双重传输;
  • 通道1(account=ceres-channel-1):
    • 若IOTC_Channel_ID=1:直接传流,服务器不会在该通道发送控制指令;
    • 若IOTC_Channel_ID=0:仅作为指令传输通道,收到控制指令后忽略,不触发流传输。

即刻开启您的物联网之旅

联系解决方案专家
Kalay App
资讯安全白皮书
全球专利布局
解决方案
新闻动态
公司动态
行业资讯
媒体报道
永续发展
经营者的话
社会参与
环境永续
公司治理

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

© 2022 物联智慧科技(深圳)有限公司版权所有粤ICP备14023641号
在线咨询
扫一扫

TUTK服务尽在掌握

全国免费服务热线
+86 755 27702549

返回顶部