Brightcove ウェブ & スマートTV SDK の使用開始

このセクションでは、Brightcove ウェブ & スマートTV SDK をセットアップして使い始めるために必要な初期手順について説明します。

SDKのインストール

Brightcove ウェブ & スマートTV SDK は、npm を使用して、または Brightcove CDN から直接インストールすることが出来ます。


npmの使用:

コマンドライン インターフェイスを開き、以下のコマンドを実行してSDKをインストールします:

npm install @brightcove/web-sdk


インストール後、お好みのモジュール システムを使用してSDKをインポートすることが出来ます:

CommonJS

const { Player } = require('@brightcove/web-sdk');

ES Module

import { Player } from '@brightcove/web-sdk';

CDNの使用

または、CDNからSDKを使用したい場合は、HTMLファイルに以下のスクリプト タグのいずれかを含めます:

CommonJS

<script src="https://players.brightcove.net/sdk/v1/web-sdk/playback/index.cjs.js"></script>

ES Module

<script type="module" src="https://players.brightcove.net/sdk/v1/web-sdk/playback/index.es.js"></script>

IIFE (Immediately Invoked Function Expression)

<script src="https://players.brightcove.net/sdk/v1/web-sdk/playback/index.iife.min.js"></script>

バージョンの指定

CDN URLでバージョンを指定するには:

  • メジャー バージョンに最新のパッチを含めるには v{major} を使用します。
  • v{major}.{minor} を使用すると、マイナーバージョンに最新のパッチを含めることができます。
  • 特定のバージョンを含めるには v{major}.{minor}.{patch} を使用します。


<script src="https://players.brightcove.net/sdk/v1/web-sdk/playback/index.iife.min.js"></script>
 <script src="https://players.brightcove.net/sdk/v1.1/web-sdk/playback/index.iife.min.js"></script>
 <script src="https://players.brightcove.net/sdk/v1.1.1/web-sdk/playback/index.iife.min.js"></script>

プレーヤーのインポート

再生のみ

再生機能のみを必要とし、追加のUI機能を必要としないアプリケーションの場合:

import { Player } from '@brightcove/web-sdk/playback';
      

UIによる再生

UIとともに再生機能を必要とするアプリケーションでは、以下のプレーヤー エントリ ポイントを使用します:

import { Player } from '@brightcove/web-sdk/ui';
 import '@brightcove/web-sdk/ui/styles';
        

プレーヤーの初期化

SDK をインストールしたら、アプリケーションに埋め込むメディア プレーヤーを作成できます。 以下の手順に従って、Brightcove ウェブ & スマートTV SDK を使用して基本的な動画プレーヤーをセットアップします。

  1. プレーヤーの初期化: Brightcove アカウントの詳細でプレーヤーをセットアップします:

    const player = new Player({
      // Account ID parameter is required to initialize a player
      accountId: '<ACCOUNT_ID>',
     });
    
  2. プレーヤーをマウント ルート(ページ内の DOM 要素)にアタッチします:

    const root = document.querySelector('#player-mount-root');
     player.attach(root);
            
  3. プレーヤー設定のパラメータを動的に更新します:

    player.updateConfiguration({
      brightcove: {
        policyKey: '<POLICY_KEY>'
      },
      ui: {
        language: 'en',
        playsinline: false
      }
    });
                        

メディアの読み込み

Video Cloud VOD

以下の手順でメディアをプロジェクトにロードします:

  1. プレーヤーの初期化: プレーヤーの新しいインスタンスを作成します。

    const player = new Player({accountId: '<ACCOUNT_ID>'});
    
    player.updateConfiguration({
      brightcove: {
        policyKey: '<POLICY_KEY>'
      },
    });
          
  2. ビデオを読み込む関数の作成: 動画IDを使用してビデオ メタデータをロードする非同期関数を定義します。

    async function loadVideo(videoId) {
    // you can abort a request by calling abort()
        const { abort, promise } = player.getVideoByIdFromPlaybackApi({ videoId: '<VIDEO_ID>' });
    
        try {
            let brightcoveVideoModel = await promise;
    
            player.loadBrightcoveVideoModel(brightcoveVideoModel);
        } catch (error) {
            console.error('Error loading video:', error);
        }
    }
    
  3. 特定の動画 ID を指定して loadVideo 関数を呼び出し、動画をプレーヤーにロードします。

    loadVideo('<VIDEO_ID>');
    
    

