本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
GetHLSStreamingSessionURL
擷取串流的HTTP即時串流 (HLS) URL。然後,您可以URL在瀏覽器或媒體播放器中打開以查看流內容。
StreamName
和StreamARN
參數都是選擇性的,但您必須在呼叫此API作業StreamARN
時指定StreamName
或。
Amazon Kinesis 影片串流必須符合下列要求,才能透過HLS以下方式提供資料:
-
資料保留必須大於 0。
-
每個片段的視訊軌道必須包含 H.264 格式的「進階視訊編碼」(AVC) 或 HEVC H.265 格式 (MPEG-4 規格ISO/IEC14
496-15) 的編解碼器私人資料。如需將串流資料調整為指定格式的相關資訊,請參閱NAL調整旗標。 -
每個片段的音軌(如果存在)必須包含AAC格式(AAC規格ISO/IEC13818-
7)的編解碼器私有數據。
Kinesis Video Streams HLS 工作階段包含分散 MPEG -4 形式 (也稱為 f MP4 或CMAF) 或 MPEG -2 形式 (也稱為 TS 區塊,HLS規格也支援) 的片段。如需有關HLS片段類型的詳細資訊,請參閱HLS規格
下列程序說明如何HLS搭配 Kinesis Video Streams 使用:
-
呼叫
GetDataEndpoint
API以取得端點。然後使用 --end 點 url 參數將GetHLSStreamingSessionURL
請求發送到此端點。 -
檢索HLSURL使用
GetHLSStreamingSessionURL
. Kinesis 視訊串流會建立串HLS流工作階段,用於使用HLS通訊協定存取串流中的內容。GetHLSStreamingSessionURL
傳回工作階段HLS主播放清單 URL (串流所需的根資源) 的已驗證 (包含加密工作階段權杖HLS)。注意
不要在未經授權的實體可以訪問它的地方共享或存儲此令牌。令牌提供對流內容的訪問。使用與 AWS 憑據一起使用的相同措施保護令牌。
透過播放清單提供的媒體僅包含要求的串流、時間範圍和格式。沒有其他媒體資料 (例如要求視窗外的框架或替代位元率) 可用。
-
將HLS主播放清單的 URL (包含加密工作階段權杖) 提供給支援HLS通訊協定的媒體播放器。Kinesis Video Streams 可讓HLS媒體播放清單、初始化片段和媒體片段透過主播放清單URL取得。初始化片段包含流的編解碼器私有數據,以及設置視頻或音頻解碼器和渲染器所需的其他數據。媒體片段包含 H.264 編碼的視訊影格或AAC經過編碼的音訊樣本。
-
媒體播放器接收經過身份驗證,URL並正常請求流元數據和媒體數據。當媒體播放器請求數據時,它會調用以下操作:
-
G etHLSMaster 播放列表:檢索HLS主播放列表,其中包含每個軌道的
GetHLSMediaPlaylist
動作,以及媒體播放器的其他元數據,包括估計的比特率和分辨率。URL -
G etHLSMedia 播放列表:檢索HLS媒體播放列表,其中包含用於通過操
GetMP4InitFragment
作訪問MP4初始化片段URLs以及使用GetMP4MediaFragment
操作訪問MP4媒體片段。URLHLS媒體播放清單也包含播放器需要播放的串流的中繼資料,例如PlaybackMode
是LIVE
或ON_DEMAND
。HLS媒體播放清單通常是靜態的工作階段與ON_DEMAND
.PlaybackType
HLS媒體播放清單會持續更新為使用的工作階段PlaybackType
的新片段LIVE
。視頻軌道和音軌(如果適用)有一個不同的HLS媒體播放列表,其中包含特定曲目的MP4媒體URLs。 -
獲取MP4InitFragment:檢索MP4初始化片段。媒體播放器通常會在載入任何媒體片段之前載入初始化片段。此片段包含 "
fytp
" 和moov
"MP4原子,以及初始化媒體播放器解碼器所需的子原子。初始化片段不對應於 Kinesis 視訊串流中的片段。它僅包含流和相應軌道的編解碼器私有數據,媒體播放器需要解碼媒體幀。
-
取得MP4MediaFragment:擷取MP4媒體片段。這些片段包含「
moof
」和「mdat
」MP4 原子及其子原子,其中包含編碼片段的媒體框架及其時間戳記。注意
每個片段中包含的轉碼器 private data (CPD) 都包含編解碼器特定的初始化資訊,例如影格速率、解析度和編碼設定檔,這些資訊對於正確解碼片段是必要的。對於 TS 和MP4,在串流工作階段期間都支援CPD變更。因此,會話中的片段可以在不中斷播放的CPD情況下具有不同的信息。對於每個串流工作階段,只允許 500 個CPD變更。
重要
不支援追蹤變更。在整個查詢的媒體中,曲目必須保持一致。如果串流中的片段從僅具有視訊變更為同時具有音訊和視訊,或是音軌變更為 A-Law AAC 音軌,串流就會失敗。
使用此動作擷取的資料可計費。如需相關資訊,請參閱 定價
。 -
GetTSFragment:擷取包含串流中所有軌道的初始化和媒體資料的 MPEG TS 片段。
注意
如果
ContainerFormat
是MPEG_TS
,則使用此API代替GetMP4InitFragment
和GetMP4MediaFragment
檢索流媒體。使用此動作擷取的資料可計費。如需詳細資訊,請參閱 Kinesis Video Streams 定價
。
-
串流會話不URL得在玩家之間共享。如果多個媒體播放器共用工作階段,服務可能會限制工作階段。如需連線限制,請參閱 Kinesis Video Streams 配額。
您可以透過監控 GetMP4MediaFragment.OutgoingBytes
Amazon CloudWatch 指標來監控媒體播放器使用的資料量。如需使用 CloudWatch 監視 Kinesis Video Streams 的相關資訊,請參閱監控 Kinesis Video Streams。如需定價資訊,請參閱 Amazon Kinesis Video Streams 定價和定AWS
請參閱文件指南中的影片播放範例:使用擷 AWS CLI 取HLS串流工作階段 URL和範例:HLS在HTML和中使用 JavaScript。
如需詳細資訊HLS,請參閱 Apple 開發人員網站
重要
如果在叫用 Kinesis Video Streams 封存媒體之後擲回錯誤API,除了HTTP狀態碼和回應本文之外,它還包含下列資訊:
-
x-amz-ErrorType
HTTPheader — 除了HTTP狀態碼提供的內容之外,還包含更具體的錯誤類型。 -
x-amz-RequestId
HTTP標題 — 如果您想向其報告問題 AWS,則支持團隊可以更好地診斷問題,如果提供請求 ID。
HTTP狀態碼和 ErrorType 標頭都可以用來做出關於錯誤是否可重試以及在什麼情況下是否可重試的程式設計決定,以及提供有關用戶端程式設計人員可能需要採取哪些動作才能成功再試一次的資訊。
如需詳細資訊,請參閱本主題底部的「錯誤」一節以及常見錯誤。
請求語法
POST /getHLSStreamingSessionURL HTTP/1.1
Content-type: application/json
{
"ContainerFormat": "string
",
"DiscontinuityMode": "string
",
"DisplayFragmentTimestamp": "string
",
"Expires": number
,
"HLSFragmentSelector": {
"FragmentSelectorType": "string
",
"TimestampRange": {
"EndTimestamp": number
,
"StartTimestamp": number
}
},
"MaxMediaPlaylistFragmentResults": number
,
"PlaybackMode": "string
",
"StreamARN": "string
",
"StreamName": "string
"
}
URI請求參數
請求不使用任何URI參數。
請求主體
請求接受以下JSON格式的數據。
- ContainerFormat
-
指定應該用於封裝媒體的格式。指定
FRAGMENTED_MP4
容器格式會將媒體封裝成MP4片段 (f MP4 或CMAF)。這是建議使用的包裝,因為包裝開銷最小。另一個容器格式選項是MPEG_TS
。HLS自發布以來一直支持 MPEG TS 塊,有時是舊版HLS播放器唯一支持的包裝。MPEGTS 通常有 5-25% 的封裝開銷。這意味著 MPEG TS 通常需要比 f MP4 多 5-25% 的帶寬和成本。預設值為
FRAGMENTED_MP4
。類型:字串
有效值:
FRAGMENTED_MP4 | MPEG_TS
必要:否
- DiscontinuityMode
-
指定何時標記片段之間不連續性的旗標新增至媒體播放清單。
媒體播放器通常會根據每個片段的時間戳記,建立要播放的媒體內容時間軸。這意味著,如果片段之間存在任何重疊或間隙(通常情況下,如果設置HLSFragmentSelector為
SERVER_TIMESTAMP
),媒體播放器時間軸在某些地方的片段之間也會有很小的間隙,並且會覆蓋其他地方的幀。媒體播放器時間軸中的間隙可能會導致播放停止,重疊可能會導致播放不安。當片段之間存在不連續標誌時,媒體播放器預期會重置時間軸,從而導致下一個片段在上一個片段之後立即播放。支援下列模式:
-
ALWAYS
:不連續性標記放置在HLS媒體播放列表中的每個片段之間。ALWAYS
如果片段時間戳記不準確,建議使用的值為。 -
NEVER
:不會將不連續性標記放置在任何地方。建議使用的NEVER
值,以確保媒體播放器時間軸最準確地對應至製作者時間戳記。 -
ON_DISCONTINUITY
: 不連續性標記放置在間隙或重疊超過 50 毫秒的片段之間。對於大多數播放情況,建議使用的值為,ON_DISCONTINUITY
以便只有在媒體時間軸出現重大問題時才會重設媒體播放器時間軸 (例如遺失片段)。
預設值HLSFragmentSelector為
ALWAYS
何時設定為SERVER_TIMESTAMP
,以及設定為NEVER
時PRODUCER_TIMESTAMP
。類型:字串
有效值:
ALWAYS | NEVER | ON_DISCONTINUITY
必要:否
-
- DisplayFragmentTimestamp
-
指定片段開始時間戳記應包含在HLS媒體播放清單中的時間。媒體播放程式通常會將播放磁頭位置報告為相對於播放工作階段中第一個片段開始的時間。不過,當開始時間戳記包含在媒體播放清單中時,某些HLS媒體播放程式可能會根據片段時間戳記,將目前的播放磁頭報告為絕對時間。這對於建立可向觀眾顯示媒體掛鐘時間的播放體驗非常有用。
預設值為
NEVER
。如果HLSFragmentSelector是SERVER_TIMESTAMP
,時間戳記將是伺服器啟動時間戳記。同樣,如果HLSFragmentSelector是PRODUCER_TIMESTAMP
,時間戳記將是生產者開始時間戳記。類型:字串
有效值:
ALWAYS | NEVER
必要:否
- Expires
-
要求的工作階段到期前的時間 (以秒為單位)。此值可以介於 300(5 分鐘)到 43200(12 小時)之間。
當工作階段到期時,無法對該工作階段
GetTSFragment
進行GetMP4InitFragment
GetMP4MediaFragment
、、或的新呼叫。GetHLSMasterPlaylist
GetHLSMediaPlaylist
預設值為 300 (5 分鐘)。
類型:整數
有效範圍:最小值 300。最大值為 43200。
必要:否
- HLSFragmentSelector
-
請求片段的時間範圍和時間戳記的來源。
如果是或,則
PlaybackMode
需要此參ON_DEMAND
數LIVE_REPLAY
。如果是,則此參數 PlaybackMode 是可選的LIVE
。如果PlaybackMode
是LIVE
,則FragmentSelectorType
可以設定,但不TimestampRange
應設定。如果PlaybackMode
是ON_DEMAND
或LIVE_REPLAY
,則TimestampRange
必須同時FragmentSelectorType
設定 AND。類型:HLSFragmentSelector 物件
必要:否
- MaxMediaPlaylistFragmentResults
-
HLS媒體播放清單中傳回的片段數目上限。
如果
PlaybackMode
是LIVE
,則最新的片段會返回到此值。如果PlaybackMode
是ON_DEMAND
,則返回最舊的片段,直到此最大數量。當即時HLS媒體播放清單中可用的片段數目較多時,視訊播放程式通常會在開始播放之前緩衝內容。增加緩衝區大小會增加播放延遲,但會降低播放期間發生重新緩衝的可能性。我們建議即時HLS媒體播放清單至少有 3 個片段和最多 10 個片段。
如果是
LIVE
或LIVE_REPLAY
,預設值為 5 個片段,如果PlaybackMode
是,則預設值PlaybackMode
為 1,000ON_DEMAND
。5,000 個片段的最大值對應於具有 1 秒片段的流上的視頻 80 分鐘以上,以及具有 10 秒片段的流上的視頻超過 13 小時。
類型:Long
有效範圍:最小值為 1。最大值為 5000。
必要:否
- PlaybackMode
-
是否要擷取即時、即時重播或封存的隨選資料。
三種工作階段類型的功能包括:
-
LIVE
:對於此類型的工作階段,HLS媒體播放清單會在可用時不斷更新為最新片段。我們建議媒體播放器以一秒鐘的時間間隔擷取新的播放清單。在媒體播放程式中播放此類工作階段時,使用者介面通常會顯示「即時」通知,而且沒有用於選擇播放視窗中要顯示的位置的定位器控制項。注意
在
LIVE
模式中,HLS媒體播放清單中會包含最新的可用片段,即使片段之間存在間隙 (也就是說,如果片段遺失)。像這樣的間隙可能會導致媒體播放器停止或導致播放跳躍。在此模式下,如果片段比播放清單中的最新片段舊,則片段不會新增至HLS媒體播放清單。如果在後續片段新增至播放清單後,遺失的片段變為可用,則不會新增較舊的片段,且不會填滿間隙。 -
LIVE_REPLAY
:對於此類型的工作階段,HLS媒體播放清單的更新方式與LIVE
模式更新的方式類似,不同之處在於它會從指定開始時間包含片段開始。而不是在攝入片段時添加片段,而是在下一個片段的持續時間過去時添加片段。例如,如果工作階段中的片段長度為兩秒鐘,則每兩秒鐘就會將新片段新增至媒體播放清單。此模式對於能夠在偵測到事件時開始播放,並繼續在工作階段建立時尚未擷取的即時串流媒體非常有用。此模式對於串流先前封存的媒體也很有用,而不受ON_DEMAND
模式中 1,000 片段限制的限制。 -
ON_DEMAND
:對於此類型的工作階段,HLS媒體播放清單會包含工作階段的所有片段,直到中指定的數目為止MaxMediaPlaylistFragmentResults
。每個工作階段只能擷取一次播放清單。在媒體播放程式中播放此類工作階段時,使用者介面通常會顯示定位器控制項,以便在播放視窗中選擇要顯示的位置。
在所有播放模式中,如果
FragmentSelectorType
是PRODUCER_TIMESTAMP
,如果有多個片段具有相同的開始時間戳記,則HLS媒體播放清單中會包含具有最大片段編號的片段 (即最新片段)。其他片段不包括在內。具有不同時間戳記但持續時間重疊的片段仍會包含在HLS媒體播放清單中。這可能會導致媒體播放器中出現意外行為。預設值為
LIVE
。類型:字串
有效值:
LIVE | LIVE_REPLAY | ON_DEMAND
必要:否
-
- StreamARN
-
要擷取HLS主播放清單之串流的 Amazon 資源名稱 (ARN) URL。
您必須指定
StreamName
或StreamARN
。類型:字串
長度限制:長度下限為 1。長度上限為 1024。
模式:
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
必要:否
- StreamName
-
要擷取HLS主播放清單的串流名稱URL。
您必須指定
StreamName
或StreamARN
。類型:字串
長度限制:長度下限為 1。長度上限為 256。
模式:
[a-zA-Z0-9_.-]+
必要:否
回應語法
HTTP/1.1 200
Content-type: application/json
{
"HLSStreamingSessionURL": "string"
}
回應元素
如果動作成功,服務會傳回 HTTP 200 回應。
服務會以JSON格式傳回下列資料。
- HLSStreamingSessionURL
-
媒體播放器可用來擷取HLS主播放清單的 URL (包含工作階段權杖)。
類型:字串
錯誤
如需所有動作常見錯誤的資訊,請參閱常見錯誤。
- ClientLimitExceededException
-
Kinesis Video Streams 已限制要求,因為您已超過限制。稍後再嘗試撥打電話。如需限制的相關資訊,請參閱 Kinesis Video Streams 配額。
HTTP狀態碼:
- InvalidArgumentException
-
指定的參數超出其限制、不受支援或無法使用。
HTTP狀態碼:
- InvalidCodecPrivateDataException
-
視訊串流中至少一個軌道中的編解碼器私人資料對此作業無效。
HTTP狀態碼:
- MissingCodecPrivateDataException
-
在視訊串流的至少一個軌道中找不到轉碼器私人資料。
HTTP狀態碼:
- NoDataRetentionException
-
GetImages
要求不保留資料的串流 (也就是說,aDataRetentionInHours
為 0)。HTTP狀態碼:
- NotAuthorizedException
-
狀態碼:403,調用者未授權在給定流上執行操作,或令牌已過期。
HTTP狀態碼:4
- ResourceNotFoundException
-
GetImages
當 Kinesis 影片串流找不到您指定的串流時,就會擲回此錯誤。GetHLSStreamingSessionURL
如果在請求的時間範圍內沒有片段PlaybackMode
的流請求具有ON_DEMAND
orLIVE_REPLAY
的會話,或者如果在過去 30 秒內沒有片段PlaybackMode
的LIVE
流請求具有 a 的會話,則GetDASHStreamingSessionURL
拋出此錯誤。HTTP狀態碼:
- UnsupportedStreamMediaTypeException
-
媒體類型 (例如 h.264 或 h.265 視訊AAC或 G.711 音訊) 無法從播放工作階段的第一個片段中曲目IDs的編解碼器來決定。音軌 1 的轉碼器 ID 應該是
V_MPEG/ISO/AVC
音軌 2 的編解碼器識別碼 (選擇性)A_AAC
。HTTP狀態碼:
另請參閱
如需API在其中一種特定語言中使用此功能的詳細資訊 AWS SDKs,請參閱下列內容: