GetDASHStreamingSessionURL - Amazon Kinesis Video Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

GetDASHStreamingSessionURL

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

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

Amazon Kinesis 视频流在通过 MPEG-DASH 提供数据时具有以下要求:

以下过程展示了如何在 Kinesis Video Streams 中使用 MPEG-DASH:

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

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

    注意

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

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

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

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

    • getDashManifest:检索 MPEG DASH 清单,其中包含你要播放的媒体的元数据。

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

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

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

      注意

      在流媒体会话中提供第一个媒体片段后,任何不包含相同编解码器私有数据的片段都会导致在加载这些不同的媒体片段时返回错误。因此,编解码器的私有数据不应在会话中的片段之间发生变化。这也意味着,如果直播中的片段从只有视频变为同时包含音频和视频,则会话将失败。

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

注意

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

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

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

重要

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

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

  • x-amz-RequestIdHTTP 标头 — 如果您想向支持团队报告问题,如果给出请求编号,则可以更好地诊断问题。 Amazon

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”。这些片段编号可用于日志记录或与其他 API 一起使用(例如GetMediaGetMediaForFragmentList)。要利用这些自定义属性,必须使用自定义 MPEG-DASH 媒体播放器。

默认值为 NEVER

类型:字符串

有效值:ALWAYS | NEVER

必需:否

DisplayFragmentTimestamp

根据 MPEG-DASH 规范,清单文件中片段的挂钟时间可以使用清单本身中的属性得出。但是,通常,兼容 MPEG-DASH 的媒体播放器无法正确处理媒体时间轴中的空白。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,则返回最旧的片段,不超过这个最大数目。

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

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

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

类型:长整型

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

必需:否

PlaybackMode

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

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

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

    注意

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

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

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

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

默认值为 LIVE

类型:字符串

有效值:LIVE | LIVE_REPLAY | ON_DEMAND

必需:否

StreamARN

要检索 MPEG-DASH 清单网址的直播的亚马逊资源名称 (ARN)。

必须指定StreamNameStreamARN

类型:字符串

长度限制:长度下限为 1。长度上限为 1024。

模式:arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+

必需:否

StreamName

要检索 MPEG-DASH 清单网址的直播名称。

必须指定StreamNameStreamARN

类型:字符串

长度限制:最小长度为 1。最大长度为 256。

模式:[a-zA-Z0-9_.-]+

必需:否

响应语法

HTTP/1.1 200 Content-type: application/json { "DASHStreamingSessionURL": "string" }

响应元素

如果此操作成功,则该服务将会发送回 HTTP 200 响应。

服务以 JSON 格式返回以下数据。

DASHStreamingSessionURL

媒体播放器可用于检索 MPEG-DASH 清单的网址(包含会话令牌)。

类型:字符串

错误

有关所有操作返回的常见错误的信息,请参阅 常见错误

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

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

HTTP 状态代码:400

另请参阅

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