抖音开放平台Logo
开发者文档
控制台

互动工具开发者指南(仅直播伴侣)

收藏
我的收藏

更新日志

日期
更新内容
2024.03.08
首次发布接入流程以及整体交互流程,提供 C++ SDK 和最简单的 C++ 上屏 Demo
2024.03.15
更新 C++ SDK 和 Demo,修复上屏偶现不成功的问题。Demo 新增添加两路音视频数据的样例。
2024.03.20
添加备注"单个素材通道的视频数据分辨率不能超过 1920*1080";明确插件接收到管道消息 EVENT_DISCONNECTED 后,需要执行退出进程的操作。
2024.03.26
修复已知上屏稳定性问题;
插件客户端退出不主动删除所有相关素材,可等待插件客户端重连;
调试面板新增"关闭插件"的入口;
C++ Demo 添加从命令行启动参数读取 pipeName 和 maxChannels 的逻辑;
C++ Demo 添加写日志的逻辑;
文档新增启动和退出说明;
文档更新 C++ SDK 和 Demo;
2024.04.01
调整直播间开放数据推送事件的数据结构;
调试面板新增 "模拟互动消息" 的按钮;
新增素材删除事件;
新增删除所有素材的 API;
新增获取所有素材的 API;
修复调用删除素材 API 不生效的问题;
修复偶现pipe建立失败问题;
2024.04.09
更新 C++ SDK( PipeSDK.dll 加上签名)
2024.04.11
更新 C++ SDK,修复不连续发送数据时可能会导致数据帧会错位读写的问题;
更新用于调试的伴侣版本
2024.05.23
更新伴侣调试包
从伴侣 7.7.0 版本开始,新增启动参数 --mateVersion,指代当前伴侣版本
从伴侣 7.7.0 版本开始,上屏内容大小不做强约束,只做建议
2024.06.03
更新伴侣调试包
从伴侣 7.8.0 版本开始,支持横屏开播模式下使用互动工具(7.8.0之前仅支持竖屏)
从伴侣 7.8.0 版本开始,新增启动参数 --layoutMode,指代开播的布局模式
2024.06.28
从伴侣 8.0.0 版本开始,送礼数据的礼物种类从 8 款提升至 40+ 款
从伴侣 8.0.0 版本开始,新增两个 API 调用
    获取礼物列表
    查询直播间开放数据(目前只有直播间总点赞数)
从伴侣 8.0.0 版本开始,直播间开放数据推送事件新增两类消息
    粉丝团变更消息
    关注变更消息
从伴侣 8.0.0 版本开始,直播间开放数据推送事件新增三个维度的观众属性
    用户荣誉等级
    用户是否关注主播
    用户在当前直播间的粉丝团等级
2024.07.23
    更新 C++ SDK,解决部分场景下消息收不到的问题
    更新 C++ SDK,更新 SetLogMessageCallback 接口定义

总流程

客户端交互时序图

启动说明:
伴侣启动第三方插件的时候会加上启动参数,样例如下:
plugin.exe --pipeName=784612345 --maxChannels=6 --mateVersion=7.7.0 --layoutMode=0
参数详细说明:
启动参数
说明
生效版本
pipeName
用于 SDK 的初始化
全部
maxChannels
用于 SDK 的初始化
全部
mateVersion
区分伴侣版本。
>= 7.7.0
layoutMode
开播的布局模式。 0 代表竖屏,1 代表横屏。竖屏以宽度 1080 作为上屏画布的基准,横屏按照宽度 1920 作为上屏画布的基准
>= 7.8.0
退出说明:
如果是 伴侣侧主动退出,插件进程会收到 EVENT_DISCONNECTED 事件,此时预期是插件进程自行执行退出进程的操作。
如果是 插件进程被动退出,伴侣侧会保持等待插件重连的状态,除非主播将素材区相关的素材全都删除,伴侣侧才会结束等待重连的状态。(在等待重连状态下,如果在调试面板用相同的 AppID 点击“启动插件”,将不会启动进程,因为这里预期是插件自身启动重连,此时可以点击调试面板 的 “关闭插件” 触发伴侣侧的主动退出 )。