Video Cloud プレイリスト

以下の手順に従って、プレイリストをプロジェクトに統合してください:

  1. プレーヤーの初期化: プレーヤーの新しいインスタンスを作成します。

    const player = new Player({accountId: '<ACCOUNT_ID>'});
    
    player.updateConfiguration({
      brightcove: {
        policyKey: '<POLICY_KEY>'
      },
    });
  2. プレイリストをロードする関数の作成: プレイリストIDを使用してプレイリストをロードする非同期関数を定義します。

    async function loadPlaylist(playlistId) {
    // you can abort request by calling abort()
        const { abort, promise } = player.getPlaylistByIdFromPlaybackApi({ playlistId });
    
        try {
            const playlistModel = await promise;
            const playlistManager = player.getPlaylistManager();
    
            // Create playlist object
            const playlist = playlistManager.createPlaylistFromBrightcoveVideoModels(playlistModel.videos);
    
            // Pass the playlist object to the PlaylistManager
            playlistManager.setPlaylist(playlist);
    
            // Load the first playlist item
            player.loadBrightcoveVideoModel(playlist.getCurrentItem());
        } catch (error) {
            console.error('Error loading playlist:', error);
        }
    }
    
  3. 特定のプレイリストIDで loadPlaylist 関数を呼び出し、プレイリストをプレーヤーにロードします。

    loadPlaylist('<PLAYLIST_ID>');
    
    
    
  4. 次の項目に進む関数を作成します。

    function advanceToNextItem() {
      const playlistManager = player.getPlaylistManager();
      const playlist = playlistManager.getPlaylist();
    
      // Advance to the next item
      playlist.moveToNext();
      player.loadBrightcoveVideoModel(playlist.getCurrentItem());
    }
    
    advanceToNextItem();

リモート ソース

以下の手順に従って、リモート ソースをプロジェクトに統合してください:

  1. プレーヤーの初期化: Playerの新しいインスタンスを作成します。

    const player = new Player({
    // accountId is still required even when loading remote media
        accountId: '<ACCOUNT_ID>',
    });
  2. リモート ビデオ ソースの定義: リモート ビデオ ソースのURLを定義します。

    const source = {
        url: 'https:'
    };
    
  3. リモートビデオの読み込み: リモート ビデオ ソースをロードします。

    player.loadRemoteVideo(source);  
    

IntegrationsManager

IntegrationsManager クラスは、ピンニング、サムネイル、IMA広告など、SDK内のさまざまな統合を管理するために設計されています。 こちらを参照して下さい。これにより、さまざまな統合ファクトリーの登録、登録解除、およびアクセスが可能になり、動画プレーヤーを追加機能で強化する柔軟な方法が提供されます。

使用例

以下は、IntegrationsManager を使用して統合を登録し、プレーヤー インスタンス内で使用する方法の例です。

  1. 必要なモジュールのインポート: SDKから必要なモジュールをインポートします。

    import { Player, IntegrationsManager } from '@brightcove/web-sdk';
     import { PinningIntegrationFactory } from '@brightcove/web-sdk/integrations/pinning';
     import { ThumbnailsIntegrationFactory } from '@brightcove/web-sdk/integrations/thumbnails';
     import '@brightcove/web-sdk/ui/styles';
     import '@brightcove/web-sdk/integrations/pinning/styles';
     import '@brightcove/web-sdk/integrations/thumbnails/styles';
  2. インテグレーションの登録: プレーヤーのインスタンスを作成する前に、統合機能を登録します。

    IntegrationsManager.registerPinningIntegrationFactory(PinningIntegrationFactory);
     IntegrationsManager.registerThumbnailsIntegrationFactory(ThumbnailsIntegrationFactory);
    
  3. 統合を使用したプレーヤーの初期化: プレーヤーの新しいインスタンスを作成し、それらの構成オプションで統合を含めます。

    const player = new Player({accountId: '<ACCOUNT_ID>'});
    
    player.updateConfiguration({
    // Integrations can have their own configuration options
      integrations: {
        pinning: {
          posX: 'left',
          posY: 'top',
          closeable: true
        }
      }
    });
    
  4. プレーヤーを DOM にアタッチ: プレーヤーをアタッチする DOM 要素を指定します。

    const root = document.querySelector('#player-mount-root');
     player.attach(root);          
    
  5. 個々の統合へのアクセス: IntegrationsManager を使用して、特定の統合にアクセスし、制御します。

    const { pinningIntegration } = player.getIntegrationsManager();         
    
  6. 統合が提供する統合固有の操作の実行.

    pinningIntegration.togglePinning();       
    

