GetDASHStreamingSessionURL - Amazon Kinesis Video Streams

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

GetDASHStreamingSessionURL

透過 HTTP (破折號) URL 擷取串流的 MPEG 動態自適應串流。然後,您可以在媒體播放器中打開 URL 以查看流內容。

StreamNameStreamARN參數都是可選的,但您必須在調用此 API 操作StreamARN時指定StreamName或。

亞 Amazon Kinesis 影片串流對透過 MPEG-DASH 提供資料有以下要求:

下列程序說明如何搭配 Kinesis Video Streams 使用 MPEG-DASH:

  1. 呼叫 GetDataEndpoint API 以取得端點。然後使用 --end 點 url 參數將GetDASHStreamingSessionURL請求發送到此端點。

  2. 使用擷取 MPEG 破折號網址。GetDASHStreamingSessionURLKinesis Video Streams 會建立 MPEG-DASH 串流工作階段,以便使用 MPEG-DASH 通訊協定存取串流中的內容。 GetDASHStreamingSessionURL傳回工作階段 MPEG-DASH 資訊清單 (使用 MPEG DASH 串流所需的根資源) 的驗證 URL (包含加密的工作階段權杖)。

    注意

    不要在未經授權的實體可以訪問它的地方共享或存儲此令牌。令牌提供對流內容的訪問。使用與 AWS 憑據一起使用的相同措施保護令牌。

    通過清單提供的媒體僅由請求的流,時間範圍和格式組成。沒有其他媒體資料 (例如要求視窗外的框架或替代位元率) 可用。

  3. 將 MPEG-DASH 資訊清單的 URL(包含加密的工作階段權杖)提供給支援 MPEG-DASH 通訊協定的媒體播放器。Kinesis Video Streams 可透過資訊清單 URL 使用初始化片段和媒體片段。初始化片段包含流的編解碼器私有數據,以及設置視頻或音頻解碼器和渲染器所需的其他數據。媒體片段包含編碼的視頻幀或編碼的音頻樣本。

  4. 媒體播放器接收經過身份驗證的 URL,並正常請求流元數據和媒體數據。當媒體播放器請求數據時,它會調用以下操作:

    • 獲取 DashManifest:檢索 MPEG 破折號清單,其中包含要播放的媒體的元數據。

    • 獲取 MP4InitFragment:檢索 MP4 初始化片段。媒體播放器通常會在載入任何媒體片段之前載入初始化片段。此片段包含「fytpmoov」和「MP4 原子,以及初始化媒體播放器解碼器所需的子原子。

      初始化片段不對應於 Kinesis 視訊串流中的片段。它僅包含流和相應軌道的編解碼器私有數據,媒體播放器需要解碼媒體幀。

    • 獲取 MP4MediaFragment:檢索 MP4 媒體片段。這些片段包含「moofmdat」和「MP4 原子及其子原子,其中包含編碼片段的媒體框架及其時間戳記。

      重要

      每個片段中包含的編解碼器私有資料 (CPD) 都包含特定於編解碼器的初始化資訊,例如影格速率、解析度和編碼設定檔,這些資訊對於正確解碼片段是必要的。串流工作階段期間不支援 CPD 變更。CPD 必須通過查詢的媒體保持一致。

      重要

      不支援追蹤變更。在整個查詢的媒體中,曲目必須保持一致。如果串流中的片段從僅具有視訊變更為同時具有音訊和視訊,或是 AAC 音軌變更為 A-Law 音軌,串流就會失敗。

      使用此動作擷取的資料可計費。詳情請參閱定價

注意

如需適用於 MPEG-DASH 工作階段的限制,請參閱 Kinesis Video Streams 限制。

您可以透過監控 GetMP4MediaFragment.OutgoingBytes Amazon CloudWatch 指標來監控媒體播放器使用的資料量。如需使用 CloudWatch 監視 Kinesis Video Streams 的相關資訊,請參閱監控 Kinesis Video Streams。如需定價資訊,請參閱 Amazon Kinesis Video Streams 定價和定AWS。HLS 工作階段和傳出 AWS 資料均需支付費用。

如需有關 HLS 的詳細資訊,請參閱 Apple 開發人員網站上的 HTTP 即時串流

重要

如果在叫用 Kinesis 影片串流封存媒體 API 之後擲回錯誤,除了 HTTP 狀態碼和回應本文之外,它還包含下列資訊:

  • x-amz-ErrorTypeHTTP 標頭 — 除了 HTTP 狀態碼提供的內容之外,還包含更具體的錯誤類型。

  • x-amz-RequestIdHTTP 標頭-如果您想向支持團隊報告問題,可以更好地診斷問題,如果給出請求 ID。 AWS

HTTP 狀態碼和 ErrorType 標頭都可用於對錯誤是否可重試以及在什麼情況下進行程式設計決定,以及提供用戶端程式設計人員可能需要採取哪些動作才能成功再試一次的資訊。