名词解释

    插件:业务概念,对主播来说,是指一系列 直播伴侣 上提供的互动玩法。
    包体:业务概念,是指某个插件的程序压缩包,是开发者需要厂商平台上传提审的文件
    素材:业务概念,是指在伴侣在画布上展示的最小单元,可以有位置、大小等属性,一个插件可以产生多个素材。
    管道:技术概念,是指插件跟伴侣的通信通道,可以传输 音视频数据指令数据
    素材通道:技术概念,一个管道可以传输多个素材通道的音视频数据,插件给伴侣推送的音视频数据需要带上指定的素材通道 ID。一个素材通道对应伴侣画布上的一个素材。

SDK 接入

伴侣调试包下载

C++ 接入

SDK 下载地址(二选一):

    纯 pipeSDK 产物:
pure_PipeSDK.zip
    包含 FFmpeg 开源库的产物(方便 demo 集成):
PipeSDK_FFmpeg.zip

接口说明

接口
参数
返回值
CreatePipeClient
IPipeClient
返回值=TRUE成功,FALSE失败,同时返回pipe客户端实例
ChannelLayoutToChannels
IPC_CHANNEL_LAYOUT
根据Layout获得声道数
AudioFormatToBits
IPC_AUDIO_FORMAT
根据音频格式获得位宽
GetTimeNS
获得当前系统时间单位纳秒
QueryVersion
获得当前SDK版本号

名词解释