NetworkingManager

NetworkingManager は、SDKのリクエスト/レスポンス サイクルに接続するために使用され、プレーヤーが行うネットワーク リクエストとレスポンスをインターセプトして操作できるため、さまざまなカスタム動作や最適化が可能になります。

NetworkingManager は主に2つの機能を提供します:

  • リクエスト インターセプター: サーバーに送信される前に、送信リクエストをインターセプトして修正することができます。

  • レスポンス インターセプター: プレーヤーによって処理される前に、入力されたレスポンスをインターセプトして変更することができます。

NetworkingManager を使用するには、以下の手順に従ってください:

  1. NetworkingManagerの初期化

    const networkingManager = player.getNetworkingManager();      
          
  2. リクエスト インターセプターの追加: リクエスト インターセプターを追加して、送信リクエストを変更したりログに記録したりします。

    networkingManager.addRequestInterceptor(Player.RequestType.HlsPlaylist, (request) => {
        console.log('HLS Playlist request interceptor', request);
        return request;
    });      
          
  3. レスポンス インターセプターの追加: レスポンス インターセプターを追加して、受信したレスポンスを変更したりログに記録したりします。

    networkingManager.addResponseInterceptor(Player.RequestType.HlsPlaylist, (response) => {
        console.log('HLS Playlist response interceptor', response);
        return response;
    });   
          

UiManager

UiManager は、UI Componentsを作成し、管理します。すべてのSDK UI ComponentはUiComponent クラスを継承しており、このクラスには 広範なAPIが用意されています。

コンポーネントに渡すことができるオプションの基本リストについては、UiComponentDependencies インターフェースを参照してください。


デフォルト コンポーネントの上書き

アプリケーションのニーズに合わせて、既存のコンポーネントを変更することが出来ます。

  1. 必要なモジュールのインポート

    import { UiManager, BigPlayButtonUiComponent, UiComponentType } from '@brightcove/web-sdk/ui';
          
  2. カスタム UIコンポーネントの作成

    class CustomPlayButton extends BigPlayButtonUiComponent {
      // ... custom play button code
    }
          
  3. デフォルト コンポーネントのオーバーライド: デフォルトの BigPlayButtonCustomPlayButton でオーバーライドします。

    UiManager.overrideDefaultComponent(UiComponentType.BigPlayButton, CustomPlayButton);
          

カスタム コンポーネント

BaseUiComponent クラスを使用することで、独自の機能を追加したり、アプリケーションの要件に合わせてプレーヤーのインターフェースを調整することが出来ます。

以下の手順でカスタム コンポーネントを適用します:

  1. BaseUiComponent のインポート:

    import { BaseUiComponent } from '@brightcove/web-sdk/ui';
  2. UI Manager と Player Componentの初期化:

    
    const uiManager = player.getUiManager();
     const playerComponent = uiManager.getPlayerContainerUiComponent();
    
  3. DOM要素の作成:

    const customElement = document.createElement('div');
    
  4. 新しいカスタム UIコンポーネントの作成:

    const customComponent = new BaseUiComponent({
       // Add a unique name
       name: 'CustomUiComponent',
       componentOptions: {
         // Pass the custom DOM element as an option
         el: customElement,
       },
     });
          
  5. カスタム コンポーネントをプレーヤーに追加します:

    playerComponent.addChild(customComponent);
  6. (オプション) カスタム コンポーネントを別のコンポーネントに追加: (例えば、コントロールバー)

    const controlBarComponent = playerComponent.getChild('controlBar');
     controlBarComponent.addChild(customComponent);
            

PlaylistManager

The PlaylistManager は、プレイリストの作成、現在の再生中のアイテムの管理、プレイリスト アイテムのナビゲートのためのメソッドを提供します。

