一、API参考:Ceres拉流API
二、Ceres服务器的做法:
- 服务器在收到request后将发起连接。
- 如果拿到request的channel是0,则直接连接设备,建立通道0的av channel,在0通道上发指令,并拉取通道0的流。
- 如果拿到request的channel是1,则连接设备,先后建立通道0,在0通道上发指令,再建立通道1的av channel,并拉取通道1的流。
三、音箱端(alexa、google hub)做法要点:
- 需要发起两次拉流请求,对应的API: init_streaming或者init_streaming_v3、 init_streaming_v4。
- 调用init_streaming的时候,参数填写如下:
通道0:channel填0,account填"ceres-channel-0"(account可以自定义,但是需要0通道和1通道区分开来)
通道1:channel填1,account填"ceres-channel-1"
- 分别用ceres回应的2个url拉取通道0和1的流。
四、设备端的做法要点:
- 设备端监听到ceres的连接,同时用IOTC_Channel_ID(0和1)去创建2个av channel。(需要适当延长通道创建的超时时间,因为服务器是用串行的方式。),判断avServStartEx的outConfig.account值。
- 如果判断account是"ceres-channel-0"(即0通道),在收到指令(IOTYPE_USER_IPCAM_START和IOTYPE_USER_IPCAM_AUDIOSTART)的时候开始传流。
- 如果判断account是"ceres-channel-1"(即1通道),并且IOTC_Channel_ID是1,则直接传流,不用等指令(因为服务器不会在1通道的av channel发送IOTYPE_USER_IPCAM_START和IOTYPE_USER_IPCAM_AUDIOSTART)。
- 如果判断account是"ceres-channel-1",在收到指令(IOTYPE_USER_IPCAM_START和IOTYPE_USER_IPCAM_AUDIOSTART)的时候,判断IOTC_Channel_ID是0,直接忽略,不需要传流(仅做指令传输使用)。