

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

# GetDASHStreamingSessionURL
<a name="API_reader_GetDASHStreamingSessionURL"></a>

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

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

Amazon Kinesis 视频流在通过 MPEG-DASH 提供数据时具有以下要求：
+  [视频播放曲目要求](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/video-playback-requirements.html)。
+ 数据保留必须大于 0。
+ 对于 H.264 格式的高级视频编码 (AVC) 和 H.265 格式的 HEVC，各个片段的视频轨道必须包含编解码器专用数据。有关更多信息，请参阅 [MPEG-4 规范 ISO/IEC 14496-15](https://www.iso.org/standard/55980.html)。有关使流数据适应给定格式的信息，请参阅 [NAL 适应标志](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-reference-nal.html)。
+ [每个片段的音轨（如果存在）必须包含 AAC 格式（A [AC 规范 ISO/IEC 13818-7](https://www.iso.org/standard/43345.html)）或 MS Wave 格式的编解码器私有数据。](https://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html)

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

1. 调用 `GetDataEndpoint` API 获取终端节点。然后使用 [--endpoint-url 参数将`GetDASHStreamingSessionURL`请求发送到此端点](https://docs.aws.amazon.com/cli/latest/reference/)。

1. 使用检索 MPEG-DASH 网址。`GetDASHStreamingSessionURL`Kinesis Video Streams 创建了一个 MPEG-DASH 直播会话，用于使用 MPEG-DASH 协议访问直播中的内容。 `GetDASHStreamingSessionURL`返回会话的 MPEG-DASH *清单*（使用 MPEG-DASH 进行直播所需的根资源）的经过身份验证的 URL（包括加密的会话令牌）。
**注意**  
请勿将此令牌共享或存储在未经授权的实体可以访问的地方。该令牌提供对直播内容的访问权限。使用与 AWS 凭证相同的措施来保护令牌。

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

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

1. 媒体播放器会收到经过身份验证的 URL，并正常请求流元数据和媒体数据。当媒体播放器请求数据时，它会调用以下操作：
   +  **获取DASHManifest：**检索 MPEG DASH 清单，其中包含您要播放的媒体的元数据。
   +  **Get MP4InitFragment：**检索 MP4初始化片段。媒体播放器通常会在加载任何媒体片段之前加载初始化片段。此片段包含 `fytp` “” 和 `moov` “” MP4 原子以及初始化媒体播放器解码器所需的子原子。

     初始化片段与 Kinesis 视频流中的片段不对应。它仅包含直播和相应轨道的编解码器私有数据，媒体播放器需要这些数据来解码媒体帧。
   +  **获取 MP4MediaFragment：**检索 MP4媒体片段。这些片段包含 `moof` “” 和 `mdat` “” MP4 原子及其子原子，包含编码片段的媒体帧及其时间戳。
**重要**  
每个片段中包含的编解码器私有数据 (CPD) 包含特定于编解码器的初始化信息，例如帧速率、分辨率和编码配置文件，这些信息是正确解码片段所必需的。直播会话期间不支持 CPD 更改。通过查询的媒体，持续专业发展必须保持一致。
**重要**  
不支持追踪更改。在所查询的媒体中，曲目必须保持一致。如果直播中的片段从只有视频变为同时包含音频和视频，或者将 AAC 音轨更改为 A-Law 音轨，则直播将失败。

     通过此操作检索到的数据是可计费的。有关详细信息，请参阅[定价](https://aws.amazon.com/kinesis/video-streams/pricing/)。

**注意**  
有关适用于 MPEG-DASH 会话的限制，请参阅 [Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html) 配额。

您可以通过监控 `GetMP4MediaFragment.OutgoingBytes` Amazon CloudWatch 指标来监控媒体播放器消耗的数据量。有关使用 CloudWatch 监控 Kinesis Video Streams 的信息，[请参阅监控 Kinesis](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/monitoring.html) 视频流。有关定价信息，请参阅[亚马逊 Kinesis Video Stream](https://aws.amazon.com/kinesis/video-streams/pricing/) s 定价[AWS 和定价。](https://aws.amazon.com/pricing/)HLS 会话和传出 AWS 数据均需收费。

有关 HLS 的更多信息，请参阅 [Apple 开发者网站上](https://developer.apple.com)的 [HTTP 直播](https://developer.apple.com/streaming/)。

**重要**  
如果在调用 Kinesis Video Streams 存档媒体 API 后出现错误，则除了 HTTP 状态代码和响应正文外，还会包含以下信息：  
 `x-amz-ErrorType`HTTP 标头 — 除了 HTTP 状态码提供的错误类型外，还包含更具体的错误类型。
 `x-amz-RequestId`HTTP 标头 — 如果您想向支持团队报告问题，如果给出请求编号，则可以更好地诊断问题。 AWS 
HTTP 状态码和 ErrorType 标头都可用于对错误是否可重试以及在什么条件下做出编程决策，并提供有关客户端程序员可能需要采取哪些操作才能成功重试的信息。  
有关更多信息，请参阅本主题底部的**错误**部分以及[常见错误](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/CommonErrors.html)。

## 请求语法
<a name="API_reader_GetDASHStreamingSessionURL_RequestSyntax"></a>

```
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 请求参数
<a name="API_reader_GetDASHStreamingSessionURL_RequestParameters"></a>

该请求不使用任何 URI 参数。

## 请求正文
<a name="API_reader_GetDASHStreamingSessionURL_RequestBody"></a>

请求接受采用 JSON 格式的以下数据。

 ** [DASHFragmentSelector](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-DASHFragmentSelector"></a>
所请求片段的时间范围和时间戳的来源。  
如果`PlaybackMode`为`ON_DEMAND`或，则需要此参数`LIVE_REPLAY`。如果是，则此参数是可选 PlaybackMode 的```LIVE`。如果`PlaybackMode`是`LIVE`，则`FragmentSelectorType`可以设置，但`TimestampRange`不应设置。如果`PlaybackMode`为`ON_DEMAND`或`LIVE_REPLAY`，则`TimestampRange`必须同时设置`FragmentSelectorType`和。  
类型：[DASHFragmentSelector](API_reader_DASHFragmentSelector.md) 对象  
必需：否

 ** [DisplayFragmentNumber](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-DisplayFragmentNumber"></a>
在清单文件中，片段是根据其在会话中的序列号来识别的。如果设置 DisplayFragmentNumber 为`ALWAYS`，则 Kinesis Video Streams 片段编号将添加到清单文件中的每个 S 元素中，属性名为 “kvs: fn”。这些片段编号可用于记录或与其他 APIs （例如`GetMedia`和`GetMediaForFragmentList`）一起使用。要利用这些自定义属性，必须使用自定义 MPEG-DASH 媒体播放器。  
默认值为 `NEVER`。  
类型：字符串  
有效值：`ALWAYS | NEVER`  
必需：否

 ** [DisplayFragmentTimestamp](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-DisplayFragmentTimestamp"></a>
根据 MPEG-DASH 规范，清单文件中片段的挂钟时间可以使用清单本身中的属性得出。但是，通常，兼容 MPEG-DASH 的媒体播放器无法正确处理媒体时间轴中的空白。Kinesis Video Streams 调整清单文件中的媒体时间轴，以允许播放不连续的媒体。因此，从清单文件中得出的挂钟时间可能不准确。如果设置 DisplayFragmentTimestamp 为`ALWAYS`，则将精确的片段时间戳添加到清单文件中的每个 S 元素中，属性名为 “kvs: ts”。要利用此自定义属性，必须使用自定义 MPEG-DASH 媒体播放器。  
默认值为 `NEVER`。如果[DASHFragmentSelector](API_reader_DASHFragmentSelector.md)是`SERVER_TIMESTAMP`，则时间戳将是服务器启动时间戳。同样，如果[DASHFragmentSelector](API_reader_DASHFragmentSelector.md)是`PRODUCER_TIMESTAMP`，则时间戳将是生产者的开始时间戳。  
类型：字符串  
有效值：`ALWAYS | NEVER`  
必需：否

 ** [Expires](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-Expires"></a>
请求的会话到期之前的时间（以秒为单位）。此值可以介于 300（5 分钟）和 43200（12 小时）之间。  
会话到期后，不能对该会话进行任何新的调用`GetMP4InitFragment`、或`GetMP4MediaFragment`。`GetDashManifest`  
默认值为 300（5 分钟）。  
类型：整数  
有效范围：最小值为 300。最大值为 43200。  
必需：否

 ** [MaxManifestFragmentResults](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-MaxManifestFragmentResults"></a>
MPEG-DASH 清单中返回的最大片段数。  
如果`PlaybackMode`为`LIVE`，则返回最新的片段，直至该值。如果`PlaybackMode`为`ON_DEMAND`，则返回最旧的片段，不超过这个最大数目。  
当实时 MPEG-DASH 清单中可用的片段数量较多时，视频播放器通常会在开始播放之前缓冲内容。增加缓冲区大小会增加播放延迟，但会降低播放期间发生重新缓冲的可能性。我们建议实时 MPEG-DASH 清单至少包含 3 个片段，最多 10 个片段。  
如果为`LIVE`或，则默认为 5 个片段，如果`PlaybackMode`为`LIVE_REPLAY`，则`PlaybackMode`默认为 1,000 `ON_DEMAND`。  
1,000 个片段的最大值对应于包含 1 秒片段的直播中超过 16 分钟的视频，对应于包含 10 秒片段的直播中超过 2 个半小时的视频。  
类型：长整型  
有效范围：最小值为 1。最大值为 5000。  
必需：否

 ** [PlaybackMode](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-PlaybackMode"></a>
是检索实时、实时重播还是存档的按需数据。  
这三种类型的会话的特点包括：  
+  **`LIVE`**：对于此类会话，MPEG-DASH 清单会在可用的最新片段时不断更新。我们建议媒体播放器每隔一秒钟检索新的清单。在媒体播放器中播放此类会话时，用户界面通常会显示 “实时” 通知，没有用于在播放窗口中选择要显示的位置的滑块控件。
**注意**  
在`LIVE`模式下，即使片段之间存在间隙（也就是说，如果缺少片段），最新的可用片段也会包含在 MPEG-DASH 清单中。这样的间隙可能会导致媒体播放器停止播放或导致播放跳跃。在此模式下，如果片段早于播放列表中的最新片段，则不会将其添加到 MPEG-DASH 清单中。如果在将后续片段添加到清单后丢失的片段变为可用，则不会添加较旧的片段，也不会填补空白。
+  **`LIVE_REPLAY`**：对于此类会话，MPEG-DASH 清单的更新方式与`LIVE`模式更新方式类似，不同之处在于它首先包含给定开始时间的片段。片段不是在摄取时添加片段，而是在下一个片段的持续时间过去时添加片段。例如，如果会话中的片段长度为两秒，则每两秒钟就会向清单中添加一个新片段。此模式非常有用，可以从检测到事件时开始播放，并继续直播截至会话创建时尚未收录的媒体。此模式还可用于流式传输先前存档的媒体，而不受该`ON_DEMAND`模式下 1,000 个片段限制的限制。
+  **`ON_DEMAND`**：对于此类会话，MPEG-DASH 清单包含会话的所有片段，但不超过中指定的数量。`MaxManifestFragmentResults`每次会话只能检索一次清单。在媒体播放器中播放此类会话时，用户界面通常会显示一个滑块控件，用于在播放窗口中选择要显示的位置。
在所有播放模式下，如果`FragmentSelectorType`是`PRODUCER_TIMESTAMP`，如果有多个片段的开始时间戳相同，则片段编号较大的片段（即较新的片段）将包含在 MPEG-DASH 清单中。其他片段不包括在内。具有不同时间戳但持续时间重叠的片段仍包含在 MPEG-DASH 清单中。这可能会导致媒体播放器出现意外行为。  
默认值为 `LIVE`。  
类型：字符串  
有效值：`LIVE | LIVE_REPLAY | ON_DEMAND`  
必需：否

 ** [StreamARN](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-StreamARN"></a>
要检索 MPEG-DASH 清单网址的直播的亚马逊资源名称 (ARN)。  
必须指定`StreamName`或`StreamARN`。  
类型：字符串  
长度限制：最小长度为 1。长度上限为 1024。  
模式：`arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+`  
必需：否

 ** [StreamName](#API_reader_GetDASHStreamingSessionURL_RequestSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-request-StreamName"></a>
要检索 MPEG-DASH 清单网址的直播名称。  
必须指定`StreamName`或`StreamARN`。  
类型：字符串  
长度限制：最小长度为 1。最大长度为 256。  
模式：`[a-zA-Z0-9_.-]+`  
必需：否

## 响应语法
<a name="API_reader_GetDASHStreamingSessionURL_ResponseSyntax"></a>

```
HTTP/1.1 200
Content-type: application/json

{
   "DASHStreamingSessionURL": "string"
}
```

## 响应元素
<a name="API_reader_GetDASHStreamingSessionURL_ResponseElements"></a>

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

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

 ** [DASHStreamingSessionURL](#API_reader_GetDASHStreamingSessionURL_ResponseSyntax) **   <a name="KinesisVideo-reader_GetDASHStreamingSessionURL-response-DASHStreamingSessionURL"></a>
媒体播放器可用于检索 MPEG-DASH 清单的网址（包含会话令牌）。  
类型：字符串

## 错误
<a name="API_reader_GetDASHStreamingSessionURL_Errors"></a>

有关所有操作的常见错误的信息，请参阅[常见错误类型](CommonErrors.md)。

 ** ClientLimitExceededException **   
Kinesis Video Streams 已限制该请求，因为你已超过限制。稍后再尝试拨打电话。有关限制的信息，请参阅 [Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html) 配额。  
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 秒内没有片段的流请求`PlaybackMode`的`LIVE`会话为或时，则会`GetDASHStreamingSessionURL`抛出此错误。  
HTTP 状态代码：404

 ** UnsupportedStreamMediaTypeException **   
无法根据播放会话的第一个片段中轨道的编解码器来确定媒体的类型（例如 h.264 或 h.265 视频或 AAC IDs 或 G.711 音频）。轨道 1 的编解码器 ID 应为`V_MPEG/ISO/AVC`，轨道 2 的编解码器 ID 也应为（可选）。`A_AAC`  
HTTP 状态代码：400

## 另请参阅
<a name="API_reader_GetDASHStreamingSessionURL_SeeAlso"></a>

有关以特定语言之一使用此 API 的更多信息 AWS SDKs，请参阅以下内容：
+  [AWS 命令行界面 V2](https://docs.aws.amazon.com/goto/cli2/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于.NET 的 SDK V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 C\$1\$1 的 SDK](https://docs.aws.amazon.com/goto/SdkForCpp/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 Go v2 的 SDK](https://docs.aws.amazon.com/goto/SdkForGoV2/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 Java 的 SDK V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS JavaScript V3 版 SDK](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 Kotlin 的 SDK](https://docs.aws.amazon.com/goto/SdkForKotlin/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 PHP 的 SDK V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS Python 软件开发工具包](https://docs.aws.amazon.com/goto/boto3/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 
+  [AWS 适用于 Ruby V3 的 SDK](https://docs.aws.amazon.com/goto/SdkForRubyV3/kinesis-video-reader-data-2017-09-30/GetDASHStreamingSessionURL) 