サポート問い合わせ先| システムステータス
ページコンテンツ

    Android用ネイティブSDKを使用してスニペットをコーディングする

    このトピックでは、SDK を使用して開発する際のリファレンスとして役立つコードスニペットのコレクションを紹介します。より詳細な解決策については、を参照してください。 Androidプレーヤーのサンプル

    目次

    広告

    アナリティクス

    キャプション

    概念

    コンテンツセキュリティ (DRM)

    ライブストリーム

    再生

    プレーヤコントロール

    プレイリスト

    動画コンテンツ

    Android TV のコントロールをカスタマイズする

    デバイスまたは Android TV のコントロールバーにボタンを追加できます。以下の手順では、Android TVのコントロールバーにフルスクリーンボタンを追加する手順を説明します。

    1. カスタマイズコントロールサンプルアプリを開きます。これを出発点として使用します。プレーヤーコントロールのカスタマイズの詳細については、サンプルアプリの README ファイルを参照してください。
    2. Androidスタジオで res/layout/land/my_media_controller.xml ファイルを開きます。
    3. をコピーしますButtonの要素full_screenボタン。コードは次のようになります。
      <Button
      style="@style/BorderlessButton"
      android:id="@id/full_screen"
      android:padding="4dp"
      android:layout_gravity="center_vertical"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:visibility="visible"
      android:text="@string/brightcove_controls_enter_full_screen"/>
    4. Androidスタジオで res/layout/my_tv_media_controller.xml ファイルを開きます。
    5. Buttonコピーした要素をこのレイアウトファイルに貼り付けます。要素の位置によって、コントロールバー内での位置が決定されます。
    6. res/layout/my_tv_media_controller.xml ファイルの先頭までスクロールします。style プロパティがに設定されていることを確認します@style/BrightcoveControlBar.TV.Custom。コードは次のようになります。
      <?xml version="1.0" encoding="utf-8"?>
      <com.brightcove.player.mediacontroller.BrightcoveControlBar
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:bmc="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      tools:ignore="Overdraw, InconsistentLayout"
      android:id="@+id/brightcove_control_bar"
      android:background="@color/bmc_background"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="8dp"
      
      android:orientation="horizontal"
      android:layout_gravity="bottom"
          style="@style/BrightcoveControlBar.TV.Custom">
    7. Androidスタジオで res/values/styles.xml ファイルを開きます。
    8. stylenameBrightcoveControlBar.TV.Custom値がの要素に、itemフルスクリーンボタンの要素を選択し、trueそれをに設定して表示します。
      <style name="BrightcoveControlBar.TV.Custom">
      <item name="brightcove_vr_mode">false</item>
        <item name="brightcove_full_screen">true</item>
      </style>
    9. それだAndroid TV の物理デバイスまたは仮想デバイスでサンプルアプリを実行します。コントロールバーにフルスクリーンボタンが表示されるはずです。
      Fullscreen button
      全画面表示ボタン

    フルスクリーンモード

    コードを使用してフルスクリーンモードを管理できます。

    ライブストリームの期間を取得する

    ライブストリームの期間を取得するには、を使用しますMAX_POSITION。これにより、ライブストリームのシーク可能な最大位置が得られます(つまり、スクロールバーをドラッグできる最も遠い位置)。コードは次のようになります。

    brightcoveVideoView.getEventEmitter().on(EventType.PROGRESS, new EventListener() {
      @Override
      public void processEvent(Event event) {
      int duration = (int) event.properties.get(Event.MAX_POSITION);
      }
    });

    ネットワーク帯域幅の検出

    ダウンロードを操作する場合など、アプリ内のネットワーク帯域幅を検出する必要があるユースケースがあります。

    帯域幅を検出するために、Android用ネイティブSDKはBandwidthMeter ExoPlayerによって提供されるクラス。私たちのPlayerBandwidthMeterクラスはBandwidthMeterクラスを提供し、getBitrateEstimate推定ビットレートを返すメソッド。

    詳細については、以下を参照してください。

    下記がその例です。

    ExoPlayerVideoDisplayComponent exoPlayer = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
    exoPlayer.getBandwidthMeter().addEventListener(myHandler, new BandwidthMeter.EventListener() {@
    	Override public void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate) {}
    });

    ExoPlayer インスタンスの取得

    Brightcove ネイティブ SDK では公開されていないプロパティを変更するために ExoPlayer オブジェクトを取得する必要がある場合があります。このオブジェクトのインスタンスは、ビデオの設定後に作成されます。だから、DID_SET_VIDEOあなたはイベントを待つ必要があります。

    ExoPlayer インスタンスを取得するには、次の操作を行います。

    // Get the ExoPlayer instance
    eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() {
      @Override
      public void processEvent(Event event) {
        VideoDisplayComponent videoDisplayComponent = brightcoveVideoView.getVideoDisplay();
        if (videoDisplayComponent instanceof ExoPlayerVideoDisplayComponent) {
          // Get ExoPlayer
          ExoPlayer exoPlayer = ((ExoPlayerVideoDisplayComponent) videoDisplayComponent).getExoPlayer();
          if (exoPlayer instanceof SimpleExoPlayer) {
            // Get SimpleExoPlayer
            SimpleExoPlayer simpleExoPlayer = (SimpleExoPlayer) exoPlayer;
            Log.v(TAG, "onDID_SET_VIDEO: ExoPlayer = " + simpleExoPlayer);
          }
        }
      }
    });

    ExoPlayer AudioAttributeのプロパティの変更例については、「ExoPlayer インスタンスで AudioAttributes を設定する」フォーラム投稿を参照してください。

    サムネイル画像の URL を取得する

    Brightcove ライブラリのサムネイルまたは動画の静止画像を使用することもできます。画像の URL を取得するには、次のコードを使用します。

    エッジカタログ(com.brightcove.Player.edge.calog)をご利用の Video Cloud のお客様は、次のようなサムネイル URL を取得できます。

    String thumbnailUrl = video.getProperties().get("thumbnail").toString();

    サムネイル画像が小さすぎる場合は、代わりにビデオの静止画像を取得できます。

    String videoStillUrl = video.getProperties().get("stillImageUri").toString();

    グーグルアナリティクス

    Brightcoveプレーヤーとカタログクラスを使用している場合、動画分析は自動的に収集され、Video Cloud Analytics モジュールに表示されます。その他の指標については、Google アナリティクスをアプリに追加できます。

    Google アナリティクスをアプリと統合するには、次の手順に従います。

    1. Google サービスプラグインをプロジェクトに追加します。
    2. Google 設定ファイルを取得し、プロジェクトに追加します。
    3. アプリケーションを拡張し、アプリケーションのトラッカーを返すヘルパーメソッドを提供します。これは、 GoogleサービスのAnalyticsApplicsに似ているはずです
    4. BrightCovePlayer を拡張する別のクラスで、共有トラッカーインスタンスを取得します。
      // Obtain the shared Tracker instance
      AnalyticsApplication application = (AnalyticsApplication) getApplication();
      tracker = application.getDefaultTracker();
    5. 適切なメソッドをオーバーライドして、画面の変更を記録したり、カスタムイベントを送信して追跡したりできます。

    詳細な手順については、Google のドキュメントで Android アプリにアナリティクスを追加してください

    リモートビデオとポスター画像の読み込み

    Brightcove Player は、リモートサーバーの動画アセットを使用するカスタマーだけです。リモートサーバー上に存在するビデオとポスター画像をロードするには、次の手順に従います。

    1. onCreate()メソッドでは、ビデオビューを定義した後、リモートサーバーでホストされているビデオからビデオオブジェクトを作成します。使用するビデオの種類に合わせて、を設定します。DeliveryType

      Video video = Video.createVideo("https://learning-services-media.brightcove.com/videos/hls/greatblueheron/greatblueheron.m3u8",
        DeliveryType.HLS);
    2. ビデオの再生を開始する前に、ポスター画像として使用するリモート画像をロードします。

      try {
        java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png");
        video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage);
      } catch (URISyntaxException e) {
        e.printStackTrace();
      }
    3. ビデオをビューに追加し、ビデオの再生を開始します。

      brightcoveVideoView.add(video);
      brightcoveVideoView.start();
    4. onCreate()メソッドが次のように表示されることを確認します。

      @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
      
          // Optional: For Brightcove Player customers to register their apps
          Analytics analytics = brightcoveVideoView.getAnalytics();
          analytics.setAccount("your account Id");
      
          // Define a video from a remote server
          Video video = Video.createVideo("https://learning-services-media.brightcove.com/videos/hls/greatblueheron/greatblueheron.m3u8", DeliveryType.HLS);
      
          // Load a remote poster image
          try {
              java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png");
              video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage);
          } catch (URISyntaxException e) {
              e.printStackTrace();
          }
      
          // Add video to the view
          brightcoveVideoView.add(video);
          // Start video playback
          brightcoveVideoView.start();
        }

    DRM コンテンツを手動で追加する

    Brightcove Player のお客様は、DRM で保護されたコンテンツを自分のサーバーで使用することができます。DRM コンテンツは、次のように手動でロードできます。

    import com.brightcove.player.display.WidevineMediaDrmCallback;
    
    Video video = Video.createVideo("https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd");
    video.getProperties().put(WidevineMediaDrmCallback.DEFAULT_URL, "https://proxy.uat.widevine.com/proxy?video_id=&provider=widevine_test");
    brightcoveVideoView.add(video);
    brightcoveVideoView.start();

    メソッド:同期または非同期?

    Android用のネイティブプレーヤーSDKにある非同期メソッドの一部を次に示します。

    • ザ・start()seekTo()そしてstopPlayback()メソッドは、システム内の他のコンポーネントが処理するイベントを発行するため、非同期です。
    • clear()このメソッドは、リストの更新に関して同期的ですが、現在のビデオのアンロードに関して非同期です。

    プレイヤーをミュート/ミュート解除する

    プログラムでプレーヤーをミュートまたはミュート解除できます。Brightcoveでは、可能な限り BrightCoveExoPlayerVideoView を使用することをお勧めします。

    BrightCoveExoPlayerVideoView

    BrightCoveExoPlayerVideoView を使用する場合、次の操作を実行して、プログラムでプレーヤーをミュートまたはミュート解除できます。

    float volume = 100F;
    ...
    brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
      @Override
      public void processEvent(Event event) {
        setMute(true);
        brightcoveVideoView.start();
      }
    });
    ...
    private void setMute(boolean mute) {
      volume = mute ? 0F : 100F;
      Map<string, Object> properties = new HashMap<>();
      properties.put(Event.VOLUME, volume);
      brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
    }

    ブライトCoveVideoView

    を使用する必要がある場合BrightcoveVideoView、Androidを使用しますMediaPlayer、次のコードを使用して、プログラムでプレーヤーをミュートまたはミュート解除できます。

    float volume = 1F;
    ...
    brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
      @Override
      public void processEvent(Event event) {
        setMute(true);
        brightcoveVideoView.start();
      }
    });
    ...
    private void setMute(boolean mute) {
      volume = mute ? 0F : 1F;
      Map<String, Object> properties = new HashMap<>();
      properties.put(Event.LEFT_VOLUME, volume);
      properties.put(Event.RIGHT_VOLUME, volume);
      brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
    }

    DRMでオフライン再生

    オフライン再生用にダウンロードされた動画の場合は、通知領域にもダウンロード状態が表示されます。通知のタイトルは、ビデオタイトルに設定されます。ダウンロードが一時停止またはキャンセルされた場合、通知は削除されます。

    ダウンロード通知ステータス
    ダウンロードステータス 通知内容テキスト 通知アイコン
    ダウンロード中 R.string.odrm_download_running -これはデフォルトで「ダウンロード中…」です

    完了率を示す進行状況バーが表示されます。
    プラットフォームのデフォルトのアニメーション「ダウンロード」アイコン- android.R.drawable.stat_sys_download
    再試行 R.string.odrm_download_waiting_retry -デフォルトで「再試行待ち...」  
    失敗 R.string.odrm_download_failed -これは「失敗!」デフォルトで  
    完了 R.string.odrm_download_complete -これはデフォルトで「保存済み」です プラットフォームのデフォルトの静的な「ダウンロード済み」アイコン- android.R.drawable.stat_sys_download_done

    ステータスが [再試行] または [失敗] の場合、通知サブテキストはエラータイプに基づいて適切なリソースに設定されます。ここに完全なリストがあります:

    • R.string.odrm_error_none
    • R.string.odrm_error_cannot_resume
    • R.string.odrm_error_device_not_found
    • R.string.odrm_error_file_already_exists
    • R.string.odrm_error_file_error
    • R.string.odrm_error_http_data_error
    • R.string.odrm_error_insufficient_space
    • R.string.odrm_error_too_many_redirects
    • R.string.odrm_error_unhandled_http_code
    • R.string.odrm_error_unknown

    再生 API を使用したページング

    再生 API から Video Cloud コンテンツを取得するときに、プレイリストのページングを実装できます。

    プレイリストの一連の動画をページに移動するには、次のリクエスト URL パラメータを使用します。

    • limit -再生APIから返す動画の数を定義します
    • offset -再生APIから再生リストでスキップする動画の数を設定します

    クエリパラメータは、キーと値のペアとして、Mapオブジェクトとして Catalog メソッドに渡されます。この例では、再生リスト内の 10 番目の動画から 6 つの動画を返します。

    Map<String, String> queryParameters = new HashMap<>();
    queryParameters.put("limit", "6");
    queryParameters.put("offset", "9");
    
    Catalog catalog = new Catalog(eventEmitter, "myAccount", "myPolicy");
    catalog.findPlaylistByID("myPlaylistId", null, queryParameters, myListener);

    ローカル動画を再生する

    ローカルに保存されたMP4ビデオを再生する場合は、アプリケーションアセットフォルダに保存する必要があります。

    Uri video = Uri.parse("file:///android_asset/path/to/video.mp4");
    brightcoveVideoView.add(Video.createVideo(video.toString()));
    brightcoveVideoView.start();

    プレーヤーコントロールを底に配置する

    デフォルトでは、プレーヤーコントロールバーは次に示すように、ビデオの真下に配置されます。

    Player controls under video
    ビデオの下のプレーヤーコントロール

    また、プレーヤーコントロールバーをビデオビューの下部に配置することもできます。コントロールはの一部であるためBrightcoveVideoView、高さをに設定するとmatch_parent、ビューは画面全体を覆います。コントロールがビューの下部に表示される場合、ビデオはビューの中央に残ります。

    Player controls bottom
    プレーヤーはビデオビューの下部をコントロールします

    これを行うには2つの方法があります。最初のアプローチは次のとおりです。

    1. プロジェクトの main/res/values/style.xml ファイルを開きます。
    2. 次の XML コードを追加します。

      <style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
        <item name="brightcove_align">false</item>
      </style>

    または、 MainActivity.java ファイル内のコードを次のように使用できます。

    1. プロジェクトの MainActivity.java ファイルを開きます。
    2. 次に示すように、イベントエミッタを取得した後:

      EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();

      次のイベントリスナーとコードを追加します。コントロールバーが作成されたことを確認するために、DID_SET_VIDEOイベントの後まで待っています。

      eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() {
        @Override
        public void processEvent(Event event) {
          BrightcoveControlBar brightcoveControlBar = brightcoveVideoView.getBrightcoveMediaController().getBrightcoveControlBar();
          brightcoveControlBar.setAlign(false);
          }
      });

    IMA広告をプリロードする

    Android 用ネイティブ SDK および IMA プラグインを使用して広告をプリロードするには、setEnablePreloading(true)プロパティを使用します。

    このプロパティを使用するには、次の手順を実行します。

    1. 出発点は、 IMAサンプルアプリです

    2. private void setupGoogleIMA()関数を見つけます。

    3. 関数の最後のコード行の前にスニペットコードブロックを追加します。

      ImaSdkSettings imaSdkSettings = sdkFactory.createImaSdkSettings();
      AdsRenderingSettings adsRenderingSettings =
      ImaSdkFactory.getInstance().createAdsRenderingSettings();
      adsRenderingSettings.setEnablePreloading(true);
    4. adsRenderingSettings最後のコード行にパラメータを追加します。

      googleIMAComponent = new GoogleIMAComponent(brightcoveVideoView, eventEmitter, true, adsRenderingSettings);

    広告なしでシークする

    adsDisabledプロパティを使用すると、動画を通じて検索している間、広告の再生を無効にすることができます。VideoPlaybackController

    この機能を使用するには、次の手順を実行します。

    1. VideoPlaybackControllerからインスタンスを取得しますBrightcoveVideoView

      VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
    2. 広告の再生を無効にします。

      playbackController.setAdsDisabled(true);
    3. 現在のビデオで目的の時間位置にシークします。
    4. 通常の広告動作を再開します。

      playbackController.setAdsDisabled(false);

    あなたのコードは次のようになります:

    final VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
    eventEmitter.on(EventType.VIDEO_DURATION_CHANGED, new EventListener() {
      @Override
      public void processEvent(final Event event) {
        playbackController.setAdsDisabled(true);
        brightcoveVideoView.seekTo(10000);
      }
    });
    
    eventEmitter.on(EventType.DID_SEEK_TO, new EventListener() {
      @Override
      public void processEvent(final Event event) {
        playbackController.setAdsDisabled(false);
      }
    });

    バッファサイズを設定する

    次のセグメントの配信が CDN から遅延する場合は、プレーヤーのバッファリングを排除するために、バッファ長を増やすことを検討してください。しかし、HLS が既に行っていることを手動で行うことはできないかもしれません。

    HLS は、すぐにプレイし、維持できない場合は品質を落とせるように設計されています。この方法では、バッファをプリロードする必要はありません。それが追いつかない場合は、中断を防ぐために最高の品質でできるだけ多くのビデオをロードします。

    Android v6.3.1 用ネイティブ SDK から、ExoPlayer 2 実装用に SDK に次のクラスが追加されました。

    • LoadControlConfig
    • AllocatorConfig

    これらのクラスで設定された値は、ExoPlayer DefaultLoadControlオブジェクトの作成に使用されます。このオブジェクトは、ExoPlayer インスタンスの作成に使用されます。開発者は、次のようにバッファサイズを制御できます。

    1. ザ・LoadControlConfigそしてAllocatorConfigクラスはBuilderパターンに従います。両方のクラスで設定できる値は、コンストラクタで設定できる値を反映しています。

      AllocatorConfig allocatorConfig = new AllocatorConfig.Builder().build();
      LoadControlConfig loadControlConfig = new LoadControlConfig.Builder()
      .setAllocatorConfig(allocatorConfig)
      .setMinBufferMs(X)
      .setMaxBufferMs(Y)
      .build();
    2. ビルダーで設定されていない値は、デフォルト値を使用します。を設定するには、ExoPlayerVideoDisplayerComponent.setLoadControlConfig()メソッドを使用しますLoadControlConfig

      brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
      ...
      ExoPlayerVideoDisplayComponent dc = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
      dc.setLoadControlConfig(loadControlConfig);

    キャプションとテーマの設定

    現在、BrightcoveCaptionPropertiesActivityは Brightcove Player SDK のマニフェストファイルに設定されているため、開発者はアプリケーションで指定する必要はありません。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.brightcove.player"
    android:versionCode="1"
    android:versionName="1.0">
    
    <application>
    <!-- If we don't register this Activity in the Manifest, apps using the SDK will crash when they try to access it. -->
    <!-- During the app's build process, this manifest will be merged with the app-level one. -->
    <activity android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"/>
    </application>
    </manifest>

    でアプリのテーマを設定している限り、BrightcoveCaptionPropertiesActivityはプラットフォームのデフォルトテーマを継承します。<activity>アプリのマニフェストのレベル。

    <application>レベルで 1 つのアプリケーションテーマを設定すると、はこのアプリケーションレベルのテーマのプロパティを継承します。BrightcoveCaptionPropertiesActivityテーマによっては、アクティビティが奇妙にスタイルされたり、読みにくくなることがあります。

    そのような場合は、BrightcoveCaptionPropertiesActivity独自のマニフェストでを指定し、そこにテーマを適用する必要があります。

    <activity
    android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"
    android:theme="@style/MyCustomCaptionSettingsTheme"/>

    デフォルトのキャプションを設定する

    動画に複数の言語のキャプションが使用されている場合は、再生開始時に初期設定の言語をプログラムで設定できます。コードは次のようになります。

    brightcoveVideoView.getEventEmitter().once(EventType.CAPTIONS_LANGUAGES, new EventListener() {
      @Override
      public void processEvent(Event event) {
        brightcoveVideoView.setClosedCaptioningEnabled(true);
        brightcoveVideoView.setSubtitleLocale("fr");
      }
    });

    ピークビットレートの設定

    プレーヤーでビットレートセレクターを実装するには、次のコードを使用してピークビットレートを設定します。

    ((ExoPlayerVideoDisplayComponent) videoView.getVideoDisplay()).setPeakBitrate(bitRate);

    再生レートの設定

    ExoPlayer は、Android デバイスで再生するビデオの再生速度調整をサポートしています。詳しくは、 GoogleのExoPlayerドキュメントでの可変速度再生を参照してください

    再生速度は、次のコードで制御できます。

    eventEmitter.on(EventType.DID_PLAY, new EventListener() {
      @Override
      public void processEvent(Event event) {
    
        //Get instance of ExoPlayer2
        ExoPlayerVideoDisplayComponent displayComponent = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
        ExoPlayer exoPlayer = displayComponent.getExoPlayer();
    
        //Set playback speed
        PlaybackParameters param = new PlaybackParameters(1.6f, 1.0f);
        exoPlayer.setPlaybackParameters(param);
      }
    });

    360° 動画の VR ゴーグルモードの設定

    360°ビデオを再生する場合、ユーザーはコントロールバーの [Video 360] ボタンを選択して VR ゴーグルモードに切り替えることができます。いずれかを使用している場合BrightcovePlayerまたはBrightcovePlayerFragmentアクティビティの場合、VRゴーグルモードが有効になっていると、画面の向きが横向きに変わります。

    カスタムアクティビティを使用している場合は、以下を追加する必要があります。

    brightcoveVideoView.getEventEmitter().on(EventType.CHANGE_ORIENTATION, new EventListener() {
      @Override
      public void processEvent(Event event) {
        int orientation = event.getIntegerProperty(Event.REQUESTED_ORIENTATION);
        setRequestedOrientation(orientation);
      }
    });

    動画静止画の表示/非表示

    Video Cloud ライブラリからビデオを取得するときのデフォルトの動作では、再生が開始されるまでビデオの静止画像が表示されます。

    動画静止画を表示する

    あなたはいつでもビデオを放つことによって静止画を表示することができますSET_VIDEO_STILLとのイベントVIDEO_STILLプロパティはまだビデオのURIに設定されています。

    動画静止画を隠す

    ビデオを自動再生する場合は、ビデオの静止画像を非表示にすることができます。これを行うには、次のように、SET_VIDEO_STILLイベントをリッスンし、デフォルトの動作を防ぐことができます。

    brightcoveVideoView.getEventEmitter().on(EventType.SET_VIDEO_STILL, new EventListener() {
      @Override
      public void processEvent(Event event) {
        event.preventDefault();
        event.stopPropagation();
      }
    });

    プレーヤーコントロールを表示する

    デフォルトでは、プレーヤーコントロールは数秒後に消えます。ユーザーはビデオをタップしてコントロールを表示できます。

    ユーザーがビデオをタップするまでプレーヤーコントロールを表示したままにするには、次のように自動非表示機能を無効にすることができます:(必要なコードが強調表示されます)

    public class MainActivity extends BrightcovePlayer {
      private BrightcoveMediaController controller;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
        controller = new BrightcoveMediaController(brightcoveVideoView);
        controller.setShowHideTimeout(0);
    
        super.onCreate(savedInstanceState);

    ビデオの途中で再生を開始する

    場合によっては、ビデオの真ん中のどこかから再生を開始する必要があります。これを行うには、BrightCoveVideoView.seekTo()再生を開始する前にを呼び出すことができます。

    catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
      @Override
      public void onVideo(Video video) {
        Log.v(TAG, "onVideo: video = " + video);
    
        brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
        @Override
          public void processEvent(Event event) {
          brightcoveVideoView.seekTo(60000);
          brightcoveVideoView.start();
          }
        });
      brightcoveVideoView.add(video);
      brightcoveVideoView.pause();
      }
    });

    ビデオのスワップ

    この例は、プレーヤーでビデオをスワップする方法の 1 つを示しています。

    単一のビデオを使用する

    clear()このメソッドは、現在のビデオをアンロードするときに非同期であるため、プレーヤーに新しいビデオを追加する前に待つ必要があります。ここでは2つの選択肢があります。

    プレイリストの使用

    プレイリストで作業している場合は、clear()メソッドを呼び出すと、プレイリストのすべての要素が削除されることに注意してください。したがって、プレイリストの最初のビデオにジャンプしようとすると、IndexOutOfBounds例外が発生することがあります。

    代わりに、次のようなものを試すことができます:

    brightcoveVideoView.pause();
    brightcoveVideoView.stopPlayback();
    brightcoveVideoView.setCurrentIndex(0);

    プレイリストの動画を切り替える

    プレイリストを使用している場合は、次のコードを使用して再生リストの動画を切り替えることができます。

    private void setupControls(List<Video> videos) {
      previousVideoButton = (Button) findViewById(R.id.previous_video_button);
      nextVideoButton = (Button) findViewById(R.id.next_video_button);
    
      if (videos != null) {
        previousVideoButton.setEnabled(false);
        previousVideoButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
        int index = brightcoveVideoView.getCurrentIndex();
        int size = brightcoveVideoView.getList().size();
        previousVideoButton.setEnabled(index > 1);
        nextVideoButton.setEnabled((index + 1) < size);
    
        if (index > 0) {
        brightcoveVideoView.setCurrentIndex(index - 1);
        }
      }
    });
    
    nextVideoButton.setEnabled(videos.size() > 1);
    nextVideoButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        int index = brightcoveVideoView.getCurrentIndex();
        int size = brightcoveVideoView.getList().size();
        previousVideoButton.setEnabled(index >= 0);
        nextVideoButton.setEnabled((index + 2) < size);
    
        if ((index + 1) < size) {
        	brightcoveVideoView.setCurrentIndex(index + 1);
        }
      }
    });
    }
    }

    ページの最終更新日04 Oct 2021