本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 HLS 播放视频
HTTP 直播 (HLS)
您可以使用 HLS 进行实时播放。延迟通常介于 3-5 秒之间,但可能介于 1-10 秒之间,具体取决于用例、玩家和网络条件。你可以使用第三方播放器(如 Video.js
要使用 HLS 查看 Kinesis 视频流,请先使用 Get SessionURL 创建直播会话。HLSStreaming此操作将返回用于访问 HLS 会话的 URL(包含会话令牌)。您随后可以使用媒体播放器或独立应用程序中的 URL 来显示流。
重要
并非所有发送到 Kinesis Video Streams 的媒体都可以通过 HLS 播放。有关具体GetHLSStreamingSessionURL的上传要求,请参阅。
使用检索 HLS 直播会话网址 AWS CLI
按照以下步骤使用为 Kinesis 视频流生成 HLS 直播会话网址。 AWS CLI
有关安装说明,请参阅《AWS Command Line Interface 用户指南》。安装完成后, AWS CLI使用凭据和区域进行配置。
或者,打开已 AWS CLI 安装和配置的 AWS CloudShell 终端。有关更多信息,请参阅 AWS CloudShell 用户指南。
检索 Kinesis 视频流的 HLS 网址端点。
在终端中键入以下内容:
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 凭证相同的措施来保护令牌。
您可以使用此网址和任何 HLS 播放器来观看 HLS 直播。
例如,使用 VLC 媒体播放器。
你也可以通过在 Apple Safari 或 Microsoft Edge 浏览器的位置栏中输入 HLS 直播会话网址来播放 HLS 直播。
示例:在 HTML 中使用 HLS 和 JavaScript
以下示例说明如何使用 AWS 适用于 JavaScript v2 的 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>
有关更多信息,请参阅 S AWS DK 中的 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 直播会话网址
使用 Kinesis Video Streams 存档媒体客户端调用 GetHLSStreamingSessionURL API 来检索 HLS 播放网址。
const getHLSStreamingSessionURLOptions = { StreamName: '
YourStreamName
', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient .getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions) .promise(); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;
在网页上显示 HLS 直播
当您具有 HLS 流会话 URL 时,请将其提供到视频播放器。向视频播放器提供 URL 的方法是特定于所使用的播放器的。
HLS 问题疑难解答
本节介绍在 Kinesis Video Streams 中使用 HTTP 直播 (HLS) 时可能遇到的问题。
检索 HLS 流会话 URL 成功,但在视频播放器中播放失败
当使用 GetHLSStreamingSessionURL
可以成功检索 HLS 流会话 URL,但将该 URL 提供给视频播放器后视频无法播放时,就会出现这种情况。
要排查这种情况,请尝试以下操作:
-
确定视频流是否在 Kinesis Video Streams 控制台中播放。考虑控制台显示的任何错误。
-
如果片段持续时间少于 1 秒,则增加到 1 秒。如果片段持续时间太短,则该服务可能会限制播放器,因为它过于频繁地请求视频片段。
-
验证每个 HLS 流会话 URL 是否在被唯一的用户使用。如果多个播放器正在使用单个 HLS 流会话 URL,服务可能会收到过多的请求并限制这些播放器。
-
确认您的播放器支持您为 HLS 直播会话指定的所有选项。为以下参数尝试其他值组合:
-
ContainerFormat
-
PlaybackMode
-
FragmentSelectorType
-
DiscontinuityMode
-
MaxMediaPlaylistFragmentResults
某些媒体播放器(例如 HTML5 和移动播放器)通常仅支持 f MP4 容器格式的 HLS。其他媒体播放器(例如 Flash 和自定义播放器)可能只支持 MPEG TS 容器格式的 HLS。我们建议尝试使用
ContainerFormat
参数来开始故障排除。 -
-
验证每个片段是否具有一致的轨道数。验证流中的片段在同时具有音频和视频轨道与只有视频轨道之间没有变化。还要确认每个轨道的片段之间的编码器设置(分辨率和帧率)没有变化。
创建者与播放器之间的延迟过高
当捕获视频与在视频播放器中播放视频之间的延迟过高时,就会出现这种情况。
视频通过 HLS 逐个片段地播放。因此,延迟不能小于片段持续时间。延迟还包含缓冲和传输数据所需的时间。如果您的解决方案需要的延迟不到一秒,请考虑改用 GetMedia
API。
您可以调整以下参数来减少总体延迟,但调整这些参数也可能降低视频质量或提高再缓冲率。
-
片段持续时间-片段持续时间是视频流中各分段之间的视频量,由视频编码器生成的关键帧频率控制。推荐值为 1 秒。具有较短的片段持续时间意味着在将视频数据传输到服务之前等待片段完成的时间会更少。较短的片段还有助于提高服务的处理速度。但是,如果片段持续时间过短,则可能增加播放器耗尽内容且必须停止和缓冲内容的可能性。如果片段持续时间短于 500 毫秒,创建者可能会创建过多请求,从而导致服务对其进行限制。
-
比特率 — 比特率较低的视频流读取、写入和传输所需的时间更少。但是,比特率较低的视频流通常具有较低的视频质量。
-
媒体播放列表中的片段数 — 对延迟敏感的播放器只能加载媒体播放列表中的最新片段。大多数玩家改为从最早的片段开始。通过减少播放列表中的片段数量,可以缩短先前片段和新片段之间的时间间隔。如果播放列表大小较小,则在向播放列表添加新片段时出现延迟,或者如果玩家获取更新的播放列表出现延迟,则在播放过程中可能会跳过片段。我们建议使用 3—5 个片段,并使用配置为仅加载播放列表中最新片段的播放器。
-
播放器缓冲区大小 — 大多数视频播放器都有可配置的最小缓冲持续时间,默认值通常为 10 秒。要最大程度地减少延迟,您可以将此值设置为 0 秒。但是,这样做意味着如果有任何延迟生成片段,则玩家会拒绝缓冲,因为玩家没有缓冲区来吸收延迟。
-
播放器 “catch up” — 如果缓冲区已满,视频播放器通常不会自动将播放捕捉到视频缓冲区前面,比如延迟的片段导致片段积压播放。自定义播放器可通过删除帧或提高播放速度(例如,提高到 1.1 倍)以赶到缓冲区的前面来避免这一点。这会导致播放器赶上时出现震荡或加速,并且由于缓冲区大小被保持在较小水平,重新缓冲可能会更频繁。