GetDASHStreamingSessionURL - Amazon Kinesis Video Streams

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

GetDASHStreamingSessionURL

在 HTTP (DASH) URL 上检索该直播的MPEG动态自适应流媒体。然后,您可以在媒体播放器URL中打开以查看直播内容。

StreamNameStreamARN参数都是可选的,但在调用此API操作StreamARN时必须指定StreamName或。

Amazon Kinesis 视频流必须满足以下要求,才能通过 MPEG-提供数据:DASH

以下过程说明如何在 Kinesis Vid DASH eo Streams 中使用 MPEG-

  1. 调用GetDataEndpointAPI获取终端节点。然后使用 --endpoint-url 参数将GetDASHStreamingSessionURL请求发送到此端点

  2. DASHURL使用检索 MPEG-GetDASHStreamingSessionURL。Kinesis Video Streams 创建MPEG了一个DASH直播会话,用于使用 MPEG DASH-协议访问直播中的内容。 GetDASHStreamingSessionURL返回会话的-mani DASH f estURL(使用 MPEG-进行直播所需的根资源)的经过身份验证(包括加密的会话令牌DASH)。MPEG

    注意

    请勿将此令牌共享或存储在未经授权的实体可以访问的地方。该令牌提供对直播内容的访问权限。使用与 AWS 凭证相同的措施来保护令牌。

    通过清单提供的媒体仅包含请求的直播、时间范围和格式。没有其他媒体数据(例如请求的窗口之外的帧或备用比特率)可用。

  3. 向支持-DASH 协议的媒体播放器提供 MPEG-DASH 清单的URL(包含加密的MPEG会话令牌)。Kinesis Video Streams 通过清单提供初始化片段和媒体片段。URL初始化片段包含流的编解码器私有数据,以及设置视频或音频解码器和渲染器所需的其他数据。媒体片段包含编码的视频帧或编码的音频样本。

  4. 媒体播放器接收经过身份验证的URL内容,并正常请求流元数据和媒体数据。当媒体播放器请求数据时,它会调用以下操作:

    • GetDASHManifest:检索MPEGDASH清单,其中包含您要播放的媒体的元数据。

    • GetMP4InitFragment:检索MP4初始化片段。媒体播放器通常会在加载任何媒体片段之前加载初始化片段。此片段包含 fytp “” 和 moov “” MP4 原子以及初始化媒体播放器解码器所需的子原子。

      初始化片段与 Kinesis 视频流中的片段不对应。它仅包含直播和相应轨道的编解码器私有数据,媒体播放器需要这些数据来解码媒体帧。

    • 获取MP4MediaFragment:检索MP4媒体片段。这些片段包含 moof “” 和 mdat “” MP4 原子及其子原子,包含编码片段的媒体帧及其时间戳。

      重要

      每个片段中包含的编解码器私有数据 (CPD) 包含特定于编解码器的初始化信息,例如帧速率、分辨率和编码配置文件,这些信息是正确解码片段所必需的。CPD直播会话期间不支持更改。CPD必须通过查询的媒体保持一致。

      重要

      不支持追踪更改。在所查询的媒体中,曲目必须保持一致。如果直播中的片段从只有视频变为同时包含音频和视频,或者将音轨更改为 A-Law AAC 音轨,则直播将失败。

      通过此操作检索到的数据是可计费的。有关详细信息,请参阅定价

注意

有关适用于DASH会话的限制,请参阅 Kinesis Video Streams 配额。MPEG

您可以通过监控 GetMP4MediaFragment.OutgoingBytes Amazon CloudWatch 指标来监控媒体播放器消耗的数据量。有关使用 CloudWatch 监控 Kinesis Video Streams 的信息,请参阅监控 Kinesis 视频流。有关定价信息,请参阅亚马逊 Kinesis Video Stream s 定价AWS 和定价。HLS会话和传出 AWS 数据均需收费。

有关的更多信息HLS,请参阅 Apple 开发者网站上的HTTP直播

重要

如果在调用 Kinesis Video Streams 存档API媒体后出现错误,则除了状态码和响应正文外,还会包含以下信息:HTTP

  • x-amz-ErrorTypeHTTP标头 — 除了HTTP状态码提供的错误类型外,还包含更具体的错误类型。

  • x-amz-RequestIdHTTP标题 — 如果您想向支持团队报告问题,如果提供请求编号,则可以更好地诊断问题。 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

所请求片段的时间范围和时间戳的来源。

如果为ON_DEMAND或,则此参数PlaybackMode为必填项LIVE_REPLAY。如果是,则此参数是可选 PlaybackMode 的LIVE。如果PlaybackModeLIVE,则FragmentSelectorType可以设置,但TimestampRange不应设置。如果PlaybackModeON_DEMANDLIVE_REPLAY,则TimestampRange必须同时设置FragmentSelectorType和。

类型:DASHFragmentSelector 对象

必需:否

DisplayFragmentNumber

在清单文件中,片段是根据其在会话中的序列号来识别的。如果设置 DisplayFragmentNumber 为ALWAYS,则 Kinesis Video Streams 片段编号将添加到清单文件中的每个 S 元素中,属性名为 “kvs: fn”。这些片段编号可用于记录或与其他APIs(例如GetMediaGetMediaForFragmentList)一起使用。要利用这些自定义MPEG属性,必须使用自定义DASH媒体播放器。

默认值为 NEVER

类型:字符串

有效值:ALWAYS | NEVER

必需:否

DisplayFragmentTimestamp

