針對與儲存工作階段連線的問題進行故障診斷 - Kinesis Video Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

針對與儲存工作階段連線的問題進行故障診斷

本節提供有關設定和設定錄製影片串流儲存體相關問題的疑難排解指引。

控制和控制對等

在 WebRTC 中,控制對等會透過傳送 SDP 優惠來啟動與控制對等的連線。對於peer-to-peer工作階段,檢視器參與者會透過訊號傳送優惠給主要參與者,以啟動連線。連線至 WebRTC 擷取的儲存工作階段時,儲存工作階段是控制對等。對於主要參與者,他們仍然是受控參與者。不過,瀏覽者參與者會從控制切換到控制。

呼叫 JoinStorageSessionJoinStorageSessionAsViewer 時,所有參與者都必須以 SDP 答案回應,並使用儲存工作階段交換 ICE 候選者。

如需序列圖,請參閱了解 WebRTC 擷取和儲存。

重要

從儲存工作階段接收的訊號訊息在 JSON 中沒有 senderClientId 欄位,這與peer-to-peer主控端不同,該主控端一律會接收具有 SDP 優惠和 ICE 候選項目的 senderClientId 欄位。

檢閱支援的轉碼器

傳送 SDP 答案並將 ICE 候選項目與儲存工作階段交換時,我們建議在訊息correlationId中包含 。在訊息correlationId中包含 可讓儲存工作階段傳回statusResponse訊息。這些訊息將包含輸入訊息correlationId的 ,可讓您追蹤 statusResponse所屬的訊息。這可讓您立即收到拒絕 SDP 答案原因的意見回饋。

如需 correlationIdstatusResponse 的更多相關資訊,請參閱非同步訊息接收

儲存工作階段可能會拒絕 SDP 答案的常見原因是儲存工作階段無法接受答案中指定的轉碼器。範例statusResponse可能如下所示:

{ "correlationId": "1700186220273", "errorType": "InvalidArgumentException", "statusCode": "400", "success": false }

當您檢閱 SDP 答案內容時,請檢閱開頭為 的行,a=rtpmap並確認轉碼器符合儲存工作階段支援的轉碼器。以下是包含 opus 音訊和 VP8 影片的範例 SDP 答案程式碼片段。

... a=rtpmap:111 opus/48000/2 ... a=rtpmap:120 VP8/90000 ...

如需支援的轉碼器清單,請參閱 JoinStorageSession

如果頻道未映射至串流, 也會擲回 400 InvalidArgumentException

檢閱收發器方向

在 SDP 答案中,檢閱視訊和音訊收發器的方向性。SDP 中的行如下所示:

a=sendrecv a=recvonly

對於主要參與者,有下列要求:

  • H.264 影片:僅傳送

  • Opus 音訊:sendonly 或 sendrecv

對於瀏覽者參與者,有下列要求:

  • H.264 影片:recvonly

  • Opus 音訊:recvonly 或 sendrecv

如果不符合服務需求,則在傳送答案時提供 correlationId 時,將會傳回具有 400 IllegalArgumentException 的 statusResponse。

使用 KVS 提供的 WebRTC 擷取範例應用程式時:

  • 主要參與者:確保已啟用「傳送視訊」和「傳送音訊」設定

  • 觀眾參與者:確保已停用「傳送影片」設定

檢閱 ICE 候選轉換

從 KVS Signaling SDK 接收 ICE 候選項目時,應用程式可能需要將字串轉換為 ICE 候選物件。

從儲存工作階段收到的 ICE 候選項目不包含 SDPMID 屬性,也不隨附 senderClientId。

檢閱您的應用程式邏輯,以將從遠端接收的 ICE 候選項目新增至應用程式的 RTCPeerConnection 物件。

檢閱 ICE 候選佇列邏輯

從儲存工作階段收到的所有 ICE 候選項目都需要透過 addIceCandidate API 新增至 RTCPeerConnection。

即使儲存工作階段在 ICE 候選者之前傳送 SDP 優惠,由於訊號訊息傳遞的非同步性質,應用程式可能會在收到優惠之前收到 ICE 候選者。

在這種情況下,您將需要實作暫時緩衝區來保留 ICE 候選項目。

KVS 範例應用程式中實作的邏輯如下:

  1. 這些範例會維護 senderClientId 至其 RTCPeerConnection 的映射。

  2. 這些範例會將 senderClientId 的另一個映射維護到待定的 Ice Candidates 清單。

  3. 收到 ICE 候選項目時,請檢查 PeerConnection 映射。如果 PeerConnection 映射還沒有連線,請將其新增至待定清單。否則,請將 ICE 候選項目新增至 PeerConnection。

  4. 收到優惠時,它會建立 RTCPeerConnection 並將其新增至 PeerConnection 映射。然後,從待定佇列將所有 ICE 候選項目新增至此 PeerConnection。