简体中文

测试-可删除

Ceres 多通道拉流核心实现文档

一、概述

本文档聚焦Ceres多通道(通道0/1)拉流的核心实现方案,明确服务器、音箱端(Alexa/Google Hub)和设备端的关键操作步骤,适配双路流并行传输场景。

核心原则:

1. 通道0既支持指令传输也支持流传输,通道1仅支持流传输;

2. 服务器采用串行方式建立多通道,设备端需延长通道创建超时时间;

3. 音箱端需发起两次独立拉流请求,分别对应通道0和通道1;

4. 基于account标识和IOTC_Channel_ID区分通道类型,实现精准流传输控制。

二、API参考

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

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

1. init_streaming:P2P场景下基于 account/password 认证

2. init_streaming_v3:P2P场景下基于 avtoken/identity 认证

3. init_streaming_v4:基于设备 credential 认证

接口请求地址:https://domain:port/ceres(POST方法,Content-Type: application/json)

(二)核心参数配置
通道必填参数参数值说明
通道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)

① 直接与目标设备建立连接;

② 创建通道0的 AV Channel;

③ 在通道0上发送流控制指令(IOTYPE_USER_IPCAM_START、IOTYPE_USER_IPCAM_AUDIOSTART);

④ 拉取通道0的流数据。

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

① 与目标设备建立连接;

② 先创建通道0的 AV Channel,通过通道0发送流控制指令;

③ 再创建通道1的 AV Channel;

④ 拉取通道1的流数据。

注意

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

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

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

1. 发起拉流请求

① 调用拉流初始化接口(支持上述3种接口),分别发起通道0和通道1的拉流请求;

② 两次请求的设备标识(device/UDID)必须一致,确保指向同一设备;

③ 按参数配置要求填写 channel 和 account/identity 字段(通道0填0和ceres-channel-0,通道1填1和ceres-channel-1)。

2. 流拉取与播放

① 接收服务器返回的两个拉流URL(分别对应通道0和通道1);

② 并行拉取两路流数据,分别解码播放;

③ 无需额外处理指令交互,仅需关注流数据的拉取与播放稳定性。

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. 通道创建

① 监听Ceres服务器的连接请求;

② 通过 IOTC_Channel_ID(0)IOTC_Channel_ID(1) 创建两个独立的 AV Channel;

③ 延长通道创建超时时间(建议≥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

返回顶部