名称
描述
说明
IPC_EVENT_TYPE
事件类型
IPC_PACKET
音视频数据包
struct Video
{
BOOL bFlipH;//是否水平镜像
BOOL bFlipV;//是否垂直镜像
UINT32 cx;//视频宽度
UINT32 cy;//视频高度
INT32 angle;//旋转角度
IPC_RATIONAL frameRate;//视频帧率默认(1/30)
IPC_VIDEO_PIXEL_FORMAT format;//视频格式默认使用RGBA带透明通道
IPC_COLOR_SPACE cs;//颜色空间
IPC_COLOR_TRANSFER ct;//颜色范围
IPC_VIDEO_RANGE range;//视频范围
};
struct Audio
{
IPC_AUDIO_FORMAT format;//音频格式
IPC_CHANNEL_LAYOUT layout;//声道布局
UINT32 sampleRate;//采样率
UINT32 count;//采样格式
UINT32 planes;//plane数
UINT32 blocksize;//对齐位宽
};
union {
Audio audio;
Video video;
};
UINT8* data[MAX_AV_PLANES]; //视频YUV多Plane和音频多Plane格式,具体设置参考demo.
UINT32 linesize[MAX_AV_PLANES];//视频YUV各分量单行大小,音频数据大小,具体设置参考demo
UINT32 size;//音视频数据大小,具体设置参考demo
INT64 timestamp; //数据包时间戳用于同步,具体设置参考demo
视频宽高最大1920*1080
音频数据大小=audio.count * audio.blocksize
IPC_VIDEO_PIXEL_FORMAT
视频格式
IPC_COLOR_SPACE
颜色空间
IPC_COLOR_TRANSFER
颜色转换函数(光电转换)
IPC_VIDEO_RANGE
视频范围
IPC_AUDIO_FORMAT
音频格式
IPC_CHANNEL_LAYOUT
音频声道布局
LogSeverity
日志等级
PIPE_CALLBACK
Pipe事件回调
LOG_MESSAGE_CALLBACK
日志回调
typedef BOOL (*LOG_MESSAGE_CALLBACK)(LogSeverity level, LPCSTR file, INT32 line, LPCSTR text);
日志回调,主要用于导出SDK内部日志
LogSeverity level: 日志级别
LPCSTR file: 日志所在文件
INT32 line: 日志所在文件中的行数
LPCSTR text: 日志具体内容
IPipeClient
SendMessage(UINT32 msgid, const CHAR* data, UINT32 size)
发送消息, 主要用于 API 调用。
Msgid: 消息ID。 主要用来对齐消息是否有收到
Data: 消息体,JSON 字符串
WritePacket(const IPC_PACKET* apk,UINT32timeoutms)
发送数据包同步模式可以设置超时时间(毫秒)
WritePacketAsync(const IPC_PACKET* apk)
发送数据包异步模式服务端最快速度上屏和播放不会同步
QueryVersion
当前的版本号
SetCallback([](IPC_EVENT_TYPE type, UINT32 msg, const CHAR* data, UINT32 size, void* args)
接收消息回调

Demo 快速接入

源码下载地址

ConsoleApplication_source.zip
源码运行前置环境要求:
    Windows 7+,建议 Windows 10 系统
    Visual Studio 2019+
    使用 C++ 作为开发语言,支持 C++ 17 版本

步骤

    1.下载 demo 源码,解压后用 Visual Studio 打开,修改代码中的视频文件路径为本地存在的 mp4 文件路径,重新生成解决方案,得到构建产物 ConsoleApplication1.exe
    2.下载调试版的伴侣包,打开直播伴侣,在点击顶部的 "互动插件调试面板",弹出互动插件调试工具的弹窗
    3.APP ID 输入 "MAIN"(跟代码的OPEN 入参数对应上),随机生成一个 AppID,然后启动文件路径选择步骤一在 Visual Studio 生成的产物 ConsoleApplication1.exe 的路径。然后点击 "启动插件" 的按钮
    4.启动后可以伴侣素材区会出现一个新的素材,然后画布上会出现推送的视频,demo 运行成功!
    5.点击 "添加素材",会出现第二个互动插件的素材,对应 demo 代码中第二个 channel 对应的音视频数据
    6.点击调试面板的 "关闭插件",会触发伴侣侧的主动关闭,素材区的相关素材会被删除。注意,如果不触发伴侣侧的主动关闭,再用相同的 APP ID 去点击 "启动插件"后也不会启动对应插件的 exe 文件。

Electron 接入方案

待补充。

互动插件与直播伴侣的通信模型

音视频数据推送

音视频数据推送的流程是: 创建素材通道 -> 返回素材通道 ID -> 推送音视频数据。
    1.其中首次建立连接后,默认会创建一个素材通道,插件进程可以直接往这个素材通道发送音视频数据。也就是说假如 A 插件在整个生命周期过程中,只需要上屏一个素材,那么在管道建立后,可以直接往 素材通道 0 直接推送音视频数据,无需向直播伴侣客户端发起 “创建素材通道” 的 API。最终在伴侣上的表现是,素材区会新增一个素材,素材内容由 素材通道 0 接收到的音视频数据决定。
    2.假如 B 插件在整个生命周期过程中,需要上屏两个素材,那么在管道建立后,可以往 素材通道 0 直接推送音视频数据,完成第一个素材的画面上屏。然后向直播伴侣客户端发起 “创建素材” 的 API 调用,然后伴侣会向插件进程返回第二个素材通道的 ID (一般第二个素材的通道 ID 是 1),然后插件 B 可以往 素材通道 1 推送音视频数据,最终在伴侣上的表现是,素材区会新增两个素材,素材内容分别对应 素材通道 0 和 素材通道 1 接收到的音视频数据。
备注:一个插件最多创建 6 个素材通道,单个素材通道的视频数据分辨率不能超过 1920*1080(横屏或者竖屏)。
具体数据结构看 SDK 的方法。

请求-响应 模型

// 请求传参 { "type": "request", "reqId": "45678956", "method": "", "params": {}, // 方法传参 }
// 响应传参 { "type": "request", "reqId": "45678956", "code": 1, // 1 代表成功,非 1 代表失败 "data": {}, // 响应 "message": "" }

订阅-发布 模型

// 订阅事件 { "type": "request", "reqId": "45678956", "method": "x.subscribeEvent", "params": { "eventName": "event_name" }, }
// 取消订阅事件 { "type": "request", "reqId": "45678956", "method": "x.unsubscribeEvent", "params": { "eventName": "event_name" }, }
// 发布事件 { "type": "request", "reqId": "45678956", "method": "x.publishEvent", "params": { "eventName": "event_name", "params": {} }, }
// 接收事件 { "type": "event", "eventName": "event_name", "params": {} }

音视频数据推送说明

推送视频数据

推送音频数据

API 调用说明(请求-响应模型)

整体结构

// 通过 SDK 的 SendMessage 方法发起 // 请求传参,通过管道发送给客户端 { "type": "request", // 固定 "reqId": "45678956", // 需要生成一个 uuid,最后需要跟响应配对 "method": "", // 方法名 "params": {}, // 方法传参,每个方法对应的参数可查看下面各个方法的 "请求传参" 部分 } // 通过 SDK 的 SetCallback 接收,type 等于 PipeSDK::EVENT_MESSAGE // 响应传参,通过管道接收 { "type": "request", // 固定 "reqId": "45678956", "code": 1, // 1 代表成功,非 1 代表失败 "data": {}, // 响应 "message": "" }

创建素材

    Method 名: createMediaSources
    API 说明:插件向直播伴侣申请创建上屏的素材,直播伴侣会返回上屏素材的 ID 和 名字
    请求传参:
字段
数据类型
必填
说明
count
int
创建素材的个数
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
素材具体信息
{ "sourceIds": [{ "name": "素材名字", "id": 0, // 素材 ID }] }

删除素材

    Method 名: removeMediaSources
    API 说明:插件向直播伴侣申请删除自身上屏的素材
    请求传参:
字段
数据类型
必填
说明
sourceIds
array
需要删除的素材ids
[0, 1] // 素材 ID1", "素材 ID2"
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{}

获取所有素材

    Method 名: getCurrentMediaSources
    API 说明:插件向直播伴侣申请获取所有与当前插件相关的素材
    请求传参:
字段
数据类型
必填
说明
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{ "sourceIds": [ { "name": "调试插件", "id": 0 }, { "name": "调试插件1", "id": 1 } ] }

删除所有素材

    Method 名: removeAllMediaSources
    API 说明:插件向直播伴侣 请求删除所有与当前插件相关的素材。
    请求传参:
字段
数据类型
必填
说明
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{}

订阅事件

    Method 名: x.subscribeEvent
    API 说明:插件向直播伴侣订阅需要接收的事件
    请求传参:
字段
数据类型
必填
说明
eventName
string
需要订阅的事件名
timestamp
int
当前时间戳,毫秒级
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{}

取消订阅事件

    Method 名: x.unsubscribeEvent
    API 说明:插件向直播伴侣取消订阅事件
    请求传参:
字段
数据类型
必填
说明
eventName
string
需要取消订阅的事件名
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{}

发布事件

    Method 名: x.publishEvent
    API 说明:插件向 直播伴侣 发布事件
    请求传参:
字段
数据类型
必填
说明
eventName
string
需要发布的事件名
params
struct
由插件定义
{}
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{}

获取礼物列表

    版本要求:伴侣版本 >= 8.0.0
    Method 名: getOpenGiftPools
    API 说明:插件从 直播伴侣 获取支持配置的礼物池
    请求传参:
字段
数据类型
必填
说明
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{ "gift_pool": [ { // 礼物图标 "gift_icon": "http://p3-webcast.douyinpic.com/img/webcast/53bb24f0a76dba26f5376db40186dd22.png~tplv-obj.png", // 礼物名字 "gift_name": "仙女棒", // 礼物价值 "gift_value": 10, // 加密的礼物id "sec_gift_id": "n1/Dg1905sj1FyoBlQBvmbaDZFBNaKuKZH6zxHkv8Lg5x2cRfrKUTb8gzMs=" } ] }

查询直播间开放数据

    版本要求:伴侣版本 >= 8.0.0
    Method 名: getOpenRoomData
    API 说明:插件主动向 直播伴侣 查询直播开放数据(根据开放平台申请的能力返回)
    请求传参:
字段
数据类型
必填
说明
    返回值:
字段
数据类型
必填
说明
code
int
1 代表成功,非 1 代表失败
message
string
失败时的具体说明
data
struct
{ // 直播间总点赞数 "room_like_count": 12345 }

事件接收说明 (订阅-发布模型)

整体结构

// 通过 SDK 的 SetCallback 接收,type 等于 PipeSDK::EVENT_MESSAGE { "type": "event", "eventName": "event_name", // 事件名 "params": {} // 事件参数 }
注意,需要先订阅才能接收。

直播间开放数据推送事件

    事件名: OPEN_LIVE_DATA
    事件说明:直播伴侣向插件推送直播间互动数据(评论、礼物、点赞等)
    事件参数:
字段
数据类型
必填
说明
payload
array
由 评论、礼物 、点赞 等消息混合组成的数组。其中 评论、礼物 、点赞 各自的数据结构如下
// 整体结构如下 { "payload": [ { "msg_id": "7351263914183087148", "timestamp": 1711939193044, "msg_type": 1, "msg_type_str": "live_like", "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", "nickname": "bor432", "like_num": 1, "user_privilege_level": 1, "is_follow_anchor": true, "fansclub_level": 1 }, { "msg_id": "7352602227091444780", "timestamp": 1711939362000, "msg_type": 2, "msg_type_str": "live_comment", "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", "nickname": "bor432", "content": "主播厉害", "user_privilege_level": 1, "is_follow_anchor": true, "fansclub_level": 1 }, { "msg_id": "7352721006988055596", "timestamp": 1711939405000, "msg_type": 3, "msg_type_str": "live_gift", "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", "nickname": "bor432", "sec_gift_id": "VQCVfwVeQCJZDCr/srE99db/NA3vgkBlaxG2dPyetE8NLgDRQ5ktGcwXm8M=", "gift_num": 1, "user_privilege_level": 1, "is_follow_anchor": true, "fansclub_level": 1 } ] }
评论数据 payload
{ "msg_id": "7352602227091444780", // string类型 id "timestamp": 1711939362000, // 评论毫秒级时间戳 "msg_type": 2, // 互动数据类型,1-点赞、2-评论、3-礼物 "msg_type_str": "live_comment", // 互动数据类型,评论-live_comment、礼物-live_gift、点赞-live_like "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", // 评论用户的加密openid "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", // 评论用户头像 "nickname": "bor432", // 评论用户昵称(不加密) "content": "主播厉害", // 评论内容 "user_privilege_level": 1, // 用户荣誉等级 "is_follow_anchor": true, // 用户是否关注主播 要获取相应的权限才会有值 "fansclub_level": 1 // 粉丝团等级 }
点赞数据 payload:
{ "msg_id": "7351263914183087148", // string类型id "timestamp": 1711939193044, // 点赞毫秒级时间戳 "msg_type": 1, // 互动数据类型,1-点赞、2-评论、3-礼物 "msg_type_str": "live_like", // 互动数据类型,评论-live_comment、礼物-live_gift、点赞-live_like "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", // 点赞用户的加密 openid "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", "nickname": "bor432", // 点赞用户昵称 "like_num": 1, // 点赞数量 "user_privilege_level": 1, // 用户荣誉等级 "is_follow_anchor": true, // 用户是否关注主播 要获取相应的权限才会有值 "fansclub_level": 1 // 粉丝团等级 }
礼物数据 payload
{ "msg_id": "7352721006988055596", // string 类型 id "timestamp": 1711939405000, // 礼物毫秒级时间戳 "msg_type": 3, // 互动数据类型,1-点赞、2-评论、3-礼物 "msg_type_str": "live_gift", // 互动数据类型,评论-live_comment、礼物-live_gift、点赞-live_like "sec_open_id": "2e441624-b99f-5f05-a632-d3f7c92df768", // 用户的加密openid "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", // 用户头像 "nickname": "bor432", // 用户昵称 "sec_gift_id": "VQCVfwVeQCJZDCr/srE99db/NA3vgkBlaxG2dPyetE8NLgDRQ5ktGcwXm8M=", // 加密的礼物id "gift_num": 1, // 送出的礼物数量 "user_privilege_level": 1, // 用户荣誉等级 "is_follow_anchor": true, // 用户是否关注主播 要获取相应的权限才会有值 "fansclub_level": 1 // 粉丝团等级 }
目前仅支持以下 8 款礼物的送礼消息推送(伴侣大于等于 8.0.0 版本礼物池会增加,改从伴侣获取支持的礼物列表)。
礼物名
sec_gift_id
单价
Icon
链接
小心心
VQCVfwVeQCJZDCr/srE99db/NA3vgkBlaxG2dPyetE8NLgDRQ5ktGcwXm8M=
1
抖音音符
4R89bzhTU5UMh+fbM087VVM47+n8O6kV5mfoDZABs/qktwZSG9TOsEyX8qc=
1
人气票
ScShUKZLl04ky+mv/rvpfY/KR79abl/xF82G6WoP/lpN34gTBhWbl7Ag6jI=
1
玫瑰
pXPMpuOKRnPKYBISe95O0gISMwPdCi4L5BqnezAmRsaZnP3WLKRtsoKk0Cg=
1
大啤酒
f2STGmVCVFRZUmPKXD/dKUdO3bRJlFKnnyK19C0KoRbE/MOx+yBMqbArtlU=
2
你真好看
peF61t4DgAzDtYJohdRKi7xgW1ZTHtOsfWVAmFk5GcZ7FzshBI+qObDgOos=
2
Thuglife
RBNKbYDuBwDIIrHalV8qCPbvt2Jr3p2iVFHvKOM2fWfCZm3mY6Ut9HONRqs=
99
亲吻
v0WMOIdAoC4r17IR24HWYueiXMPlDDA/qi7G1nFl2IrGg+jah93zKLpfljg=
99
粉丝团变更消息 payload (伴侣版本 >= 8.0.0 才支持)
{ "msg_id": "7352721006988055596", // string 类型 id "timestamp": 1711939405000, // 礼物毫秒级时间戳 "msg_type": 4, // 互动数据类型,1-点赞、2-评论、3-礼物、4-粉丝团变更 "msg_type_str": "live_fansclub", // 互动数据类型,评论-live_comment、礼物-live_gift、点赞-live_like、粉丝团-live_fansclub "sec_open_id": "_000WomhJcg__iECuDtakkckSAhwX5tCHabM", // 用户的加密openid "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", // 用户头像 "nickname": "bor432", // 用户昵称 "fansclub_reason_type": 1, // 粉丝团变更原因 1-升级、2-加团、16-退团 "user_privilege_level": 1, // 用户荣誉等级 "is_follow_anchor": true, // 用户是否关注主播 要获取相应的权限才会有值 "fansclub_level": 1 // 粉丝团等级 }
关注变更消息 payload (伴侣版本 >= 8.0.0 才支持)
{ "msg_id": "7352721006988055596", // string 类型 id "timestamp": 1711939405000, // 礼物毫秒级时间戳 "msg_type": 5, // 互动数据类型,1-点赞、2-评论、3-礼物、4-粉丝团变更、5-关注变更 "msg_type_str": "live_follow", // 互动数据类型,评论-live_comment、礼物-live_gift、点赞-live_like、粉丝团-live_fansclub、关注变更-live_follow "sec_open_id": "_000WomhJcg__iECuDtakkckSAhwX5tCHabM", // 用户的加密openid "avatar_url": "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_3796_2975850990.jpeg?from=3067671334", // 用户头像 "nickname": "bor432", // 用户昵称 "user_follow_action": 1, // 用户关注变更数据 1 关注 2 取关 "user_privilege_level": 1, // 用户荣誉等级 "is_follow_anchor": true, // 用户是否关注主播 要获取相应的权限才会有值 "fansclub_level": 1 // 粉丝团等级 }

素材删除事件

    事件名: OPEN_MEDIA_SOURCE_DELETED
    事件说明:当前插件相关的素材被删除时触发
    事件参数:
字段
数据类型
必填
说明
id
number
被删除素材的 id

控制面板弹出事件

    事件名: OPEN_WIN_FOCUS
    事件说明:主播在直播伴侣点击插件入口,预期插件控制面板窗口能置顶
    事件参数:
字段
数据类型
必填
说明

退出插件事件

    事件名: OPEN_WIN_CLOSE
    事件说明:主播在直播伴侣关闭插件,预期插件退出所有进程
    事件参数:
字段
数据类型
必填
说明

FAQ

请问个点赞数据的问题:a. 这个是用户手动点赞时触发,逻辑是什么,比如是多少秒合并给出某个观众这段时间的点赞数量?是否会过滤某些点赞数据 ?b 直播间的总点赞能否将单个点赞直接累加,这样计算的结果会不会偏差比较大?。
回答:a. 单用户 2 秒内聚合一次推送 ,一般不会进行过滤。有几种场景会触发过滤:1. 用户已到达点赞上限 2. 用户账号异常。 b. 平台已经针对单个用户的点赞做了幂等设计,保证一条点赞数据,至少且最多发送一条。