本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
GetHLSStreamingSessionURL
检索该直播的 HTP 实时流(HS)网址。然后,您可以在浏览器或媒体播放器中打开 URL 以查看直播内容。
StreamName
和StreamARN
参数都是可选的,但在调用此 API 操作StreamARN
时必须指定StreamName
或。
要通过 HLS 提供数据,Amazon Kinesis 视频流有以下要求:
-
对于流媒体视频,媒体必须包含 H.264 或 H.265 编码的视频,也可以包含 AAC 编码的音频。具体而言,轨道 1 的编解码器 ID 应为
V_MPEG/ISO/AVC
(对于 H.264)或V_MPEG/ISO/HEVC
(对于 H.265)。(可选)轨道 2 的编解码器 ID 应为。A_AAC
对于纯音频流式传输,轨道 1 的编解码器 ID 应为。A_AAC
-
数据保留必须大于 0。
-
每个片段的视频轨道必须包含 H.264 格式的高级视频编码 (AVC) 或 H.265 格式的 HEVC(MPEG-4
规范 ISO/IEC 14496-15)中的编解码器私有数据。有关使流数据适应给定格式的信息,请参阅 NAL 适应标志。 -
每个片段的音轨(如果有)必须包含 AAC 格式的编解码器私有数据(AAC 规范 ISO/IEC 13818
-7)。
Kinesis Video Streams HLS 会话包含片段 MPEG-4 格式(也称为 fmP4 或 CMAF)或 MPEG-2 格式(也称为 TS 区块,HLS 规范也支持)的片段。有关 HLS 片段类型的更多信息,请参阅 HLS
以下过程展示如何在 Kiness Vess Vess 视频流。
-
使用获取终端节点 GetDataEndpoint,
GET_HLS_STREAMING_SESSION_URL
为APIName
参数指定。 -
使用
GetHLSStreamingSessionURL
检索 HLS 网址。Kinesis Video Streams 创建 HLS 流媒体会话,用于使用 HLS 协议访问流中的内容。GetHLSStreamingSessionURL
返回会话的 HLS 主播放列表(使用 HLS 进行直播所需的根资源)的经过身份验证的 URL(包括加密的会话令牌)。注意
不要将此令牌共享或存储在未经授权的实体可以访问的地方。该令牌提供对直播内容的访问权限。使用与Amazon证书相同的措施保护令牌。
通过播放列表提供的媒体仅包含所请求的直播、时间范围和格式。没有其他媒体数据(例如请求的窗口以外的帧或备用比特率)可用。
-
将 HLS 主播放列表的 URL(包含加密的会话令牌)提供给支持 HLS 协议的媒体播放器。Kinesis Video Streams 通过主播放列表 URL 提供 HLS 媒体播放列表、初始化片段和媒体片段。初始化片段包含流的编解码器私有数据,以及设置视频或音频解码器和渲染器所需的其他数据。媒体片段包含 H.264 编码的视频帧或 AAC 编码的音频样本。
-
媒体播放器接收经过身份验证的 URL 并正常请求流元数据和媒体数据。当媒体播放器请求数据时,它会调用以下操作:
-
getHLSMasterPlaylist:检索 HLS 主播放列表,其中包含每首曲目
GetHLSMediaPlaylist
动作的 URL 以及媒体播放器的其他元数据,包括估计的比特率和分辨率。 -
getHLSMediaPlaylist:检索 HLS 媒体播放列表,其中包含用于访问带有操作的 MP4 初始化片段的 URL,以及用于访问包含
GetMP4InitFragment
操作的 MP4 媒体片段的 URL。GetMP4MediaFragment
HLS 媒体播放列表还包含有关播放器需要播放的直播的元数据,例如是还PlaybackMode
LIVE
是ON_DEMAND
。对于为的会话,HLS 媒体播放列表通常是静态PlaybackType
的。ON_DEMAND
HLS 媒体播放列表会不断更新,为为的会话添加PlaybackType
了LIVE
新的片段。视频曲目和音轨(如果适用)有一个不同的 HLS 媒体播放列表,其中包含特定曲目的 MP4 媒体网址。 -
getMP4InitFragment:检索 MP4 初始化片段。媒体播放器通常在加载任何媒体片段之前加载初始化片段。此片段包含 “
fytp
” 和 “moov
” MP4 原子,以及初始化媒体播放器解码器所需的子原子。初始化片段与 Kinesis 视频流中的片段不对应。它仅包含流和相应轨道的编解码器私有数据,媒体播放器需要这些数据来解码媒体帧。
-
getMP4MediaFragment:检索 MP4 媒体片段。这些片段包含 “
moof
” 和 “mdat
” MP4 原子及其子原子,包含编码片段的媒体帧及其时间戳。注意
对于 HLS 流媒体会话,支持赛道内编解码器私有数据 (CPD) 更改。在流媒体会话中提供第一个媒体片段后,片段可以包含每首曲目的 CPD 更改。因此,会话中的片段可以在 CPD 中具有不同的分辨率、比特率或其他信息,而不会中断播放。但是,加载这些不同的媒体片段时,对轨道编解码器编解码器格式所做的任何更改都可能返回错误。例如,如果流中的片段从仅包含视频变为同时包含音频和视频,或者如果将 AAC 音轨更改为 ALAW 音轨,则流式传输将失败。对于每个直播会话,只允许更改 500 个 CPD。
通过此操作检索的数据是可计费的。有关信息,请参阅 定价
。 -
gettsFragment:检索包含流中所有轨道的初始化和媒体数据的 MPEG TS 片段。
注意
如果
ContainerFormat
是MPEG_TS
,则使用此 API 代替GetMP4InitFragment
和GetMP4MediaFragment
来检索流媒体。通过此操作检索的数据是可计费的。有关更多信息,请参阅 Kinesis Video Streams 定价
。
-
玩家之间不得共享直播会话网址。如果多个媒体播放器共享会话,则该服务可能会限制会话。有关连接限制,请参阅 Kinesis Video Streams 限制。
您可以通过监控GetMP4MediaFragment.OutgoingBytes
亚马逊CloudWatch指标来监控媒体播放器消耗的数据量。有关使用CloudWatch监视 Kinesis Video Streams 的信息,请参阅监控 Kinesis Video Streams。有关定价信息,请参阅 Amazon Kinesis Video Streams 定价
有关 HLS 的更多信息,请参阅 Apple 开发者网站上
重要
如果在调用 Kinesis Video Streams 存档媒体 API 后引发错误,除了 HTTP 状态代码和响应正文外,它还包括以下信息:
-
x-amz-ErrorType
HTTP 标头 — 除了 HTTP 状态码提供的错误类型外,还包含更具体的错误类型。 -
x-amz-RequestId
HTTP 标头 — 如果您想向其报告问题Amazon,如果提供请求编号,支持团队可以更好地诊断问题。
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 片段(fmP4 或 CMAF)。这是推荐的包装,因为打包开销最小。另一个容器格式选项是MPEG_TS
。HLS 自 MPEG TS 发布以来一直支持 MPEG TS 区块,有时是老版 HLS 播放器上唯一支持的组件。MPEG TS 的打包开销通常为 5-25%。这意味着 MPEG TS 需要的带宽和成本通常比 fmP4 高 5-25%。默认为
FRAGMENTED_MP4
。类型:字符串
有效值:
FRAGMENTED_MP4 | MPEG_TS
必需:否
- DiscontinuityMode
-
指定何时将标记片段之间不连续性的标志添加到媒体播放列表中。
媒体播放器通常根据每个片段的时间戳来构建要播放的媒体内容的时间表。这意味着,如果片段之间存在任何重叠或间隙(通常设置HLSFragmentSelector为
SERVER_TIMESTAMP
),则媒体播放器时间轴在某些位置的片段之间也会有很小的间隙,并会覆盖其他位置的帧。媒体播放器时间轴的间隙可能导致播放停止,重叠可能导致播放抖动。当片段之间存在不连续标志时,媒体播放器应重置时间轴,从而在前一个片段之后立即播放下一个片段。支持以下模式:
-
ALWAYS
:在 HLS 媒体播放列表中的每个片段之间放置一个不连续标记。ALWAYS
如果片段时间戳不准确,建议使用值。 -
NEVER
: 任何地方都没有放置不连续标记。建议使用值NEVER
来确保媒体播放器时间轴最准确地映射到制作者时间戳。 -
ON_DISCONTINUITY
:在间隙或重叠超过 50 毫秒的片段之间放置不连续标记。对于大多数播放场景,建议使用值,ON_DISCONTINUITY
这样只有在媒体时间轴出现重大问题(例如缺少片段)时,才会重置媒体播放器时间轴。
默认为
ALWAYS
何时设置HLSFragmentSelector为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 小时)之间。
会话到期后,无法对该会话发出新的
GetHLSMasterPlaylist
GetHLSMediaPlaylist
GetMP4InitFragment
GetMP4MediaFragment
、、、或GetTSFragment
调用。默认值为 300 (5 分钟)。
类型:整数
有效范围:最小值为为为为为为为为为为 30 最大值为 43200。
必需:否
- HLSFragmentSelector
-
所请求片段的时间范围和时间戳的来源。
如果是
ON_DEMAND
或,则此参数PlaybackMode
是必需的LIVE_REPLAY
。如果是,则此参数是可选PlaybackMode的LIVE
。如果PlaybackMode
是LIVE
,则FragmentSelectorType
可以设置,但TimestampRange
不应设置。如果PlaybackMode
是ON_DEMAND
或LIVE_REPLAY
,则TimestampRange
必须同时设置FragmentSelectorType
和。类型:HLSFragmentSelector 对象
必需:否
- MaxMediaPlaylistFragmentResults
-
HLS 媒体播放列表中返回的最大片段数。
如果
PlaybackMode
为LIVE
,则返回不超过此值的最新片段。如果PlaybackMode
为ON_DEMAND
,则返回最旧的片段,最多返回此最大值。当实时 HLS 媒体播放列表中可用的片段数量较多时,视频播放器通常会在开始播放之前缓冲内容。增加缓冲区大小会增加播放延迟,但会降低播放期间发生重新缓冲的可能性。我们建议直播 HLS 媒体播放列表至少包含 3 个片段和最多 10 个片段。
如果是
LIVE
或,则默认为 5 个片段PlaybackMode
,如果是LIVE_REPLAY
,则默认为 1,000 个片段ON_DEMAND
。PlaybackMode
5,000 个片段的最大值对应于包含 1 秒片段的直播中超过 80 分钟的视频,以及包含 10 秒片段的直播中超过 13 小时的视频。
类型:长整型
有效范围:最小值为 1。最大值为为为为为为为为为
必需:否
- 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
-
要检索其主播放列表网址的流(ARN)。
必须指定
StreamName
或StreamARN
。类型:字符串
长度限制:最小长度为 1。长度上限为 1024。
模式:
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
必需:否
- StreamName
-
要检索其HL 主播放列表网址的直播的名称。
必须指定
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 状态代码:400
- InvalidArgumentException
-
指定的参数超出了其限制、不受支持或无法使用。
HTTP 状态代码:400
- InvalidCodecPrivateDataException
-
视频流中至少一个轨道中的编解码器私有数据对此操作无效。
HTTP 状态代码:400
- MissingCodecPrivateDataException
-
在视频流的至少一条曲目中未发现编解码器私有数据。
HTTP 状态代码:400
- NoDataRetentionException
-
已为不保留数据(即 a 为 0)
DataRetentionInHours
的流请求流式传输会话。HTTP 状态代码:400
- NotAuthorizedException
-
状态码:403,调用者无权对给定流执行操作,或者令牌已过期。
HTP 状态代码:400
- ResourceNotFoundException
-
GetImages
当 Kinesis Video Streams 找不到你指定的直播时,会引发这个错误。GetHLSStreamingSessionURL
如果请求在请求的时间范围内没有分段PlaybackMode
的流,ON_DEMAND
或者LIVE_REPLAY
请求带有或的会话来处理在请求的时间范围内没有片段的流,或者如果请求PlaybackMode
的会话LIVE
是针对过去 30 秒内没有分段的流,则会GetDASHStreamingSessionURL
抛出这个错误。HTTP 状态代码:404
- UnsupportedStreamMediaTypeException
-
无法根据播放会话的第一个片段中轨道的编解码器 ID 来确定媒体的类型(例如,h.264 或 h.265 视频或 ACC 或 G.711 音频)。轨道 1 的编解码器 ID 应为
V_MPEG/ISO/AVC
,轨道 2 的编解码器 ID 应为(可选)。A_AAC
HTTP 状态代码:400
另请参阅
有关在特定语言的 Amazon 软件开发工具包中使用此 API 的更多信息,请参阅以下内容: