

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

# 示例：解析和渲染 Kinesis Video Streams 片段
<a name="examples-renderer"></a>

[使用解析器库进行直播](parser-library.md)包含一个名为的演示应用程序`KinesisVideoRendererExample`，用于演示解析和渲染 Amazon Kinesis 视频流片段。该示例用于[JCodec](http://jcodec.org/)解码使用应用程序摄取的 H.264 编码帧。[示例：Kinesis Video Streams 制作人 GStreamer SDK 插件-kvssink](examples-gstreamer-plugin.md)使用对帧进行解码后 JCodec，使用[JFrame](https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)渲染可见图像。

该示例说明了如何执行以下操作：
+ 使用 `GetMedia` API 从 Kinesis 视频流中检索帧并渲染该视频流以供观看。
+ 在自定义应用程序中查看直播的视频内容，而不是使用 Kinesis Video Streams 控制台。

您还可以使用此示例中的类来查看未编码为 H.264 的 Kinesis 视频流内容，例如在显示之前不需要解码的 JPEG 文件流。

以下过程说明了如何设置和使用渲染器演示应用程序。

## 先决条件
<a name="examples-renderer-prerequisites"></a>

要检查和使用渲染器示例库，您必须满足以下条件：
+ 亚马逊 Web Services (AWS) 账户。如果你还没有 AWS 账户，请参阅 [Kinesis Video Streams 入门](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/getting-started.html)。
+ [Java 集成开发环境 (IDE)，例如 E [clipse Java Neon 或 IntelliJ I JetBrains d](https://www.eclipse.org/downloads/packages/release/neon/3/eclipse-jee-neon-3) ea。](https://www.jetbrains.com/idea/download/)

## 运行渲染器示例
<a name="examples-renderer-procedure"></a>

1. 创建一个目录，然后从 GitHub存储库中克隆示例源代码。

   ```
   git clone https://github.com/aws/amazon-kinesis-video-streams-parser-library
   ```

1. 打开您正使用的 Java IDE (例如，[Eclipse](https://www.eclipse.org/) 或 [IntelliJ IDEA](https://www.jetbrains.com/idea/))，并导入您下载的 Apache Maven 项目：
   + **在 Eclipse 中：**选择 **File**、**Import**、**Maven**、**Existing Maven Projects**。导航到 `kinesis-video-streams-parser-lib` 目录。
   + **在 IntelliJ Idea 中：**选择 **Import**。导航到下载的程序包的根目录中的 `pom.xml` 文件。
**注意**  
如果 IntelliJ 找不到您的依赖项，则可能需要执行以下操作：  
**干净生成**：选择 **File (文件)**、**Settings (设置)**、**Build, Execution, Deployment (生成、执行、部署)**、**Compiler (编译器)**。确认已选中 “**重建时清除输出目录**”，然后选择 “**构建**，**生成项目**”。
**重新导入项目：**打开该项目的上下文菜单（右键单击），选择 **Maven**、**重新导入**。

    有关更多信息，请参阅相关的 IDE 文档。

1. 从您的 Java IDE 中，打开 `src/test/java/com.amazonaws.kinesisvideo.parser/examples/KinesisVideoRendererExampleTest`。

1. 从该文件中删除 `@Ignore` 指令。

1. 使用您的 Kinesis 视频流的名称更新该`.stream`参数。

1. 运行 `KinesisVideoRendererExample` 测试。

## 工作方式
<a name="examples-renderer-howitworks"></a>

**Topics**
+ [发送 MKV 数据](#examples-renderer-howitworks-send)
+ [将 MKV 片段解析成帧](#examples-renderer-howitworks-parse)
+ [解码并显示画面](#examples-renderer-howitworks-display)

### 发送 MKV 数据
<a name="examples-renderer-howitworks-send"></a>

该示例从`rendering_example_video.mkv`文件中发送示例 MKV 数据，`PutMedia`用于将视频数据发送到名为**render-example-stream**的流。

该应用程序创建一个 `PutMediaWorker`：

```
PutMediaWorker putMediaWorker = PutMediaWorker.create(getRegion(),
    getCredentialsProvider(),
    getStreamName(),
    inputStream,
    streamOps.amazonKinesisVideo);
executorService.submit(putMediaWorker);
```

有关 `PutMediaWorker` 类的信息，请参阅[使用解析器库进行直播](parser-library.md)文档中的 [打电话 PutMedia](parser-library-write.md#parser-library-write-example-putmedia)。

### 将 MKV 片段解析成帧
<a name="examples-renderer-howitworks-parse"></a>

然后，该示例使用 `GetMediaWorker` 从流中检索和解析 MKV 片段：

```
GetMediaWorker getMediaWorker = GetMediaWorker.create(getRegion(),
    getCredentialsProvider(),
    getStreamName(),
    new StartSelector().withStartSelectorType(StartSelectorType.EARLIEST),
    streamOps.amazonKinesisVideo,
    getMediaProcessingArgumentsLocal.getFrameVisitor());
executorService.submit(getMediaWorker);
```

有关 `GetMediaWorker` 类的更多信息，请参阅[使用解析器库进行直播](parser-library.md)文档中的 [打电话 GetMedia](parser-library-write.md#parser-library-write-example-getmedia)。

### 解码并显示画面
<a name="examples-renderer-howitworks-display"></a>

然后，该示例使用[JFrame](https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)解码并显示框架。

以下代码示例来自于 `KinesisVideoFrameViewer` 类，该类扩展了 `JFrame`：

```
 public void setImage(BufferedImage bufferedImage) {
    image = bufferedImage;
    repaint();
}
```

该图像显示为 [java.awt.image 的实例。 BufferedImage](https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html)。有关说明如何使用 `BufferedImage` 的示例，请参阅[读取/加载图像](https://docs.oracle.com/javase/tutorial/2d/images/loadimage.html)。