To use the PlaylistManager を使用するには、以下の手順に従ってください:

  1. PlaylistManager の初期化:

    const playlistManager = player.getPlaylistManager();
  2. Playback API レスポンスからプレイリストの作成:

    const videoCloudPlaylist = playlistManager.createPlaylistFromBrightcoveVideoModels(
      /* Array<BrightcoveVideoModel> */
    );
  3. リモートソースからプレイリストの作成: また、リモート メディア ソースを使用してプレイリストを作成することもできます。

    const remotePlaylist = playlistManager.createPlaylistFromRemoteSources(
       /* Array<Source> */
     );
  4. PlaylistManager にプレイリストを設定する:

    playlistManager.setPlaylist(/* videoCloudPlaylist | remotePlaylist */);
          
  5. 最初のプレイリスト アイテムのロード:

    player.loadBrightcoveVideoModel(playlist.getCurrentItem());
  6. プレイリストのナビゲート: プレイリストの項目をナビゲートするには、次の方法を使用します。

    • 次の項目への移動:

      playlist.moveToNext();
                
    • 前の項目への移動:

      playlist.moveToPrevious();
                
    • 特定の項目への移動:

      playlist.moveTo(/* index number */);
                
    • プレイリストのシャッフル:

      playlist.shuffle();
                
  7. 新しい現在の項目の読み込み: プレイリストで新しく選択された項目をロードします。

    player.loadBrightcoveVideoModel(playlist.getCurrentItem());
          

イベント

イベントを処理し、イベント リスナーを追加または削除するには、以下の手順に従います:

  1. イベントの最初の発信の処理: イベントの最初の発生だけを処理したい場合は、once メソッドを使用します。

    player.once(Player.Event.PlayerPlaying, (event) => {
        console.log('PlayerPlaying event: ', event);
    });
  2. イベントのすべての発信の処理: イベントのすべての発信を処理するには、addEventListener メソッドを使用します。 以下は、PlayerQualityLevelsChanged イベントを処理する例です:

    // Define the event handler function
    const handlePlayerQualityLevelsChanged = (event) => {
        console.log('PlayerQualityLevelsChanged event: ', event);
    };
    
    // Handle every emission of the PlayerQualityLevelsChanged event
    player.addEventListener(Player.Event.PlayerQualityLevelsChanged, handlePlayerQualityLevelsChanged);
    
  3. 特定のイベント リスナーの削除: 特定のイベント・リスナーを削除するには、removeEventListener メソッドを使用します。

    
    player.removeEventListener(Player.Event.PlayerQualityLevelsChanged, handlePlayerQualityLevelsChanged);
          
    
  4. 特定のイベントのすべてのリスナーの削除: 特定のイベントのすべてのリスナーを削除するには、removeAllEventListenersForType メソッドを使用します。

    
    player.removeAllEventListenersForType(Player.Event.PlayerQualityLevelsChanged);      
    
  5. すべてのイベント リスナーの削除: すべてのイベントのイベント・リスナーを削除するには、removeAllEventListeners メソッドを使用します:

    
    player.removeAllEventListeners();   
    

エラー

エラーイベントをリッスンし、プレーヤーの現在のエラー状態をチェックするには、以下の手順に従います:

  1. エラーイベントのリッスン:

    this.player.addEventListener(Player.Event.PlayerError, (event) => {
      const error = event.error;
    
      console.log('An error occurred:', error);
    });

スタイリング

UI機能に CSSを適用するには、以下の手順に従ってください:

  1. Player クラスのインポート:

    import Player from '@brightcove/web-sdk/ui';
  2. Player クラスのCSSのインポート:

    import '@brightcove/web-sdk/ui/styles';
  3. 統合固有のスタイルのインポート: その統合に固有のスタイルを以下からインポートする必要があります。
     @brightcove/web-sdk/integrations/<integration-name>/styles
    pinning のような特定の機能と統合する場合は、次のパターンに従います:

    import '@brightcove/web-sdk/integrations/pinning/styles';

CSS 変数

@brightcove/web-sdk/ui/styles の CSS には、プレーヤーのスタイリングの特定の側面を制御するプリセット CSS 変数のセットが付属しています。 これらの CSS 変数は、値をリセットすることでオーバーライドできます。

