

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

# 從 Kinesis 影片串流播放媒體
<a name="producersdk-cpp-rpi-playback"></a>

開啟 [Kinesis Video Streams 主控台](https://console.aws.amazon.com//kinesisvideo/home/)，並為您建立的串流選取**串流名稱**。

從 Raspberry Pi 傳送的視訊串流，會出現在主控台。

**注意**  
可能需要幾秒鐘的時間，影片才會出現在主控台中。

串流播放後，您可以在 主控台中實驗下列功能：
+ 在 **Video preview** (視訊預覽) 區段中，請使用導覽控制，以倒轉或向前快轉串流。
+ 在**串流資訊**區段中，檢閱串流的轉碼器、解析度和位元速率。Raspberry Pi 上的解析度和位元速率值會刻意設為低，以將本教學課程的頻寬使用量降至最低。

  若要檢視為串流建立的 Amazon CloudWatch 指標，請選取在 ** CloudWatch 中檢視串流指標**。
+ 在 **Data retention period** (資料保留期間) 下，請注意視訊串流的保留期間為 1 天。您可以編輯此值，將其設定為 **No data retention** (無資料保留)，或將值設定為從一天到數年。
+ 在**伺服器端加密**下，請注意您的資料正在使用由 AWS Key Management Service () 維護的金鑰進行靜態加密AWS KMS。

## 播放問題
<a name="rpi-troubleshoot-playback"></a>

以下是一些經常遇到的播放問題，以及如何進行故障診斷。

### 沒有媒體，但日誌中有 PERSISTED Acks
<a name="rpi-troubleshoot-no-media"></a>

如果您在日誌中看到 PERSISTED Acks，Kinesis Video Streams 已成功擷取並存放 上傳的媒體`kvssink`。從 Kinesis Video Streams 收到的 Acks 如下所示。在 JSON 中，查看`"EventType"`金鑰的值。

```
{"EventType":"RECEIVED","FragmentTimecode":252200,"FragmentNumber":"12345678901234567890123456724587702494771079511"}
{"EventType":"BUFFERING","FragmentTimecode":252467,"FragmentNumber":"12345678901234567890123456781729223736853277017"}
{"EventType":"RECEIVED","FragmentTimecode":252467,"FragmentNumber":"12345678901234567890123456781729223736853277017"}
{"EventType":"BUFFERING","FragmentTimecode":253000,"FragmentNumber":"12345678901234567890123456738870744847093249408"}
{"EventType":"PERSISTED","FragmentTimecode":252200,"FragmentNumber":"12345678901234567890123456724587702494771079511"}
{"EventType":"PERSISTED","FragmentTimecode":252467,"FragmentNumber":"1234567890123456789012345671729223736853277017"}
```

**解決方法：**

在 Kinesis Video Streams 主控台中等待一兩分鐘，然後使用向右雙箭頭。如果沒有顯示媒體，請確認您的串流正在傳送至正確的區域，並檢閱串流名稱的拼寫。您可以在日誌中找到此資訊。

[提供區域給 `kvssink`](examples-gstreamer-plugin-parameters.md#kvssink-region) 如需 kvssink 如何決定要使用的區域的詳細資訊，請參閱 。

### 媒體在 中載入需要很長的時間 AWS 管理主控台
<a name="rpi-troubleshoot-load-time"></a>

**重要**  
主控台播放體驗與 HLS 和 DASH 播放體驗不同。使用 GitHub 中的範例媒體播放器[託管網頁](https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/)來測試播放。您可以在[此處](https://github.com/aws-samples/amazon-kinesis-video-streams-media-viewer)找到網頁的原始碼。

由於網路頻寬不足或裝置受限，媒體可能會在主控台中緩慢載入，但也可能與影片編碼和分段相關。

**影片編碼基本概念：**
+ H.264 和 H.265 編碼器使用關鍵影格 (I-Frame) 和預測影格 (P-Frame) 以實現高效壓縮。
+ 關鍵影格包含完整的影像資料，而 P 影格僅包含先前影格的變更。
+ 「關鍵影格間隔」會決定關鍵影格在影片串流中的發生頻率。

**串流中的分段：**
+ 在 Kinesis Video Streams 中，新片段會從每個關鍵影格開始。如需詳細資訊，請參閱[Kinesis Video Streams 資料模型](how-data.md)。
+ 片段長度 （以秒為單位） 可估計為：*關鍵影格間隔* ÷ *影格率*

  **範例**：

  對於關鍵影格間隔為 30 且影格速率為 15 fps 的串流：

  片段長度 = 30 ÷ 15 = 2 秒

由於關鍵影格間隔較大，較長的片段會增加串流媒體的延遲。

**解決方法：**

為了改善載入時間，請考慮減少關鍵影格間隔。這將建立較短的片段，減少延遲，但也會增加影片檔案的大小。

對於 `x264enc` GStreamer 元素，您可以透過 `key-int-max` 屬性明確設定關鍵影格間隔：

```
x264enc bframes=0 key-int-max=60
```

檢閱日誌輸出時，請注意上傳用戶端從 Kinesis Video Streams 接收 ACKs 的頻率。產生的關鍵影格越多，傳回ACKs 越多。

### 媒體失真或有成品
<a name="rpi-troubleshoot-distortion"></a>

若要疑難排解此問題，請確定所有纜線都已緊密連接。檢閱攝影機模組的輸出 `libcamera-hello`（或`raspistill`舊版 Pi 攝影機的輸出）。

在您的 GStreamer 管道中，將 取代`kvssink`為 `autovideosink`或 `matroskamux`和 `filesink`。例如：

```
... x264enc tune=zerolatency speed-preset=ultrafast bframes=0 key-int-max=60 byte-stream=true ! h264parse ! matroskamux ! filesink location=output.mkv 
```

檢閱 的輸出檔案，`filesink`或是使用 時開啟的媒體播放器`autovideosink`，以查看成品是否也存在。

同時檢閱下列管道的輸出：

```
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
```

將元素新增至管道，例如[去彎曲](https://gstreamer.freedesktop.org/documentation/opencv/dewarp.html?gi-language=c)，可以修正魚眼攝影機輸出。

檢閱攝影機支援的輸出轉碼器，並視需要調整元素。

例如，如果您的 USB 攝影機僅支援 JPEG 輸出，則您將需要使用 `jpegparse`和 `jpegdec`元素來轉換媒體，然後再使用 將其編碼為 H.264`x264enc`。在 GStreamer 論壇上搜尋具有類似管道和/或網路攝影機設定的其他使用者的協助。