

# IVS 播放器 SDK：Video.js 整合
<a name="player-videojs"></a>

本文件說明 Amazon Interactive Video Service (IVS) Video.js 播放器中可用的最重要功能。

**最新版 Video.js 播放器整合：**1.50.0 ([版本備註](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/release-notes.html#mar19-26-player-web-ll))

## 開始使用
<a name="videojs-getting-started"></a>

透過 Video.js [技術](https://videojs.com/guides/tech/)，實現 Amazon IVS 對 Video.js 的支援。我們透過指令碼標記以及透過 npm 模組提供支援。Amazon IVS 支援 Video.js 版本 7.6.6 和更新的版本 7.\$1 和 8\$1。

請注意，執行個體化播放器時，不支援 Video.js [來源選項](https://videojs.com/guides/options/#sources)。相反地，正常執行個體化播放器，並呼叫 Video.js `src()` 函數。如果啟用了自動播放，串流將會開始播放；否則，請使用 `play()` 開始播放。

### 示範
<a name="videojs-demo"></a>

下列即時示範展示如何在內容交付網路中使用 Video.js 整合與指令碼標記：[Amazon IVS 播放器 Video.js 整合](https://codepen.io/amazon-ivs/pen/NWqewZo/bdc01e977102051eae5fb85482f88276)。

### 使用指令碼標記進行設定
<a name="videojs-script-tag-setup"></a>

若要使用 `script` 標記設定 Amazon IVS 技術：

1. 包含下列標記 (適用於最新版本的播放器整合)。

   ```
   <script src="https://player.live-video.net/1.50.0/amazon-ivs-videojs-tech.min.js"></script>
   ```

1. 使用 `registerIVSTech` 函數註冊技術：

   ```
   registerIVSTech(videojs);
   ```

   其中，`videojs` 是 Video.js 提供的物件。

1. 在建立播放器的執行個體時，新增 `AmazonIVS` 作為 `techOrder` 選項中的第一個技術。

執行個體化播放器時，不支援 Video.js [來源選項](https://videojs.com/guides/options/#sources)。相反地，應設定來源，正常執行個體化播放器，然後呼叫其中的 Video.js `src()` 函數。如果啟用了自動播放，串流將會開始播放；否則，請使用 `play()` 開始播放。

### 範例程式碼
<a name="videojs-sample-code"></a>

在此範例中，`PLAYBACK_URL` 是您想要載入的來源串流。此範例使用最新版本的 Amazon IVS 播放器。

```
<!doctype html>
<html lang="en">
<head>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.14.3/video-js.css" rel="stylesheet">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.14.3/video.min.js"></script>
    <script src="https://player.live-video.net/1.50.0/amazon-ivs-videojs-tech.min.js"></script>
</head>

<body>
    <div class="video-container">
        <video id="amazon-ivs-videojs" class="video-js vjs-4-3 vjs-big-play-centered" controls autoplay playsinline></video>
    </div>
    <style>
        body {
            margin: 0;
        }

        .video-container {
            width: 640px;
            height: 480px;
            margin: 15px;
        }
    </style>
    <script>
        (function play() {
            // Get playback URL from Amazon IVS API
            var PLAYBACK_URL = '';
            
            // Register Amazon IVS as playback technology for Video.js
            registerIVSTech(videojs);

            // Initialize player
            var player = videojs('amazon-ivs-videojs', {
               techOrder: ["AmazonIVS"]
            }, () => {
               console.log('Player is ready to use!');
               // Play stream
               player.src(PLAYBACK_URL);
            });
        })();
    </script>
</body>
</html>
```

### 使用 NPM 進行設定
<a name="videojs-npm-setup"></a>

要透過 npm 使用 Amazon IVS 播放器：

1. 安裝 [video.js](https://www.npmjs.com/package/video.js/v/7.6.6) NPM 套件或確保您的專案擁有 Video.js 程式庫的其它存取權。

1.  安裝 `amazon-ivs-player` npm 套件：

   ```
   npm install amazon-ivs-player
   ```

1. 當您準備好註冊 Amazon IVS 技術時，請匯入 `registerIVSTech` 函數：

   ```
   import { registerIVSTech } from 'amazon-ivs-player';
   ```

1. 使用 `registerIVSTech` 函數註冊技術：

   ```
   registerIVSTech(videojs, options);
   ```

   其中：
   + `videojs` 是 Video.js 提供的物件。
   + `options` 是適用於 Amazon IVS 技術層的選項。支援的選項包括：
     + `wasmWorker`：託管 `amazon-ivs-wasmworker.min.js` 檔案的 URL。
     + `wasmBinary`：託管 `amazon-ivs-wasmworker.min.wasm` 檔案的 URL。

     工作者檔案位於 `amazon-ivs-player/dist/` 下的 `node_modules/` 資料夾中。您需要託管他們，才能使用 IVS 播放器。

1. 在建立播放器的執行個體時，新增 `AmazonIVS` 作為 `techOrder` 選項中的第一個技術。

   ```
   const player = videojs('videojs-player', {
       techOrder: ["AmazonIVS"]
   });
   ```

### TypeScript
<a name="videojs-typescript"></a>

如果您使用的是 TypeScript，我們的 npm 套件包括您可能想要匯入和使用的以下類型。
+ `VideoJSEvents`，它描述了從 傳回的結構。`getIVSEvents()`
+ `VideoJSIVSTech`，它描述了使用 `AmazonIVS` 技術的播放器執行個體的界面。這可以與 [@types/video.js](https://www.npmjs.com/package/@types/video.js) npm 套件公開的 `VideoJsPlayer` 類型[相交](https://www.typescriptlang.org/docs/handbook/advanced-types.html#intersection-types)。
+ `TechOptions`，它描述界面，定義您可以傳送至 的組態選項。`registerIVSTech()`

如需這些類型的詳細資訊，請參閱 [Amazon IVS 播放器 SDK：Web 參考](https://aws.github.io/amazon-ivs-player-docs/1.50.0/web/)。

## 活動
<a name="videojs-events"></a>

若要接聽標準 Video.js 事件，請使用 Video.js 播放器的 [on](https://docs.videojs.com/docs/api/player.html#Methodson) 函數。

若要接聽 Amazon IVS 特定事件，請在 Amazon IVS Web 播放器上新增和移除事件接聽程式：

```
player.getIVSPlayer().addEventListener(event, callback);
player.getIVSPlayer().removeEventListener(event, callback);
```

其中，`callback` 是您定義的回呼，`event` 是以下其中一個：`PlayerEventType` 或 `PlayerState`。如需事件的詳細資訊，請參閱 [Amazon IVS 播放器開發套件：Web 參考](https://aws.github.io/amazon-ivs-player-docs/1.50.0/web/)。

## 錯誤
<a name="videojs-errors"></a>

對於一般的 Video.js 錯誤，請接聽播放器上的一般 `error` 事件：

```
player.on("error", callback);
```

對於 Amazon IVS 特定錯誤，請在 Amazon IVS 播放器上接聽其本身的錯誤：

```
let playerEvent = player.getIVSEvents().PlayerEventType;
player.getIVSPlayer().addEventListener(playerEvent.ERROR, callback);
```

此回呼將收到具有以下欄位的物件：


| 欄位 | 描述 | 
| --- | --- | 
| `type` |  錯誤類型。對應 `ErrorType` 事件。如需詳細資訊，請參閱 [Amazon IVS 播放器開發套件：Web 參考](https://aws.github.io/amazon-ivs-player-docs/1.50.0/web/)。  | 
| `code` | 錯誤代碼。 | 
| `source` | 錯誤來源。 | 
| `message` | 人類可讀的錯誤訊息。 | 

## 外掛程式
<a name="videojs-plugins"></a>

我們提供了一個外掛程式，它为可用品質建立一個 UI 切換。要使用此外掛程式，如果您正在透過下面的 `script` 標記使用我們的技術，則必須透過包含 `amazon-ivs-quality-plugin.min.js` 檔案來載入它 (適用於 IVS 播放器的最新版本)：

```
<script src="https://player.live-video.net/1.50.0/amazon-ivs-quality-plugin.min.js"></script>
```

如果您使用 npm，請從 `amazon-ivs-player` 模組匯入 `registerIVSQualityPlugin`：

```
import { registerIVSQualityPlugin } from 'amazon-ivs-player';
```

然後，建立 Video.js 播放器的執行個體之後，就需要下列呼叫才能註冊並啟用它：

```
registerIVSQualityPlugin(videojs); // where videojs is the video.js variable
player.enableIVSQualityPlugin(); // where player is the instance of the videojs player
```

這將建立一個 UI 選單按鈕，允許您選擇串流品質。

### 外掛程式和 TypeScript
<a name="videojs-plugins-typescript"></a>

如果您使用的是 TypeScript，我們的 npm 套件包括您利用我們的外掛程式想要匯入和使用的 `VideoJSQualityPlugin` 類型。外掛程式本質上是 mixins，所以這種類型的界面作為[交集類型](https://www.typescriptlang.org/docs/handbook/advanced-types.html#intersection-types)與 `VideoJSIVSTech` TypeScript 界面搭配使用。

## 內容安全政策
<a name="videojs-content-security-policy"></a>

Amazon IVS Video.js API 設定為可在使用內容安全政策 (CSP) 的頁面上運作。請參閱 [IVS 播放器 SDK：Web 指南](web-content-security-policy.md) 中的「使用內容安全政策」章節。

## 函數
<a name="videojs-functions"></a>

### 播放
<a name="videojs-functions-playback"></a>

Amazon IVS Video.js API 支援 Video.js 架構內部使用所需的界面。用戶端應用程式不太可能需要直接使用這些方法，因為 Video.js 會執行必要的整合，並提供標準界面。但是，如果需要，存取內部 Video.js 和 Amazon IVS 播放器方法的一種方式是使用 Video.js 播放器物件，為該技術獲得所需的物件控點。

若要存取 API，請擷取 Video.js 播放器的執行個體，就像平常一樣：

```
let player = videojs("videoTagId"); //replace videoTagId with your <video> tag’s id
```

然後就可以呼叫該執行個體上的函數。

以下是 Amazon IVS 技術層覆寫的 Video.js 函數的子集。如需完整的 Video.js 函數清單，請參閱 [video.js API 文件](https://docs.videojs.com/player)。


| 函數 | 說明和 Amazon IVS 特定資訊 | 
| --- | --- | 
| `currentTime` |  獲取或設定時間 (以秒為單位從頭開始)。 Amazon IVS：我們不建議設定即時串流的目前時間。  | 
| `dispose` | 刪除播放器執行個體 Amazon IVS：這也會刪除 Amazon IVS 技術後端。  | 
| `持續時間` | 傳回影片的持續時間 (以秒為單位)。 Amazon IVS：對於即時串流，這會傳回 `Infinity`。  | 
| `載入` | 開始載入 `src()` 資料。 Amazon IVS：這是無操作。  | 
| `播放` | 播放透過 `src` 呼叫設定的串流。 Amazon IVS：如果暫停了即時串流，會從最新影格播放即時串流，而不是從暫停的位置繼續播放。  | 
| `playbackRate` | 獲取或設定影片播放速率。1.0 表示正常速度；0.5 表示一半正常速度；2.0 表示兩倍正常速度；依此類推。 Amazon IVS：在即時串流中，get 會傳回 1，並忽略 set。  | 
| `seekable` | 傳回可搜尋的媒體的 `TimeRanges`。 Amazon IVS：對於即時串流，呼叫傳回值 (`TimeRange`) 上的 `end(0)` 會傳回無限。  | 

### Amazon IVS 特定
<a name="videojs-functions-ivs"></a>

Amazon IVS Video.js 技術具有額外的函數，可用於存取 Amazon IVS 功能的特定行為：


| 函數 | 描述 | 
| --- | --- | 
| `getIVSPlayer` |  傳回基礎的 Amazon IVS 播放器執行個體。透過此執行個體可使用完整的 Amazon IVS 播放器 Web API。我們建議您盡可能使用基本 Video.js 播放 API，並且只使用此函數來存取 Amazon IVS 特定功能。您可能需要在 Amazon IVS 播放器執行個體上存取的最常見函數是 `setQuality()` 和 `addEventListener()` / `removeEventListener()`。  | 
| `getIVSEvents` | 傳回保存 Amazon IVS 特定列舉的物件。這用來接聽 Amazon IVS 特定錯誤。如需詳細資訊，請參閱[活動](#videojs-events)及 [錯誤](#videojs-errors)。  | 

## currentTime
<a name="videojs-currenttime"></a>

獲取或設定時間 (以秒為單位從頭開始)。

Amazon IVS：我們不建議設定即時串流的目前時間。

### 簽章
<a name="videojs-currenttime-signatures"></a>

```
currentTime
currentTime(time)
```

### 參數
<a name="videojs-currenttime-parameter"></a>


| 參數 | 類型 | 描述 | 
| --- | --- | --- | 
| `time` | number |  如果 `time` 不存在，則會取得目前時間。如果 `time` 存在，會將影片播放設定為該時間。  | 

### 傳回值
<a name="videojs-currenttime-return"></a>


| 類型 | 描述 | 
| --- | --- | 
| 數字 |  目前的時間，以秒為單位從頭開始。  | 

## dispose
<a name="videojs-dispose"></a>

刪除播放器執行個體。

Amazon IVS：這也會刪除 Amazon IVS 技術後端。

### 簽章
<a name="videojs-dispose-signatures"></a>

```
dispose()
```

### Parameters
<a name="videojs-dispose-parameter"></a>

無

### 傳回值
<a name="videojs-dispose-return"></a>

無

## 持續時間
<a name="videojs-duration"></a>

傳回影片的持續時間 (以秒為單位)。

Amazon IVS：對於即時串流，這會傳回 `Infinity`。

### 簽章
<a name="videojs-duration-signatures"></a>

```
duration()
```

### Parameters
<a name="videojs-duration-parameter"></a>

無

### 傳回值
<a name="videojs-duration-return"></a>


| 類型 | 描述 | 
| --- | --- | 
| 數字 |  串流的持續時間 (以秒為單位)。對於即時串流，此值為 `Infinity`。  | 

## getIVSEvents
<a name="videojs-getivsevents"></a>

傳回保存 Amazon IVS 特定列舉的物件。這用來接聽 Amazon IVS 特定錯誤和事件。如需詳細資訊，請參閱：
+ 本文件中的 [活動](#videojs-events) 和 [錯誤](#videojs-errors)。
+ [Amazon IVS 播放器 SDK：Web 參考](https://aws.github.io/amazon-ivs-player-docs/1.50.0/web/)，可了解關於事件、錯誤類型和錯誤來源的詳細資訊。

### 簽章
<a name="videojs-getivsevents-signatures"></a>

```
getIVSEvents()
```

### Parameters
<a name="videojs-getivsevents-parameter"></a>

無

### 傳回值
<a name="videojs-getgetivsevents-return"></a>


| 類型 | 說明 | 
| --- | --- | 
| `object` |  帶有 `PlayerEventType`、`PlayerState` 以及 `ErrorType` 金鑰的物件，這些金鑰映射到其關聯的列舉。  | 

## getIVSPlayer
<a name="videojs-getivsplayer"></a>

傳回基礎的 Amazon IVS 播放器執行個體。透過此執行個體可使用完整的 Amazon IVS 播放器 Web API。我們建議您盡可能使用基本 Video.js 播放 API，並且只使用此函數來存取 Amazon IVS 特定功能。您可能需要在 Amazon IVS 播放器執行個體上存取的最常見函數是 `setQuality()` 和 `addEventListener()` / `removeEventListener()`。

### 簽章
<a name="videojs-getivsplayer-signatures"></a>

```
getIVSPlayer()
```

### Parameters
<a name="videojs-getivsplayer-parameter"></a>

無

### 傳回值
<a name="videojs-getivsplayer-return"></a>


| 類型 | 描述 | 
| --- | --- | 
| `MediaPlayer` |  播放器的已建立的執行個體。  | 

## 載入
<a name="videojs-load"></a>

開始載入 `src()` 資料。

Amazon IVS：這是無操作。

### 簽章
<a name="videojs-load-signatures"></a>

```
load()
```

### Parameters
<a name="videojs-load-parameter"></a>

無

### 傳回值
<a name="videojs-load-return"></a>

無

## 播放
<a name="videojs-play"></a>

播放透過 `src` 呼叫設定的串流。

Amazon IVS：如果暫停了即時串流，會從最新影格播放即時串流，而不是從暫停的位置繼續播放。

### 簽章
<a name="videojs-play-signatures"></a>

```
play()
```

### Parameters
<a name="videojs-play-parameter"></a>

無

### 傳回值
<a name="videojs-play-return"></a>

無

## playbackRate
<a name="videojs-playbackrate"></a>

獲取或設定影片播放速率。1.0 表示正常速度；0.5 表示一半正常速度；2.0 表示兩倍正常速度；依此類推。

Amazon IVS：在即時串流中，get 會傳回 1，並忽略 set。

### 簽章
<a name="videojs-playbackrate-signatures"></a>

```
playbackRate
playbackRate(rate)
```

### 參數
<a name="videojs-playbackrate-parameter"></a>


| 參數 | 類型 | 描述 | 
| --- | --- | --- | 
| `rate` | 數字 |  播放速率。有效值：範圍為 [0.25, 2.0]。  | 

### 傳回值
<a name="videojs-playbackrate-return"></a>


| 類型 | 描述 | 
| --- | --- | 
| 數字 |  播放速率。  | 

## seekable
<a name="videojs-seekable"></a>

傳回可搜尋的媒體的 `TimeRanges`。

Amazon IVS：對於即時串流，呼叫傳回值 (`TimeRange`) 上的 `end(0)` 會傳回無限。

### 簽章
<a name="videojs-seekable-signatures"></a>

```
seekable()
```

### 參數
<a name="videojs-seekable-parameter"></a>

無

### 傳回值
<a name="videojs-seekable-return"></a>


| 類型 | 描述 | 
| --- | --- | 
| `TimeRange` |  可供尋求的媒體的時間範圍。  | 