.bc-sdk {
     /* Override the default control bar color */
     --bc-sdk-control-bar-color: red;
 }

以下は利用可能な CSS変数とそのデフォルト値です:

変数 デフォルト値 説明
--bc-sdk-control-color #fff ボタンとテキストの色。
--bc-sdk-progress-color #80888c プログレスバーの色。
--bc-sdk-control-bar-transparency 0.45 コントロールバーと大きな再生ボタンの背景色の透明度。
--bc-sdk-control-bar-color rgba(0, 0, 0, var(--bc-sdk-control-bar-transparency)) コントロールバーと大きな再生ボタンの背景色。
--bc-sdk-big-play-button--border none 大きな再生ボタンの境界線。
--bc-sdk-big-play-button--width 2em 大きな再生ボタンの幅。
--bc-sdk-big-play-button--height 2em 大きな再生ボタンの高さ。

空間ナビゲーション

spatialNavigation は、リモコンの矢印キーを使ってプレーヤー内のインタラクティブ要素をナビゲートできるようにすることで、スマートTVデバイスでのユーザー体験とアクセシビリティを向上させます。

空間ナビゲーションの有効化

  1. 必要なPlayerクラスと関連するスタイルをインポートします

    import { Player } from '@brightcove/web-sdk/ui';
     import '@brightcove/web-sdk/styles';
  2. Spatial Navigation のUI対応プレーヤーを初期化します。

    const player = new Player({ accountId: '<ACCOUNT_ID>' });
    
     player.updateConfiguration({
       ui: {
         spatialNavigation: {
           // Enable Spatial Navigation
           enabled: true,
     
           // Enable horizontal navigation seek functionality, using right and left RCU arrow keys.
           horizontalSeek: true,
         }
       }
     });
  3. Spatial Navigation Managerの取得.

    const spatialNavigationManager = player.getSpatialNavigationManager();
  4. Spatial Navigation イベントの管理SpatialNavigationManager では、キーダウン イベントのリッスンの 開始一時停止再開停止 ができます。

    // Start listening for keydown events
    spatialNavigationManager.start();
    
    // Pause listening for keydown events without removing listeners
    spatialNavigationManager.pause();
    
    // Resume listening for keydown events after pausing
    spatialNavigationManager.resume();
    
    // Disable Spatial Navigation by removing all keydown listeners
    spatialNavigationManager.stop();

空間ナビゲーション イベント

ウェブ & スマートTV SDKは、空間ナビゲーションのために2つの重要なイベントを提供します。:

  1. Player.Event.SpatialNavigation.EndOfFocusableComponents: プレーヤー インタフェース内で、指定された方向に利用可能なフォーカス可能なコンポーネントがなくなったときに発生します。

  2. Player.Event.SpatialNavigation.FocusableComponentsChanged: フォーカス可能なコンポーネントのリストが変更されたときに発生します。

ローカライゼーション

ローカライゼーションは、多様でグローバルな視聴者のニーズを満たすユーザーフレンドリーな動画プレーヤーを開発する上で非常に重要な側面になります。

複数の言語とローカライゼーションのサポートは、以下のように含めることができます:

  1. 一般的なプレーヤーのローカライズのインポート:

    import mainJapanese from '@brightcove/web-sdk/ui/languagePacks/ja';
          
  2. 統合固有のローカライゼーションのインポート:

    import ssaiJapanese from '@brightcove/web-sdk/integrations/ssai/languagePacks/ja';
          
  3. UIマネージャーの初期化:

    const uiManager = player.getUiManager();
          
  4. UIマネージャーに言語パックの追加: UIマネージャーの addLanguagePack メソッドを使用して、インポートした言語パックを追加します:

    uiManager.addLanguagePack('ja', mainJapanese);
     uiManager.addLanguagePack('ja', ssaiJapanese);
          

実装例

Brightcove ウェブ & スマートTV SDK をすぐに使いこなすために、いくつかのサンプル実装を提供しています。 これらのサンプルは、さまざまな機能や使用例を示しており、SDK の効果的な使用方法を実践的に学ぶことができます。

以下のリンクから、さまざまなサンプル実装をご覧ください: