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資訊。
生產環境擷取RTS TraceID
生產環境是指已經將SDK整合到客戶的程式中,可以不再使用阿里雲的Demo。
移動端(Android/iOS)生產環境
客戶僅整合RTS NET SDK
註冊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));
在訊息回呼函數中解析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
註冊回調。
Android:註冊IPlayer的setOnInfoListener。
iOS:註冊AVPDelegate的-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description。
在訊息回呼函數中解析字串。
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
。進入RTS Web播放器。
在RTS Web播放器頁面輸入已開通超低延時直播的播流地址URL,例如
artc://player.alicdn.com/a/b_RTS
。單擊開始拉流,播放RTS直播流。
按F12開啟瀏覽器開發人員工具,選擇Network頁簽。
搜尋信令請求
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); } } })