逐步:簡單的視頻應用程序使用本地 SDK

在本主題中,您將使用 Android 工作室和適用於 Android 的布萊特灣播放器 SDK 創建一個應用程序,從布萊特灣視頻雲帳戶播放視頻,以及來自布萊特灣視頻雲播放列表的視頻。

概覽

完成此快速入門後,您應該能夠:

  • 創建一個項目,然後使用Gradle添加適用於Android的Brightcove Player SDK。
  • 更改佈局以包括BrightcoveExoPlayerVideoView
  • 添加到onCreate()播放視頻的方法來自不同的來源。

觀眾

使用Android Studio進行開發並且對在Android應用程序中使用Android的Brightcove Player SDK感興趣的開發人員。

先決條件

對Java和Android應用程序開發的基本了解。

做好準備

通過安裝Android Studio為開發做好準備

  1. 下載Android Studio應用。
  2. 按照 Android Studio 說明安裝應用程序。

建立專案

在Android Studio中創建一個項目,然後使用Gradle鏈接到播放器SDK。

在Android Studio中創建項目

  1. 打開Android Studio。
  2. Welcome to Android Studio 對話框中,選擇 New Project
    選擇新項目
    選擇新項目
  3. New Project 對話框中,選擇 Empty Activity 並單擊 Next
    選擇空活動
    選擇空活動
  4. 名稱包名稱保存位置語言最小 SDK提供值。在此快速入門中,使用了以下所示的值:

    新項目
    新項目
  5. 按一下「完成」。
  6. Android Studio會工作一段時間,並最終顯示項目的初始狀態。

    工作室專案
    工作室專案

利用Gradle鏈接到Android的Brightcove Player SDK

由於Gradle與Android Studio集成在一起,因此您將使用它將Android的Native SDK添加到您的項目中。

  1. Android 視圖中,您將找到您的項目文件。
  2. 展開搖籃腳本分組並打開settings.gradle文件。
    構建搖籃文件
    構建搖籃文件
  3. 在裡面repositories部分,為 Brightcove Maven 存儲庫添加一個條目。
    dependencyResolutionManagement {
      repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
      repositories {
          google()
          mavenCentral()
          maven {
                url 'https://repo.brightcove.com/releases'
          }
      }
    }
    rootProject.name = "PlayVideos"
    include ':app'
  4. 在裡面搖籃腳本組,打開build.gradle與您的 PlayVideos 項目中的當前模塊關聯的文件。

    構建搖籃文件
    構建搖籃文件
  5. 在裡面build.gradle文件,找到dependencies部分。包括適用於 Android 的最新版本的 Native SDK。替換值8.0.0下面帶有最新的SDK版本,可以在概述:適用於Android的Brightcove本機SDK文件。
    dependencies {
      implementation 'androidx.appcompat:appcompat:1.4.1'
      implementation 'com.google.android.material:material:1.5.8'
      implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
      testImplementation 'junit:junit:4.13.2'
      androidTestImplementation 'androidx.test.ext:junit:1.1.3'
      androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.8'
      implementation "com.brightcove.player:exoplayer2:8.0.0"
    }
     

    在 Gradle 社區中不鼓勵使用帶有 '+' 字符的動態依賴版本。使用動態版本控制會對您的構建過程帶來重大風險,因為較新的 API 可能會意外地與您的應用程序的源代碼不兼容。

  6. 在裡面搖籃腳本組,打開gradle.properties文件。

    搖籃屬性
    搖籃屬性
    gradle.properties , 修改properties使用以下代碼。示例代碼可以在 android-player-samples 存儲庫中找到。
    android.enableJetifier=true
    android.useAndroidX=true
    anpVersion=8.0.0
    org.gradle.jvmargs=-XX\:MaxPermSize\=512m
     
  7. 同步項目以獲取Gradle文件更改。

編寫應用程序代碼

接下來,您將編寫代碼以佈局應用,構建視頻列表並播放視頻

定義應用的佈局

即使進行了空活動,您也將獲得一個簡單的TextView佈局。替換為BrightcoveExoPlayerVideoView,它定義了播放器的視圖。

  1. 打開文件app/res/layout/activity_main.xml然後點擊代碼 .

    版面配置 XML 檔案
    版面配置 XML 檔案
  2. 刪除現有的TextView元素並添加一個BrightcoveExoPlayerVideoView部分,因此生成的XML如下所示。請注意以後使用id視圖的名稱brightcove_video_view .

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
      <com.brightcove.player.view.BrightcoveExoPlayerVideoView
          android:id="@+id/brightcove_video_view"
          android:layout_width="match_parent"
          android:layout_height="280dp"
          android:layout_gravity="center_horizontal|top"/>
    </androidx.constraintlayout.widget.ConstraintLayout>

啟用應用程序以使用Internet

  1. 打開app/manifests/AndroidManifest.xml文件。
  2. 之後<application>代碼塊,但在結尾處</manifest>標籤,插入以下內容以啟用Internet訪問。

    <uses-permission android:name="android.permission.INTERNET"/>
  3. 同步項目以重建它並選擇這些更改。

創建視圖並播放視頻

  1. 返回到MainActivity.java文件。

    主要活動文件
    主要活動文件
  2. 為了MainActivity類,擴展BrightcovePlayer類。這為您的應用程序提供了默認的生命週期管理。

    public class MainActivity extends BrightcovePlayer {
  3. 當您開始打字時BrightcovePlayer,您應該會看到可供選擇的選項。雙擊BrightcovePlayer選項將添加一個import陳述。

    BrightcovePlayer類
    BrightcovePlayer類
  4. 找到onCreate()功能。在進入超類之前,分配brightcoveVideoView如下:

    • 創建一個實例BrightcoveExoPlayerVideoView並將其與佈局關聯。在大多數情況下,您將使用exoplayer視圖。有關詳細信息,請參見選擇視頻視圖文件。

    • 當延長BrightcovePlayer,我們必須分配brightcoveVideoView在進入超類之前。這允許一些股票視頻播放器生命週期管理。
    public class MainActivity extends BrightcovePlayer {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
        super.onCreate(savedInstanceState);

    當您粘貼上面突出顯示的代碼時,按選擇+返回添加的鍵import聲明為BrightcoveExoPlayerVideoView班級。

  5. 接下來,您需要使用分析將您的Brightcove播放器帳戶ID發送到Brightcove setAccount()方法。

    Analytics analytics = brightcoveVideoView.getAnalytics();
    analytics.setAccount("your account Id");
  6. 選用性:如果您覆蓋BrightcoveExoPlayerVideoView類或不使用Brightcove播放器和目錄,則需要將Video Cloud Publisher ID發送到Video Cloud Analytics。您可以通過使用分析來做到這一點setAccount()方法。這可讓您在視訊雲端分析中檢視此應用程式的資料。

    Analytics analytics = brightcoveVideoView.getAnalytics();
    analytics.setAccount("your account Id");

  7. 從遠程服務器上託管的視頻創建視頻對象。設定DeliveryType以符合您擁有的視訊類型。

    Video video = Video.createVideo("https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8",
      DeliveryType.HLS);
  8. 在開始播放視訊之前,載入要做為海報影像的遠端影像。

    try {
      java.net.URI myposterImage = new java.net.URI("https://sdks.support.brightcove.com/assets/images/general/Great-Blue-Heron.png");
      video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage);
    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  9. 將視頻添加到視圖並開始視頻播放。

    brightcoveVideoView.add(video);
    brightcoveVideoView.start();
  10. 你的代碼應該看起來像這樣:

    package com.brightcove.playvideos;
    
      import android.os.Bundle;
      
      import com.brightcove.player.model.DeliveryType;
      import com.brightcove.player.model.Video;
      import com.brightcove.player.view.BrightcoveExoPlayerVideoView;
      import com.brightcove.player.view.BrightcovePlayer;
      
      import java.net.URISyntaxException;
      
      public class MainActivity extends BrightcovePlayer {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
            setContentView(R.layout.activity_main);
            // Create the video view
            brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
            super.onCreate(savedInstanceState);
    
            // 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://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8",
              DeliveryType.HLS);
      
            // Load a remote poster image
            try {
              java.net.URI myposterImage = new java.net.URI("https://sdks.support.brightcove.com/assets/images/general/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();
      
          }
      }
  11. 運行或調試應用程序以觀看視頻播放。

獲取並播放視頻

在本節中,您將使用Catalog類從視頻雲服務器檢索單個視頻,然後播放。

com.brightcove.player.edge.Catalog類別提供非同步方法,可從 Brightcove 播放 API 擷取視訊和播放清單。這是從您的視訊雲端庫擷取內容的最新和建議的 API。

移除不需要的程式碼

  1. 不再需要先前應用程式的某些程式碼。在裡面onCreate()方法,進入超類後刪除所有代碼。
  2. 確認你的onCreate()方法出現如下:

    public class MainActivity extends BrightcovePlayer {
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        // Create the video view
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
        super.onCreate(savedInstanceState);
    
      }
    }

從目錄中檢索視頻

  1. 從您的 Video Cloud Studio 帳戶收集以下信息:
    • 帳戶 ID
    • 視訊 ID
    • 原則金鑰
     
  2. 在項目中定義您的自定義值。打開res/values/strings.xml文件並用您的值更新它:

    <?xml version="1.0" encoding="utf-8"?>
      <resources>
    
          <!-- Application name -->
          <string name="app_name">PlayVideos</string>
    
          <!-- A sample Brightcove Edge Account ID -->
          <string name="account">your account id</string>
    
          <!-- A sample Brightcove Edge Policy Key -->
          <string name="policy">your policy key</string>
    
          <!-- A sample Brightcove Video ID -->
          <string name="videoId">your video id</string>
    
      </resources>
  3. 返回到MainActivity.java文件並從 SDK 獲取事件發射器。
    // Get the event emitter from the SDK
    EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
  4. 使用您在上一步中為帳戶 ID 和策略密鑰定義的值,創建目錄請求以從 Brightcove Edge 服務獲取視頻。

    // Create a catalog request to fetch a video
    String account = getString(R.string.account);
    Catalog catalog = new Catalog.Builder(eventEmitter, account)
      .setBaseURL(Catalog.DEFAULT_EDGE_BASE_URL)
      .setPolicy(getString(R.string.policy))
      .build();
  5. 使用目錄的findVideoByID()您的視頻ID和VideoListener用於回調。

    在裡面onVideo()方法,將視頻添加到brightcoveVideoView,然後開始播放視頻。

    // Get the video by ID
    catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
    
      @Override
      public void onVideo(Video video) {
        // Add video to the view
        brightcoveVideoView.add(video);
        // Start video playback
        brightcoveVideoView.start();
      }
    });
  6. 你的類的完整代碼應該MainActivity類似於這樣:

    public class MainActivity extends BrightcovePlayer {
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        // Create the video view
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
        super.onCreate(savedInstanceState);
    
        // Get the event emitter from the SDK
        EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
    
        // Create a catalog request to fetch a video
        String account = getString(R.string.account);
        Catalog catalog = new Catalog.Builder(eventEmitter, account)
          .setBaseURL(Catalog.DEFAULT_EDGE_BASE_URL)
          .setPolicy(getString(R.string.policy))
          .build();
    
        // Get the video by ID
        catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
    
          @Override
          public void onVideo(Video video) {
            // Add video to the view
            brightcoveVideoView.add(video);
            // Start video playback
            brightcoveVideoView.start();
          }
        });
      }
    }
  7. 運行該應用以確認視頻播放。

