简体中文

双向视频产品设计思路

双向视频产品-设备端呼叫流程 | TUTK P2P SDK 开发指南

一、概述

双向视频类产品中,设备端主动发起呼叫的场景分为两种:设备当前无用户访问设备当前有用户访问。两种场景的处理流程不同,需根据实际连接状态选择对应实现方式,核心依赖 TUTK P2P 音视频传输API和消息推送通道。

二、场景一:设备当前无用户访问

设备未被任何APP连接时,因手机端通常不携带固定UID,需通过消息服务器推送呼叫通知,引导用户打开APP并建立P2P连接,进而实现双向视频。

支持的消息推送通道:

  • TUTK 原生:KPNS(TUTK 推送服务)
  • 系统级推送:苹果 APNS(iOS)、谷歌 FCM(Android 海外)
  • 国内厂商推送:华为 HMS Push、小米 MI Push、OPPO Push、vivo Push 等
  • 自定义推送:厂商自建消息通道
设备无用户访问时的呼叫流程示意图

图 1:设备无用户访问时的呼叫流程示意图

核心流程步骤:

  1. 设备上线报到(可选):设备启动后连接 TUTK 服务器完成上线(设备通常长期在线,此步骤非必需),同步设备状态和绑定的APP账号信息。

  2. 设备广播呼叫消息:设备触发呼叫事件(如触发传感器、用户按键),通过预设的消息通道(如 KPNS/APNS)向绑定的手机端发送呼叫通知,消息需包含设备 UID、呼叫类型等关键信息。

  3. 用户响应呼叫:手机端收到推送消息,用户点击消息后自动启动 APP(需配置APP的推送唤醒权限)。

  4. APP 发起 P2P 连线:APP 启动后,读取消息中的设备 UID,调用 TUTK P2P SDK 接口发起连接请求,完成身份认证和 P2P 隧道建立。

  5. 双向音视频传输:P2P 连线成功后,APP 与设备端分别启动音视频采集、编码,通过 SDK 提供的音视频传输API互相发送数据,实现实时通话。

  6. 通话结束挂断:任意一方触发挂断操作,APP 和设备端停止音视频采集,释放 P2P 连接资源。

三、场景二:设备当前有用户访问

设备已被 APP 成功连接(用户正在查看实时视频或已建立会话),此时无需通过消息推送,直接通过 P2P 通道发送控制指令即可触发双向视频切换。

核心优势:

  • 无需依赖外部消息通道,响应速度快;
  • SDK v3.3+ 支持全双工通道,无需额外建立新通道,直接使用现有 0 通道传输音视频数据。

核心流程步骤:

  • 设备触发呼叫事件:设备需发起双向视频(如用户按下通话键),此时已存在有效的 P2P 连接(APP 已访问设备)。
  • 设备发送控制指令:设备通过 avSendIOCtrl 接口发送双向视频呼叫指令(如 AV_CMD_DUAL_DERECTION_CALL)给已连接的 APP。
  • APP 响应指令:APP 通过 avRecvIOCtrl 接口接收指令后,自动启动本地音视频采集、编码模块。
  • 全双工音视频传输:APP 与设备端通过现有 P2P 通道(0 通道),使用音视频传输API互相发送数据,实现双向通话(无需额外创建通道)。
  • 通话结束/切换:挂断后,APP 可切换回单向查看模式(停止本地音视频发送),或直接释放连接。

四、涉及核心API

以下 API 为双向视频呼叫流程的核心依赖,需根据场景组合使用:

1. 控制指令传输API(场景二核心)

// 设备端发送控制指令(如呼叫指令)
int avSendIOCtrl(int sid, unsigned int ioctrlType, unsigned char *pBuf, int bufLen);

// APP端接收控制指令
int avRecvIOCtrl(int sid, unsigned int *pIoctrlType, unsigned char *pBuf, int *pBufLen);

// 关键指令常量(示例)
#define AV_CMD_DUAL_DERECTION_CALL 0x1234  // 双向视频呼叫指令(需与SDK实际定义一致)

说明:sid 为 P2P 会话ID,ioctrlType 为指令类型,pBuf 为指令附加数据(可选),用于场景二中设备向APP发送呼叫通知。

2. 视频数据传输API

// 发送视频帧数据(设备端/APP端通用)
int avSendFrameData(int sid, unsigned char *pFrame, int frameLen, FRAMEINFO *pFrmInfo);

// 接收视频帧数据(SDK v3.3+ 推荐使用,支持更多帧信息)
int avRecvFrameData2(int sid, unsigned char *pFrame, int *pFrameLen, FRAMEINFO *pFrmInfo);

// 帧信息结构体(存储视频分辨率、帧率等参数)
typedef struct {
    int width;    // 视频宽度
    int height;   // 视频高度
    int frameRate;// 帧率
    int frameType;// 帧类型(I帧/P帧)
    // 其他扩展字段...
} FRAMEINFO;

说明:用于双向视频数据的发送和接收,需配合音视频编码模块使用,SDK v3.3+ 支持全双工传输,0 通道即可满足需求。

3. 音频数据传输API

// 发送音频数据(设备端/APP端通用)
int avSendAudioData(int sid, unsigned char *pAudio, int audioLen, AUDIOINFO *pAudioInfo);

// 接收音频数据
int avRecvAudioData(int sid, unsigned char *pAudio, int *pAudioLen, AUDIOINFO *pAudioInfo);

// 音频信息结构体(存储采样率、声道数等参数)
typedef struct {
    int sampleRate; // 采样率(如 8000Hz、16000Hz)
    int channel;    // 声道数(1=单声道,2=立体声)
    int bitWidth;   // 位宽(如 16bit)
    // 其他扩展字段...
} AUDIOINFO;

说明:与视频API配合实现完整双向音视频通话,音频参数需两端保持一致(如统一采样率、声道数)。

关键注意事项

1. SDK 版本要求:全双工通道支持需使用 v3.3+ 版本 SDK,低版本需额外创建通道实现双向传输;

2. 消息推送配置:场景一需提前完成推送通道集成(如 KPNS/APNS 配置),确保设备能正常向绑定的 APP 发送呼叫消息;

3. 权限申请:APP 需申请推送唤醒权限、音视频采集权限(摄像头/麦克风)、后台运行权限,避免通话中断;

4. 指令一致性:设备端发送的控制指令(如 AV_CMD_DUAL_DERECTION_CALL)需与 APP 端约定一致,或使用 SDK 预定义指令;

5. 资源释放:通话结束后需及时停止音视频采集、释放 P2P 会话资源,避免内存泄漏和功耗过高;

6. 网络适配:P2P 连接失败时(如 NAT 穿透失败),可降级使用 Relay 中继模式,确保通话可用性(需服务器支持)。

即刻开启您的物联网之旅

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

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

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

TUTK服务尽在掌握

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

返回顶部