本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 HLS 進行視頻播放
HTTP 即時串流 (HLS)
您可以使用 HLS 進行即時播放。延遲通常介於 3-5 秒之間,但視使用案例、播放程式和網路條件而定,延遲時間可能在 1—10 秒之間。您可使用第三方播放器 (例如 Video.js
若要使用 HLS 檢視 Kinesis 視訊串流,請先使用 Get StreamingSession Hls URL 建立串流工作階段。這個動作會傳回一個 URL (包含工作階段字符) 以存取 HLS 工作階段。然後您可以使用媒體播放器的 URL 或獨立應用程式來顯示串流。
重要
並非所有傳送至 Kinesis Video Streams 的媒體都能透過 HLS 播放。如需特GetHLSStreamingSessionURL定上傳需求,請參閱。
使用擷 AWS CLI 取 HLS 串流工作階段 URL
請遵循以下程序來為 Kinesis 視訊串流產生 HLS 串流工作階段 URL。 AWS CLI
如需安裝指示,請參閱使AWS Command Line Interface 用者指南。安裝後,配置使 AWS CLI用憑據和區域。
或者,打開已 AWS CLI 安裝和配置的 AWS CloudShell 終端。如需詳細資訊,請參閱AWS CloudShell 使用者指南。
為您的 Kinesis 影片串流擷取 HLS URL 端點。
在終端機中鍵入以下內容:
aws kinesisvideo get-data-endpoint \ --api-name GET_HLS_STREAMING_SESSION_URL \ --stream-name
YourStreamName
您會收到如下所示的回應:
{ "DataEndpoint": "https://b-
1234abcd
.kinesisvideo.aws-region
.amazonaws.com" }向該傳回的端點發出 HLS 串流工作階段 URL 要求。
您會收到如下所示的回應:
{ "HLSStreamingSessionURL": "https://b-
1234abcd
.kinesisvideo.aws-region
.amazonaws.com/hls/v1/getHLSMasterPlaylist.m3u8?SessionToken=CiAz...DkRE6M
~" }重要
不要在未經授權的實體可以訪問它的地方共享或存儲此令牌。令牌提供對流內容的訪問。使用與 AWS 憑據一起使用的相同措施來保護令牌。
您可以使用此 URL 和任何 HLS 播放器來查看 HLS 流。
例如,使用 VLC 媒體播放器。
您也可以通過在蘋果 Safari 或 Microsoft 邊緣瀏覽器的位置欄中輸入 HLS 流會話 URL 來播放 HLS 流。
範例:在 HTML 和中使用 HLS JavaScript
下列範例顯示如何使用適用於 JavaScript v2 的 AWS SDK 擷取 Kinesis 視訊串流的 HLS 串流工作階段,並在網頁中播放。本範例說明如何在下列播放器播放影片:
程式碼逐步解說主題:
匯入適用於瀏覽器 JavaScript 的 AWS SDK
在網頁中,包括以下腳本標記,以將 JavaScript v2 的 AWS SDK 導入到項目中。
<script src="https://cdnjs.cloudflare.com/ajax/libs/aws-sdk/2.490.0/aws-sdk.min.js"></script>
如需詳細資訊,請參閱 AWS SDK 以取得 JavaScript說明文件。
設定 Kinesis Video Streams 用戶端
若要使用 HLS 存取串流視訊,請先建立並設定 Kinesis Video Streams 用戶端。如需其他驗證方法,請參閱在 Web 瀏覽器中設定認證。
const clientConfig = { accessKeyId: '
YourAccessKey
', secretAccessKey: 'YourSecretKey
', region: 'us-west-2
' }; const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
該應用程式會在 HTML 頁面的輸入方塊擷取必要的值。
擷取 HLS 播放的端點
使用 Kinesis Video Streams 用戶端呼叫 GetDataEndpoint API 以擷取端點。
const getDataEndpointOptions = { StreamName: '
YourStreamName
', APIName: 'GET_HLS_STREAMING_SESSION_URL' }; const getDataEndpointResponse = await kinesisVideoClient .getDataEndpoint(getDataEndpointOptions) .promise(); const hlsDataEndpoint = getDataEndpointResponse.DataEndpoint;
此程式碼會將端點儲存在hlsDataEndpoint
變數中。
設定 Kinesis Video Streams 封存媒體用戶端
在 Kinesis Video Streams 封存媒體用戶端的用戶端組態中,指定您在上一個步驟中取得的端點。
const archivedMediaClientConfig = { accessKeyId: '
YourAccessKey'
, secretAccessKey: 'YourSecretKey'
, region: 'us-west-2
', endpoint: hlsDataEndpoint }; const kinesisVideoArchivedMediaClient = new AWS.KinesisVideoArchivedMedia(archivedMediaClientConfig);
擷取 HLS 串流工作階段 URL
使用 Kinesis Video Streams 封存媒體用戶端呼叫 GetHLSStreamingSessionURL API 以擷取 HLS 播放 URL。
const getHLSStreamingSessionURLOptions = { StreamName: '
YourStreamName
', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient .getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions) .promise(); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;
在網頁上顯示 HLS 流
當您擁有 HLS 串流工作階段的 URL 時,請將其提供給影片播放器。將 URL 提供給影片播放器的方法,因影片播放器種類而異。
疑難排解 HLS 問題
本節說明搭配 Kinesis 視訊串流使用 HTTP 即時串流 (HLS) 時可能會遇到的問題。
擷取 HLS 串流工作階段 URL 成功,但在影片播放器播放時失敗
這種情況發生於當 HLS 串流工作階段 URL 可透過 GetHLSStreamingSessionURL
成功擷取,但是影片播放器卻無法透過提供的 URL 成功播放時。
若要排除這種情況,請嘗試:
-
判斷視訊串流是否在 Kinesis Video Streams 主控台中播放。請考慮主控台顯示的任何錯誤。
-
如果片段持續時間少於一秒,請將其增加到一秒。如果片段持續時間太短,服務可能會限制播放器,因為它太頻繁地發出視訊片段的要求。
-
請確認每個 HLS 串流工作階段 URL 僅由一個播放器使用。如果超過一個播放器正在使用單一 HLS 串流工作階段 URL,服務可能會因為收到太多請求而對這些播放器進行調節。
-
確認您的播放器支援您為 HLS 串流工作階段指定的所有選項。為以下參數嘗試不同的組合值:
-
ContainerFormat
-
PlaybackMode
-
FragmentSelectorType
-
DiscontinuityMode
-
MaxMediaPlaylistFragmentResults
有些媒體播放程式 (如 HTML5 和行動播放程式) 通常只支援具有 fMP4 容器格式的 HLS。其他媒體播放器(例如 Flash 和自定義播放器)可能只支持具有 MPEG TS 容器格式的 HLS。我們建議您嘗試
ContainerFormat
參數以開始疑難排解。 -
-
確認每個片段都有一致的軌道數量。確認串流中的片段在同時具有音訊和視訊軌道以及僅具有視訊軌道之間沒有變更。還要驗證編碼器設置(分辨率和幀速率)在每個軌道中的片段之間沒有改變。
製作者和播放器間的延遲太高
當視訊擷取時間與影片播放器播放的時間延遲太高時,便會發生此狀況。
系統會以每個片段的方式透過 HLS 播放影片。因此,延遲不得少於片段持續時間。延遲也包含緩衝和傳輸資料所需的時間。如果您的解決方案需要少於一秒的延遲,請考慮使用 GetMedia
API。
您可以調整以下參數來降低整體延遲,但調整這些參數也可能降低影片品質或增加重新緩衝的時間。
-
片段持續時間 — 片段持續時間是由視訊編碼器產生的關鍵影格頻率所控制的串流中分割之間的視訊量。建議的值為一秒。擁有較短片段持續時間,代表在傳輸影片資料至服務之前所等待的片段完成時間較少。較短的片段也能讓服務處理得更快速。不過,如果片段持續時間過短,播放器因內容播畢而停止並緩衝內容的可能性也會提升。如果片段持續時間少於 500 毫秒,則製作者可能建立了太多請求以致服務開始對其進行調節。
-
位元速率 — 比特率較低的視頻流讀取,寫入和傳輸所需的時間更少。不過,較低位元速率的影片串流通常會有較差的影片品質。
-
媒體播放清單中的片段計數 — 對延遲敏感的播放器應該只載入媒體播放清單中的最新片段。大多數玩家從最早的片段開始。通過減少播放列表中的片段數量,可以減少先前片段和新片段之間的時間間隔。如果播放清單大小較小,如果播放清單新增片段有延遲,或者播放器取得更新的播放清單有延遲,則播放期間可能會略過片段。我們建議使用 3-5 個片段,並使用設定為只載入播放清單中最新片段的播放程式。
-
播放器緩衝區大小 — 大多數視頻播放器具有可配置的最小緩衝持續時間,通常默認值為 10 秒。如需將延遲降到最低,您可以將此值設為 0 秒。但是,這樣做意味著如果有任何延遲產生片段,播放器會重新緩衝,因為播放器將沒有緩衝區來吸收延遲。
-
播放器「catch」 — 如果緩衝區填滿,視頻播放器通常不會自動 catch 到視頻緩衝區前面的播放,例如延遲片段導致積壓的片段播放。自訂播放器可以透過刪除影格或提高播放速度 (例如提高至 1.1 倍速) 趕上緩衝之前來避免這點。此操作會造成播放不穩定,或在播放器追上進度時加快播放速度,而若緩衝大小保持過短時,重新緩衝可能更為頻繁。