獲取並播放播放列表

在本節中,您將使用Catalog類從Video Cloud服務器檢索播放列表,然後播放該播放列表中的視頻。

com.brightcove.player.edge.Catalog類別提供非同步方法,可從 Brightcove 播放 API 擷取視訊和播放清單。這是從您的視訊雲端庫擷取內容的最新和建議的 API。

移除不需要的程式碼

  1. 不再需要先前應用程式的某些程式碼。刪除對目錄的呼叫findVideoByID()方法,以及相關的VideoListener匿名回調函數。

    // Get the video by ID
    catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
    
      @Override
      public void onVideo(Video video) {
        // Add video to the view
        brightcoveVideoView.add(video);
        // Start video playback
        brightcoveVideoView.start();
      }
    });

從目錄中檢索播放列表

  1. 現有目錄實例將可用於檢索播放列表,因此無需更改這些代碼行:

    // Get the event emitter from the SDK
    EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
    
    // Create a catalog request to fetch a video
    String account = getString(R.string.account);
    Catalog catalog = new Catalog.Builder(eventEmitter, account)
      .setBaseURL(Catalog.DEFAULT_EDGE_BASE_URL)
      .setPolicy(getString(R.string.policy))
      .build();
  2. 在Video Cloud Studio的媒體模塊,選擇一個播放列表,然後復制播放清單編號
  3. 打開res/values/strings.xml文件並為您的播放列表 ID 添加一個條目:

      <?xml version="1.0" encoding="utf-8"?>
        <resources>
      
            <!-- Application name -->
            <string name="app_name">PlayVideos</string>
      
            <!-- A sample Brightcove Edge Account ID -->
            <string name="account">your account id</string>
      
            <!-- A sample Brightcove Edge Policy Key -->
            <string name="policy">your policy key</string>
      
            <!-- A sample Brightcove Playlist ID -->
            <string name="playlistId">your playlist id</string>
      
        </resources>
  4. 使用目錄的findPlaylistByID()使用您的播放列表ID和PlaylistListener用於回調。

    在裡面onPlaylist()方法,從播放列表中檢索視頻,然後將所有視頻添加到brightcoveVideoView,然後開始播放第一個視頻。

    // Get the playlist by ID
    String playlist = getString(R.string.playlistId);
    catalog.findPlaylistByID(playlist, new PlaylistListener() {
      @Override
      public void onPlaylist(Playlist playlist) {
        // Add playlist to the view
        brightcoveVideoView.addAll(playlist.getVideos());
        // Start playback
        brightcoveVideoView.start();
      }
    });
  5. 你的類的完整代碼應該MainActivity類似於這樣:

    public class MainActivity extends BrightcovePlayer {
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        // Create the video view
        brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    
        super.onCreate(savedInstanceState);
    
        // Get the event emitter from the SDK
        EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
    
        // Create a catalog request to fetch a video
        String account = getString(R.string.account);
        Catalog catalog = new Catalog.Builder(eventEmitter, account)
          .setBaseURL(Catalog.DEFAULT_EDGE_BASE_URL)
          .setPolicy(getString(R.string.policy))
          .build();
    
        // Get the playlist by ID
        String playlist = getString(R.string.playlistId);
        catalog.findPlaylistByID(playlist, new PlaylistListener() {
          @Override
          public void onPlaylist(Playlist playlist) {
            // Add playlist to the view
            brightcoveVideoView.addAll(playlist.getVideos());
            // Start playback
            brightcoveVideoView.start();
          }
        });
      }
    }
  6. 運行該應用以確認播放列表播放中的多個視頻。

你完成了!感謝您完成Android SDK快速入門。

有關完整的項目示例,請參閱 Android 播放器示例