

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

# 使用 MPEG-DASH 播放视频
<a name="dash-playback"></a>

[要使用 MPEG-DASH 查看 Kinesis 视频流，请先使用 Get SessionURL 创建直播会话。DASHStreaming](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetDASHStreamingSessionURL.html)此操作将返回用于访问 MPEG-DASH 会话的 URL（包含会话令牌）。您随后可以使用媒体播放器或独立应用程序中的 URL 来显示流。

Amazon Kinesis 视频流在通过 MPEG-DASH 提供视频时需要满足以下要求：
+ 有关流式视频播放曲目的要求，请参阅[获取DASHStreaming会话网址要求](video-playback-requirements.md#requirements-getdash)。
+ 数据保留必须大于 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)

## 示例：在 HTML 中使用 MPEG-DASH 和 JavaScript
<a name="dash-examp1e"></a>

以下示例说明如何检索 Kinesis 视频流的 MPEG-DASH 直播会话并在网页中播放。该示例演示了如何在以下播放器中播放视频：
+ [Google Shaka Player](https://github.com/google/shaka-player)
+ [dash.js](https://github.com/Dash-Industry-Forum/dash.js/wiki)

**Topics**
+ [设置 Kinesis Video Streams 客户端以便播放 MPEG-DASH](#dash-example-setup)
+ [检索 Kinesis Video Streams 存档内容端点以便播放 MPEG-DASH](#dash-example-endpoint)
+ [检索 MPEG-DASH 直播会话网址](#dash-example-session)
+ [使用 MPEG-DASH 播放功能显示流媒体视频](#dash-example-display)
+ [已完成的示例](#dash-example-complete)

### 设置 Kinesis Video Streams 客户端以便播放 MPEG-DASH
<a name="dash-example-setup"></a>

要使用 MPEG-DASH 访问流媒体视频，请先创建并配置 Kinesis Video Streams 客户端（用于检索服务端点）和存档媒体客户端（用于检索 MPEG-DASH 直播会话）。该应用程序将从 HTML 页面上的输入框检索必要值。

```
var streamName = $('#streamName').val();

// Step 1: Configure SDK Clients
var options = {
    accessKeyId: $('#accessKeyId').val(),
    secretAccessKey: $('#secretAccessKey').val(),
    sessionToken: $('#sessionToken').val() || undefined,
    region: $('#region').val(),
    endpoint: $('#endpoint').val() || undefined
    }
var kinesisVideo = new AWS.KinesisVideo(options);
var kinesisVideoArchivedContent = new AWS.KinesisVideoArchivedMedia(options);
```

### 检索 Kinesis Video Streams 存档内容端点以便播放 MPEG-DASH
<a name="dash-example-endpoint"></a>

启动客户端后，检索 Kinesis Video Streams 存档内容端点，以便您可以按如下方式检索 MPEG-DASH 直播会话网址：

```
 // Step 2: Get a data endpoint for the stream
console.log('Fetching data endpoint');
kinesisVideo.getDataEndpoint({
    StreamName: streamName,
    APIName: "GET_DASH_STREAMING_SESSION_URL" 
}, function(err, response) {
    if (err) { return console.error(err); }
    console.log('Data endpoint: ' + response.DataEndpoint);
    kinesisVideoArchivedContent.endpoint = new AWS.Endpoint(response.DataEndpoint);
```

### 检索 MPEG-DASH 直播会话网址
<a name="dash-example-session"></a>

有了存档内容端点后，请调用 Ge [t DASHStreaming SessionURL](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetDASHStreamingSessionURL.html) API 来检索 MPEG-DASH 直播会话网址，如下所示：

```
// Step 3: Get a Streaming Session URL
var consoleInfo = 'Fetching ' + protocol + ' Streaming Session URL';
console.log(consoleInfo);

if (protocol === 'DASH') {
    kinesisVideoArchivedContent.getDASHStreamingSessionURL({
        StreamName: streamName,
        PlaybackMode: $('#playbackMode').val(),
        DASHFragmentSelector: {
            FragmentSelectorType: $('#fragmentSelectorType').val(),
            TimestampRange: $('#playbackMode').val() === "LIVE" ? undefined : {
                StartTimestamp: new Date($('#startTimestamp').val()),
                EndTimestamp: new Date($('#endTimestamp').val())
            }
        },
        DisplayFragmentTimestamp: $('#displayFragmentTimestamp').val(),
        DisplayFragmentNumber: $('#displayFragmentNumber').val(),
        MaxManifestFragmentResults: parseInt($('#maxResults').val()),
        Expires: parseInt($('#expires').val())
    }, function(err, response) {
        if (err) { return console.error(err); }
        console.log('DASH Streaming Session URL: ' + response.DASHStreamingSessionURL);
```

### 使用 MPEG-DASH 播放功能显示流媒体视频
<a name="dash-example-display"></a>

当您具有 MPEG-DASH 流会话 URL 时，请将其提供到视频播放器。向视频播放器提供 URL 的方法特定于您使用的播放器。

以下代码示例演示如何将流会话 URL 提供给 [Google Shaka](https://github.com/google/shaka-player) 播放器：

```
// Step 4: Give the URL to the video player.

//Shaka Player elements 
<video id="shaka" class="player" controls autoplay></video>
<script src="https://cdnjs.cloudflare.com/ajax/libs/shaka-player/2.4.1/shaka-player.compiled.js">
</script>
...

var playerName = $('#player').val();

if (playerName === 'Shaka Player') {
    var playerElement = $('#shaka');
    playerElement.show();

    var player = new shaka.Player(playerElement[0]);
    console.log('Created Shaka Player');

    player.load(response.DASHStreamingSessionURL).then(function() {
        console.log('Starting playback');
    });
    console.log('Set player source');
}
```

以下代码示例说明如何将流会话 URL 提供给 [dash.js](https://github.com/Dash-Industry-Forum/dash.js/wiki) 播放器：

```
<!-- dash.js Player elements -->
<video id="dashjs" class="player" controls autoplay=""></video>
<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>

...

var playerElement = $('#dashjs');
playerElement.show();

var player = dashjs.MediaPlayer().create();
console.log('Created DASH.js Player');

player.initialize(document.querySelector('#dashjs'), response.DASHStreamingSessionURL, true);
console.log('Starting playback');
console.log('Set player source');
}
```

### 已完成的示例
<a name="dash-example-complete"></a>

您可以在上[下载或查看已完成的示例代码](https://github.com/aws-samples/amazon-kinesis-video-streams-hls-viewer/blob/master/index.html) GitHub。