

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例：剖析和轉譯 Kinesis Video Streams 片段
<a name="examples-renderer"></a>

[使用剖析器程式庫進行串流](parser-library.md) 包含名為 的示範應用程式`KinesisVideoRendererExample`，示範剖析和轉譯 Amazon Kinesis 影片串流片段。範例使用 [JCodec](http://jcodec.org/) 解碼 H.264 編碼影格 (以 [範例：Kinesis Video Streams 生產者 SDK GStreamer 外掛程式 - 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 檔案串流。

下列程序示範如何設定及使用 Renderer 示範應用程式。

## 先決條件
<a name="examples-renderer-prerequisites"></a>

為了檢驗及使用 Renderer 範例程式庫，您必須具有下列項目：
+ Amazon Web Services (AWS) 帳戶。如果您還沒有 AWS 帳戶，請參閱 [Kinesis Video Streams 入門](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/getting-started.html)。
+ Java 整合開發環境 (IDE)，例如 [Eclipse Java Neon](https://www.eclipse.org/downloads/packages/release/neon/3/eclipse-jee-neon-3) 或 [JetBrains IntelliJ Idea](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 (Maven)**、**Existing Maven Projects (現有 Maven 專案)**。導覽至 `kinesis-video-streams-parser-lib` 目錄。
   + **在 IntelliJ Idea：**選擇 **Import (匯入)**。巡覽至已下載套件根目錄的 `pom.xml` 檔案。
**注意**  
如果 IntelliJ 找不到相依性，您可能需要執行下列：  
**Build clean: (清除項目)** Choose **File (檔案)**、**Settings (設定)**、**Build, Execution, Deployment (建立、執行、部署)**、** Compiler (編譯器)**。確認已選取**重建時清除輸出目錄**，然後選擇**建置**、**建置專案**。
**Reimport the project (重新匯入專案)：**開啟 (用滑鼠右鍵按一下) 專案的內容功能表，然後選擇 **Maven**、**Reimport (重新匯入)**。

    如需更多詳細資訊，請參閱 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` 類別，請參閱 [呼叫 PutMedia](parser-library-write.md#parser-library-write-example-putmedia) (位於 [使用剖析器程式庫進行串流](parser-library.md) 文件)。

### 將 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` 類別，請參閱 [呼叫 GetMedia](parser-library-write.md#parser-library-write-example-getmedia) (位於 [使用剖析器程式庫進行串流](parser-library.md) 文件)。

### 解碼和顯示影格
<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)。