根据 MPEG-DASH 规范,清单文件中片段的挂钟时间可以使用清单本身中的属性得出。但是,通常,MPEGDASH兼容的媒体播放器无法正确处理媒体时间轴中的空白。Kinesis Video Streams 调整清单文件中的媒体时间轴,以允许播放不连续的媒体。因此,从清单文件中得出的挂钟时间可能不准确。如果设置 DisplayFragmentTimestamp 为ALWAYS,则将精确的片段时间戳添加到清单文件中的每个 S 元素中,属性名为 “kvs: ts”。要利用此自定义MPEG属性,必须使用自定义DASH媒体播放器。

默认值为 NEVER。如果DASHFragmentSelectorSERVER_TIMESTAMP,则时间戳将是服务器启动时间戳。同样,如果DASHFragmentSelectorPRODUCER_TIMESTAMP,则时间戳将是生产者的开始时间戳。

类型:字符串

有效值:ALWAYS | NEVER

必需:否

Expires

请求的会话到期之前的时间(以秒为单位)。此值可以介于 300(5 分钟)和 43200(12 小时)之间。

会话到期后,不能对该会话进行任何新的调用GetMP4InitFragment、或GetMP4MediaFragmentGetDashManifest

默认值为 300(5 分钟)。

类型:整数

有效范围:最小值为 300。最大值为 43200。

必需:否

MaxManifestFragmentResults

MPEG-DASH 清单中返回的最大片段数。

如果PlaybackModeLIVE,则返回最新的片段,直至该值。如果PlaybackModeON_DEMAND,则返回最旧的片段,不超过这个最大数目。

当直播MPEGDASH清单中可用的片段数量较多时,视频播放器通常会在开始播放之前缓冲内容。增加缓冲区大小会增加播放延迟,但会降低播放期间发生重新缓冲的可能性。我们建议实时DASH清单至少MPEG包含 3 个片段,最多 10 个片段。

如果为LIVE或,则默认为 5 个片段,如果PlaybackModeLIVE_REPLAY,则PlaybackMode默认为 1,000 ON_DEMAND

1,000 个片段的最大值对应于包含 1 秒片段的直播中超过 16 分钟的视频,对应于包含 10 秒片段的直播中超过 2 个半小时的视频。

类型:长整型

有效范围:最小值为 1。最大值为 5000。

必需:否

PlaybackMode

是检索实时、实时重播还是存档的按需数据。

这三种类型的会话的特点包括:

  • LIVE: 对于此类会话,MPEG-m DASH anifest 会在可用的最新片段时不断更新。我们建议媒体播放器每隔一秒钟检索新的清单。在媒体播放器中播放此类会话时,用户界面通常会显示 “实时” 通知,没有用于在播放窗口中选择要显示的位置的滑块控件。

    注意

    LIVE模式下,即使片段之间存在间隙(也就是说,如果缺少片段),最新的可用片段也会包含在 MPEG-DASH 清单中。这样的间隙可能会导致媒体播放器停止播放或导致播放跳跃。在此模式下,如果片段早于播放列表中的最新片段,则不会将其添加到 MPEG-DASH 清单中。如果在将后续片段添加到清单后丢失的片段变为可用,则不会添加较旧的片段,也不会填补空白。

  • LIVE_REPLAY: 对于这种类型的会话,MPEG-m DASH anifest 的更新方式与其在LIVE模式下的更新方式类似,唯一的不同是它从包含给定开始时间的片段开始。片段不是在摄取时添加片段,而是在下一个片段的持续时间过去时添加片段。例如,如果会话中的片段长度为两秒,则每两秒钟就会向清单中添加一个新片段。此模式非常有用,可以从检测到事件时开始播放,并继续直播截至会话创建时尚未收录的媒体。此模式还可用于流式传输先前存档的媒体,而不受该ON_DEMAND模式下 1,000 个片段限制的限制。

  • ON_DEMAND:对于此类会话,MPEG-DASH 清单包含会话的所有片段,但不超过中指定的数字MaxManifestFragmentResults。每次会话只能检索一次清单。在媒体播放器中播放此类会话时,用户界面通常会显示一个滑块控件,用于在播放窗口中选择要显示的位置。

在所有播放模式下,如果FragmentSelectorTypePRODUCER_TIMESTAMP,如果有多个片段的开始时间戳相同,则片段编号较大的片段(即较新的片段)将包含在 MPEG-DASH 清单中。其他片段不包括在内。具有不同时间戳但持续时间重叠的片段仍包含在 MPEG-DASH 清单中。这可能会导致媒体播放器出现意外行为。

默认为 LIVE

类型:字符串

有效值:LIVE | LIVE_REPLAY | ON_DEMAND

必需:否

StreamARN

要检索的直播的 Amazon 资源名称 (ARN) MPEG-DASH 清单URL。

必须指定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,调用者无权对给定直播执行操作,或者令牌已过期。

HTTP状态码:401

ResourceNotFoundException

GetImages当 Kinesis Video Streams 找不到你指定的直播时,将引发此错误。

GetHLSStreamingSessionURL如果请求PlaybackMode的会话在请求的时间范围内LIVE_REPLAY没有片段,ON_DEMAND或者在过去 30 秒内没有片段的流请求PlaybackModeLIVE会话为或时,则会GetDASHStreamingSessionURL抛出此错误。

HTTP状态码:404

UnsupportedStreamMediaTypeException

无法根据播放会话的第一个片段中轨道的编解码器IDs来确定媒体的类型(例如 h.264 AAC 或 h.265 视频或或 G.711 音频)。轨道 1 的编解码器 ID 应为V_MPEG/ISO/AVC,轨道 2 的编解码器 ID 也应为(可选)。A_AAC

HTTP状态码:400

另请参阅

有关在特定语言API中使用它的更多信息 AWS SDKs,请参阅以下内容: