全部產品
Search
文件中心

ApsaraVideo Live:如何擷取RTS TraceID

更新時間:Jul 31, 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);
        }
      }
    })