如需詳細資訊,請參閱本主題底部的「錯誤」一節,以及常見錯誤

請求語法

POST /getDASHStreamingSessionURL HTTP/1.1 Content-type: application/json { "DASHFragmentSelector": { "FragmentSelectorType": "string", "TimestampRange": { "EndTimestamp": number, "StartTimestamp": number } }, "DisplayFragmentNumber": "string", "DisplayFragmentTimestamp": "string", "Expires": number, "MaxManifestFragmentResults": number, "PlaybackMode": "string", "StreamARN": "string", "StreamName": "string" }

URI 請求參數

請求不會使用任何 URI 參數。

請求主體

請求接受採用 JSON 格式的下列資料。

DASHFragmentSelector

請求片段的時間範圍和時間戳記的來源。

如果是或,則PlaybackMode需要此參ON_DEMANDLIVE_REPLAY。如果是,則此參數 PlaybackMode 是可選的LIVE。如果PlaybackModeLIVE,則FragmentSelectorType可以設定,但不TimestampRange應設定。如果PlaybackModeON_DEMANDLIVE_REPLAY,則TimestampRange必須同時設定FragmentSelectorType和。

類型:DASHFragmentSelector 物件

必要:否

DisplayFragmentNumber

片段根據會話中的序列號在清單文件中標識。如果設定 DisplayFragmentNumber 為ALWAYS,則會將 Kinesis Video Streams 片段編號新增至資訊清單檔案中的每個 S 元素,其屬性名稱為「kv: fn」。這些片段編號可用於記錄或與其他 API(例如GetMediaGetMediaForFragmentList)一起使用。利用這些自定義屬性需要自定義 MPEG-DASH 媒體播放器。

預設值為 NEVER

類型:字串

有效值:ALWAYS | NEVER

必要:否

DisplayFragmentTimestamp

根據 MPEG-DASH 規範,清單文件中片段的掛鐘時間可以使用清單本身中的屬性來導出。但是,通常,MPEG-DASH 兼容的媒體播放器無法正確處理媒體時間軸中的間隙。Kinesis Video Streams 會調整資訊清單檔案中的媒體時間表,以啟用不連續性的媒體播放。因此,從資訊清單檔案衍生的掛鐘時間可能不正確。如果設定 DisplayFragmentTimestamp 為ALWAYS,則會將精確的片段時間戳記新增至資訊清單檔案中的每個 S 元素,其屬性名稱為「kv: ts」。利用此自定義屬性需要自定義 MPEG-DASH 媒體播放器。

預設值為 NEVER。如果DASHFragmentSelectorSERVER_TIMESTAMP,時間戳記將是伺服器啟動時間戳記。同樣,如果DASHFragmentSelectorPRODUCER_TIMESTAMP,時間戳記將是生產者開始時間戳記。

類型:字串

有效值:ALWAYS | NEVER

必要:否

Expires

要求的工作階段到期前的時間 (以秒為單位)。此值可以介於 300(5 分鐘)到 43200(12 小時)之間。

當工作階段到期時,無法對該工作階段GetMP4MediaFragment進行新呼叫GetMP4InitFragment、或。GetDashManifest

預設值為 300 (5 分鐘)。

類型:整數

有效範圍:最小值 300。最大值為 43200。

必要:否

MaxManifestFragmentResults

MPEG-DASH 資訊清單中傳回的片段數目上限。

如果PlaybackModeLIVE,則最新的片段會返回到此值。如果PlaybackModeON_DEMAND,則返回最舊的片段,直到此最大數量。

當即時 MPEG-DASH 資訊清單中可用的片段數目較多時,視訊播放程式通常會在開始播放之前緩衝內容。增加緩衝區大小會增加播放延遲,但會降低播放期間發生重新緩衝的可能性。我們建議實時 MPEG-DASH 清單至少具有 3 個片段和最多 10 個片段。

如果是LIVELIVE_REPLAY,則預設值為 5 個片段,如果PlaybackMode是,則預設值PlaybackMode為 1,000 ON_DEMAND

1,000 個片段的最大值對應於具有 1 秒片段的流上的視頻超過 16 分鐘,以及具有 10 秒片段的流上的視頻超過 2 1/2 小時。

類型:Long

有效範圍:最小值為 1。最大值為 5000。

必要:否

PlaybackMode

是否要擷取即時、即時重播或封存的隨選資料。

