概覽
完成此快速入門後,您應該能夠:
- 創建一個項目,然後使用Gradle添加適用於Android的Brightcove Player SDK。
- 更改佈局以包括
BrightcoveExoPlayerVideoView
。 - 添加到
onCreate()
播放視頻的方法。來自不同的來源。
觀眾
使用Android Studio進行開發並且對在Android應用程序中使用Android的Brightcove Player SDK感興趣的開發人員。
先決條件
對Java和Android應用程序開發的基本了解。
做好準備
通過安裝Android Studio為開發做好準備
- 下載Android Studio應用。
- 按照 Android Studio 說明安裝應用程序。
建立專案
在Android Studio中創建一個項目,然後使用Gradle鏈接到播放器SDK。
在Android Studio中創建項目
- 打開Android Studio。
- 在 Welcome to Android Studio 對話框中,選擇 New Project 。
- 在 New Project 對話框中,選擇 Empty Activity 並單擊 Next 。
-
為 名稱、 包名稱、 保存位置、 語言和 最小 SDK提供值。在此快速入門中,使用了以下所示的值:
- 按一下「完成」。
-
Android Studio會工作一段時間,並最終顯示項目的初始狀態。
利用Gradle鏈接到Android的Brightcove Player SDK
由於Gradle與Android Studio集成在一起,因此您將使用它將Android的Native SDK添加到您的項目中。
- 在 Android 視圖中,您將找到您的項目文件。
- 展開搖籃腳本分組並打開
settings.gradle
文件。 - 在裡面
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'
-
在裡面搖籃腳本組,打開
build.gradle
與您的 PlayVideos 項目中的當前模塊關聯的文件。 - 在裡面
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 可能會意外地與您的應用程序的源代碼不兼容。
-
在裡面搖籃腳本組,打開
在gradle.properties
文件。gradle.properties
, 修改properties
使用以下代碼。示例代碼可以在 android-player-samples 存儲庫中找到。android.enableJetifier=true android.useAndroidX=true anpVersion=8.0.0 org.gradle.jvmargs=-XX\:MaxPermSize\=512m
- 同步項目以獲取Gradle文件更改。
編寫應用程序代碼
接下來,您將編寫代碼以佈局應用,構建視頻列表並播放視頻
定義應用的佈局
即使進行了空活動,您也將獲得一個簡單的TextView
佈局。替換為BrightcoveExoPlayerVideoView
,它定義了播放器的視圖。
-
打開文件
app/res/layout/activity_main.xml
然後點擊代碼 . -
刪除現有的
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
- 打開
app/manifests/AndroidManifest.xml
文件。 -
之後
<application>
代碼塊,但在結尾處</manifest>
標籤,插入以下內容以啟用Internet訪問。<uses-permission android:name="android.permission.INTERNET"/>
- 同步項目以重建它並選擇這些更改。
創建視圖並播放視頻
-
返回到
MainActivity.java
文件。 -
為了
MainActivity
類,擴展BrightcovePlayer
類。這為您的應用程序提供了默認的生命週期管理。public class MainActivity extends BrightcovePlayer {
-
當您開始打字時
BrightcovePlayer
,您應該會看到可供選擇的選項。雙擊BrightcovePlayer
選項將添加一個import
陳述。 -
找到
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
班級。 -
-
接下來,您需要使用分析將您的Brightcove播放器帳戶ID發送到Brightcove
setAccount()
方法。Analytics analytics = brightcoveVideoView.getAnalytics(); analytics.setAccount("your account Id");
-
選用性:如果您覆蓋
BrightcoveExoPlayerVideoView
類或不使用Brightcove播放器和目錄,則需要將Video Cloud Publisher ID發送到Video Cloud Analytics。您可以通過使用分析來做到這一點setAccount()
方法。這可讓您在視訊雲端分析中檢視此應用程式的資料。Analytics analytics = brightcoveVideoView.getAnalytics(); analytics.setAccount("your account Id");
-
從遠程服務器上託管的視頻創建視頻對象。設定
DeliveryType
以符合您擁有的視訊類型。Video video = Video.createVideo("https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8", DeliveryType.HLS);
-
在開始播放視訊之前,載入要做為海報影像的遠端影像。
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(); }
-
將視頻添加到視圖並開始視頻播放。
brightcoveVideoView.add(video); brightcoveVideoView.start();
-
你的代碼應該看起來像這樣:
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(); } }
-
運行或調試應用程序以觀看視頻播放。
獲取並播放視頻
在本節中,您將使用Catalog
類從視頻雲服務器檢索單個視頻,然後播放。
此com.brightcove.player.edge.Catalog
類別提供非同步方法,可從 Brightcove 播放 API 擷取視訊和播放清單。這是從您的視訊雲端庫擷取內容的最新和建議的 API。
移除不需要的程式碼
- 不再需要先前應用程式的某些程式碼。在裡面
onCreate()
方法,進入超類後刪除所有代碼。 -
確認你的
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); } }
從目錄中檢索視頻
- 從您的 Video Cloud Studio 帳戶收集以下信息:
- 帳戶 ID
- 視訊 ID
- 原則金鑰
-
在項目中定義您的自定義值。打開
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>
-
返回到
MainActivity.java
文件並從 SDK 獲取事件發射器。// Get the event emitter from the SDK EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
-
使用您在上一步中為帳戶 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();
-
使用目錄的
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(); } });
-
你的類的完整代碼應該
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(); } }); } }
- 運行該應用以確認視頻播放。
獲取並播放播放列表
在本節中,您將使用Catalog
類從Video Cloud服務器檢索播放列表,然後播放該播放列表中的視頻。
此com.brightcove.player.edge.Catalog
類別提供非同步方法,可從 Brightcove 播放 API 擷取視訊和播放清單。這是從您的視訊雲端庫擷取內容的最新和建議的 API。
移除不需要的程式碼
-
不再需要先前應用程式的某些程式碼。刪除對目錄的呼叫
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(); } });
從目錄中檢索播放列表
-
現有目錄實例將可用於檢索播放列表,因此無需更改這些代碼行:
// 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();
- 在Video Cloud Studio的媒體模塊,選擇一個播放列表,然後復制播放清單編號。
-
打開
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>
-
使用目錄的
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(); } });
-
你的類的完整代碼應該
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(); } }); } }
- 運行該應用以確認播放列表播放中的多個視頻。
你完成了!感謝您完成Android SDK快速入門。
有關完整的項目示例,請參閱 Android 播放器示例。