全部产品
Search
文档中心

视频直播:如何获取RTS TraceID

更新时间:Mar 07, 2024

RTS TraceID是全局唯一请求标识符,用于对请求进行定位和问题排查,对提高客户的接入效率有至关重要的作用。本文详细为您介绍获取RTS TraceID的方式。

背景信息

在播放出现问题需要做问题定位时,使用用户IP地址、播放时间等信息来做问题定位是低效的,因为需要从海量的日志中捞取出现问题的日志。当同一个用户IP在同段时间内有多次播放行为时,运维难度将进一步增加。超低延时直播RTS为您提供TraceID方案,TraceID是每次播放行为的全局唯一标识符,基于该标识阿里云能够快速定位到问题。阿里云强烈建议将TraceID和您的客户端日志进行连接。

您可以通过以下方式获取RTS TraceID:

Demo播放获取RTS TraceID

移动端(Android/iOS)Demo播放

移动端Demo播放的具体操作请参考Demo体验教程。如下图所示,播放请求建联成功后,在RTS移动端播放器页面单击问题定位,查看弹窗中的详细信息,其中RequestId即为TraceID。

移动端

Web端(H5)Demo播放

移动端Demo播放的具体操作请参考Demo体验教程。如下图所示,播放请求建联成功后,在RTS Web端播放器页面单击问题定位,查看弹窗中的TraceID信息。

web端

生产环境获取RTS TraceID

生产环境是指已经将SDK集成到客户的程序中,可以不再使用阿里云的Demo。

移动端(Android/iOS)生产环境

  • 客户仅集成RTS NET SDK

    1. 注册MessageCallback消息回调函数,示例请参见rtsdec.c文件。

      // 详见rtsdec.c rtc_read_header函数
      __rts_funcs->preconfig("MessageCallback", addr_to_string(format_control_message, buf));
      __rts_funcs->preconfig("MessageCbParam", addr_to_string(s, buf));
    2. 在消息回调函数中解析data参数,监听code为104的事件,获取helpid和TraceID。

      例如,在下面的示例代码中,TraceID为live6.cn1026_3166_317379681_164568568****

      "code=104,when=1645685687551,where=na,who=0,desc=\"trace:d2acbcdc%252D6bc0%252D4353%252D9070%252De37d73e34761-pull%2Ertspk%2Egrtn%2Ealiyunlive%2Ecom-ios-20220224065447-F4h9naPqJ6GDzwPV-sub-live6.cn1026_3166_317379681_164568568****\""
  • 客户通过阿里云播放器集成RTS

    1. 注册回调。

      • Android:注册IPlayer的setOnInfoListener。

      • iOS:注册AVPDelegate的-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description。

    2. 在消息回调函数中解析字符串。

      • Android:满足infoBean.getCode() == InfoCode.DirectComponentMSG后,解析infoBean.getExtraMsg(),监听code为104的事件,获取helpid和TraceID。

      • iOS:满足eventWithString == EVENT_PLAYER_DIRECT_COMPONENT_MSG后,解析description,监听code为104的事件,获取helpid和TraceID。

        例如,在下面的示例代码中,TraceID为live6.cn1026_3166_317379681_164568568****

        {"class":"demuxer","obj":"10804120096","name":"ArtcDemuxer","level":16,"content":"code=104,when=1645685687551,where=na,who=0,desc=\"trace:d2acbcdc%252D6bc0%252D4353%252D9070%252De37d73e34761-pull%2Ertspk%2Egrtn%2Ealiyunlive%2Ecom-ios-20220224065447-F4h9naPqJ6GDzwPV-sub-live6.cn1026_3166_317379681_164568568****\""}

Web端(H5)生产环境

  • 从信令请求响应结果中获取TraceID

    H5的信令请求是一个HTTP POST请求,您可以从浏览器开发者工具的Network获取TraceID。如果拉流地址为artc://player.alicdn.com/a/b_RTS,对应的信令请求就是http(s)://player.alicdn.com/a/b_RTS

    1. 进入RTS Web播放器

    2. 在RTS Web播放器页面输入已开通超低延时直播的播流地址URL,例如artc://player.alicdn.com/a/b_RTS

    3. 单击开始拉流,播放RTS直播流。

    4. F12打开浏览器开发者工具,选择Network页签。

    5. 搜索信令请求http(s)://player.alicdn.com/a/b_RTS,在Response中查看TraceID。

  • 阿里云Web播放器SDK

    阿里云Web播放器SDK可以通过订阅rtsTraceId事件,获取到RTS TraceID。示例代码:

    //当RTS拉流成功时触发,回调函数的参数中traceId为拉流的TraceId,source为当前RTS流的播放地址。
    player.on('rtsTraceId', function(event) {
        console.log('EVENT rtsTraceId', event.paramData);
    })
  • 客户自研播放器,仅集成RTS SDK

    RTS SDK可以通过注册customReporter函数获取所有消息,当msgid为126即订阅成功时,可以获取TraceID。示例代码:

    AliRTS.createClient({
      customReporter: (params) => {
        const msgIds = [126/* 订阅成功 */, 220/* 推流成功 */];
        if (msgIds.includes(Number(params.msgid))) {
          const args = JSON.parse(params.args);
          const traceId = args.tcid;
          console.log('traceId', traceId);
        }
      }
    })