通过阅读本文,您可以了解Native RTS SDK消息回调函数详情及其示例。

函数说明

int (* event_callback)(
    void *opaque,
    int type,
    void *data,
    long long data_size
);          

参数说明

参数 类型 描述
opaque void * 通过preconfig("MessageCbParam")设置的值,RTS SDK将原值回传给event_callback
type int 消息ID,详情请参见下表。
data void * 消息内容,格式为when=<time_in_ms>,where=<place>,who=<id>,desc=<extra text>。该参数为临时变量,出回调函数会释放。
data_size long long 消息内容长度,单位:字节。
消息ID 支持的最低版本 说明
100 无限制 Help Support ID消息,发生在open函数中的connect之前。
102 无限制 Help Support ID消息,发生在connect操作中。
103 无限制 Help Support ID消息,发生在推流操作中。
104 无限制 Help Support ID消息,发生在拉流操作中。
105 无限制 每4秒统计一次数据消息。
说明 当消息ID是105(统计数据消息)时,desc的内容格式为\"key1:val1,key2:val2,...\"
121 2.2.0 停止拉流。
20000 ~ 30000 无限制 错误码。
20001 无限制 DNS出错,无法解析域名。
20002 无限制 域名访问权限验证失败。
20003 2.2.0 订阅URL协议头不为artc。
20004 2.2.0 推流URL的协议头不为artc。
20005 2.2.0 RTS SDK内存分配失败。
20009 无限制 成功连接到流媒体服务器。
20010 无限制 连接流媒体服务器失败。
20011 2.2.0 建连信令超时。
20012 2.2.0 订阅信令超时。
20013 无限制 订阅流不存在。
20014 无限制 订阅流没有音频。
20015 无限制 订阅流没有视频。
20016 2.2.0 订阅信令成功后,|x|秒没有收到音频RTP包,|x|默认10,可通过preconfig("SigTimeoutMs", "10000")配置。
20017 2.2.0 订阅信令成功后,|x|秒没有收到视频RTP包,|x|默认10,可通过preconfig("SigTimeoutMs", "10000")配置。
20020 无限制 其他未知订阅错误。
20050 无限制 丢包率高,拥塞严重。
20051 无限制 丢包率降到正常水平,拥塞恢复。
20052 无限制 流中断,没有任何音频或者视频包。
20053 无限制 流中断恢复。
20054 无限制 流结束。
20055 无限制 连接丢失。
20056 无限制 检测到流重新推送。
20057 无限制 无法播放,需要降级到RTMP。

示例说明

消息回调函数通过preconfig设置给Native RTS SDK,示例如下所示:

static int on_message(void *s,
                      int type,
                      void *data,
                      long long data_size)
{
    (void) s;

    //TODO: process message, do not take too long
    switch(type) {
    case 105:
        printf("Profiling message %s.\n", (const char *)data);
        break;
    default:
        break;
    }
    return 0;
}

__rts_funcs->preconfig("MessageCallback", addr_to_string(on_message, buf));
__rts_funcs->preconfig("MessageCbParam", addr_to_string(s, buf));         

关于消息回调函数更多信息,请参见Native RTS SDK中的rtsdec.c文件。