三種工作階段類型的功能包括:

  • LIVE:對於此類型的工作階段,MPEG-DASH 資訊清單會在最新片段可用時持續更新。我們建議媒體播放程式以一秒鐘的時間間隔擷取新的資訊清單。在媒體播放程式中播放這種類型的工作階段時,使用者介面通常會顯示「即時」通知,而且沒有用於選擇播放視窗中要顯示的位置的定位器控制項。

    注意

    LIVE模式下,最新的可用片段包含在 MPEG-DASH 資訊清單中,即使片段之間存在間隙 (也就是說,如果片段遺失)。這樣的間隙可能會導致媒體播放器停止或導致播放跳躍。在這種模式下,如果片段比播放列表中的最新片段舊,則片段不會添加到 MPEG-DASH 清單中。如果在將後續片段新增至資訊清單後,遺失的片段變為可用,則不會新增較舊的片段,且不會填滿間隙。

  • LIVE_REPLAY:對於此類型的工作階段,MPEG-DASH 資訊清單的更新方式與LIVE模式的更新方式類似,不同之處在於它會從指定開始時間包含片段開始。而不是在攝入片段時添加片段,而是在下一個片段的持續時間過去時添加片段。例如,如果會話中的片段長度為兩秒鐘,則每兩秒鐘將一個新的片段添加到清單中。此模式對於能夠在偵測到事件時開始播放,並繼續在工作階段建立時尚未擷取的即時串流媒體非常有用。此模式對於串流先前封存的媒體也很有用,而不受ON_DEMAND模式中 1,000 片段限制的限制。

  • ON_DEMAND:對於此類型的工作階段,MPEG-DASH 資訊清單會包含工作階段的所有片段,直到中指定的數目為止。MaxManifestFragmentResults每個工作階段只能擷取一次資訊清單。在媒體播放程式中播放此類工作階段時,使用者介面通常會顯示定位器控制項,以便在播放視窗中選擇要顯示的位置。

在所有播放模式中,如果FragmentSelectorTypePRODUCER_TIMESTAMP,如果有多個片段具有相同的開始時間戳記,則 MPEG-DASH 清單中包含具有較大片段編號的片段(即較新的片段)。其他片段不包括在內。MPEG-DASH 清單中仍包含具有不同時間戳但持續時間重疊的片段。這可能會導致媒體播放器中出現意外行為。

預設值為 LIVE

類型:字串

有效值:LIVE | LIVE_REPLAY | ON_DEMAND

必要:否

StreamARN

要擷取 MPEG DASH 資訊清單 URL 的資料流的 Amazon 資源名稱 (ARN)。

您必須指定StreamNameStreamARN

類型:字串

長度限制:長度下限為 1。長度上限為 1024。

模式:arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

必要:否

StreamName

要擷取 MPEG DASH 資訊清單 URL 之資料流的名稱。

您必須指定StreamNameStreamARN

類型:字串

長度限制:長度下限為 1。長度上限為 256。

模式:[a-zA-Z0-9_.-]+

必要:否

回應語法

HTTP/1.1 200 Content-type: application/json { "DASHStreamingSessionURL": "string" }

回應元素

如果動作成功,則服務傳回 HTTP 200 回應。

服務會傳回下列 JSON 格式的資料。

DASHStreamingSessionURL

媒體播放程式可用來擷取 MPEG-DASH 資訊清單的 URL (包含工作階段權杖)。

類型:字串

錯誤

如需所有動作常見錯誤的資訊,請參閱常見錯誤

ClientLimitExceededException

Kinesis Video Streams 已限制要求,因為您已超過限制。稍後再嘗試撥打電話。如需有關限制的資訊,請參閱 Kinesis Video Streams 限制

HTTP 狀態碼:400

InvalidArgumentException

指定的參數超出其限制、不受支援或無法使用。

HTTP 狀態碼:400

InvalidCodecPrivateDataException

視訊串流中至少一個軌道中的編解碼器私人資料對此作業無效。

HTTP 狀態碼:400

MissingCodecPrivateDataException

在視訊串流的至少一個軌道中找不到轉碼器私人資料。

HTTP 狀態碼:400

NoDataRetentionException

GetImages要求不保留資料的串流 (也就是說,a DataRetentionInHours 為 0)。

HTTP 狀態碼:400

NotAuthorizedException

狀態碼:403,調用者未授權在給定流上執行操作,或令牌已過期。

狀態碼:4

ResourceNotFoundException

GetImages當 Kinesis 影片串流找不到您指定的串流時,就會擲回此錯誤。

GetHLSStreamingSessionURL如果在請求的時間範圍內沒有片段PlaybackMode的流請求具有 ON_DEMAND or LIVE_REPLAY 的會話,或者如果在過去 30 秒內沒有片段PlaybackModeLIVE流請求具有 a 的會話,則GetDASHStreamingSessionURL拋出此錯誤。

HTTP 狀態碼:404

UnsupportedStreamMediaTypeException

媒體類型 (例如 h.264 或 h.265 視訊或 AAC 或 G.711 音訊) 無法根據播放工作階段的第一個片段中曲目的編解碼器 ID 來決定。音軌 1 的轉碼器 ID 應該是V_MPEG/ISO/AVC音軌 2 的編解碼器識別碼 (選擇性) A_AAC

HTTP 狀態碼:400

另請參閱

如需在其中一個特定語言 AWS SDK 中使用此 API 的詳細資訊,請參閱下列內容: