ExoPlayer 的主要試用版應用程式有兩個主要用途:
- 提供相對簡單但功能完整的 ExoPlayer 使用範例。 你可以將範例應用程式做為便利的起點 開發自己的應用程式
- 方便您輕鬆試用 ExoPlayer。試用版應用程式可用來測試播放 。
本頁面說明如何取得、編譯及執行試用版應用程式。此網路也會說明 以及如何透過它播放自己的媒體
取得程式碼
您可以在以下位置的 demos/main
資料夾中找到主要試用版應用程式的原始碼:
我們的 GitHub 專案將專案複製到
本地目錄:
git clone https://github.com/androidx/media.git
接著,在 Android Studio 中開啟專案。輸出內容中應會顯示以下內容 Android 專案檢視畫面 (已展開試用版應用程式的相關資料夾):
編譯和執行
如要編譯及執行試用版應用程式,請在以下位置選取並執行 demo
設定:
Android Studio。試用版應用程式會在已連結的 Android 裝置上安裝並執行。
我們建議盡可能使用實體裝置。如要使用模擬器
請改為參閱支援的裝置模擬器一節,確定
虛擬裝置使用的系統映像檔 API 級別至少為 23。
試用版應用程式會顯示範例清單 (SampleChooserActivity
)。選取中
樣本會開啟第二個活動 (PlayerActivity
) 來播放。示範
包括播放控制項及追蹤選取功能。此架構也採用
ExoPlayer 的 EventLogger
公用程式類別可將實用的偵錯資訊輸出至
系統記錄您可以查看這項記錄 (以及錯誤層級的記錄功能)
其他標籤) 來取代為多個標記:
adb logcat EventLogger:V *:E
啟用隨附解碼器
ExoPlayer 有許多擴充功能允許使用套裝軟體 包括 AV1、VP9、Opus、FLAC 和 FFmpeg (僅限音訊) 等解碼器。試用版應用程式 可以按照以下方式加入和使用這些擴充功能:
- 建立您想要納入的每個額外資訊。請注意
手動程序。請參閱各副檔名中的
README.md
檔案, 操作說明。 在 Android Studio 的「Build Variants」檢視畫面中,設定試用版的建構變化版本 套用至
withDecoderExtensionsDebug
或withDecoderExtensionsRelease
,如下所示: 如下圖所示照常編譯、安裝及執行
demo
設定。
根據預設,系統只會在合適的平台解碼器中使用擴充功能解碼器 不存在。您可以指定要將擴充功能解碼器 ,在下列各節中所述。
播放自己的內容
你可以透過多種方式在試用版應用程式中播放自己的內容。
1. 編輯素材資源/media.exolist.json
試用版應用程式中列出的樣本是從 assets/media.exolist.json
載入。
編輯這個 JSON 檔案,即可在示範中新增及移除範例
應用程式。結構定義如下,其中 [O] 代表選填屬性。
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of sample",
"uri": "The URI of the sample",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8",
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks"
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)",
"ad_tag_uri": "[O] The URI of an ad tag to load via the IMA extension"
},
...etc
]
},
...etc
]
可使用結構定義來指定樣本播放清單:
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of playlist sample",
"playlist": [
{
"uri": "The URI of the first sample in the playlist",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8"
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks",
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)"
},
{
"uri": "The URI of the second sample in the playlist",
...etc
},
...etc
]
},
...etc
]
},
...etc
]
如有需要,金鑰要求標頭會指定為包含字串的物件 屬性:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
在範例選擇器活動中,溢位選單包含 指定是否偏好使用擴充功能解碼器
本機檔案 URI 和限定範圍儲存空間限制
指定本機檔案 URI 時,試用版應用程式會要求必要的儲存空間
讀取這些檔案的權限。但從 Android 13 開始
您可以載入結尾不是一般媒體檔案的任意檔案
副檔名 (例如 .mp4
)。如果您需要載入這類檔案,可以
不受限制的特定儲存空間目錄。這個
通常位於 /sdcard/Android/data/androidx.media3.demo.main/files
。
2. 載入外部 exolist.json 檔案
試用版應用程式可以使用上述結構定義,以載入外部 JSON 檔案
按照 *.exolist.json
慣例。舉例來說
請前往 https://yourdomain.com/samples.exolist.json
開啟檔案,使用
試用版應用程式:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
點選 *.exolist.json
連結 (例如瀏覽器或電子郵件中的連結)
用戶端),也可以在已安裝試用版應用程式的裝置上開啟它
應用程式。因此,託管 *.exolist.json
JSON 檔案能讓您輕鬆
發布內容讓他人試用
3. 啟動意圖
意圖可用於略過範例清單,並直接啟動
播放。如要播放單一範例,請將意圖的動作設為
androidx.media3.demo.main.action.VIEW
及其資料 URI
播放的範例。您可以從終端機使用以下方式觸發這類意圖:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
單一範例意圖支援的選用額外項目如下:
- 設定額外範例:
mime_type
[字串] MIME 類型提示範例。例如:application/dash+xml
代表 DASH 內容。clip_start_position_ms
[Long] 取樣目的地的起點 以毫秒為單位clip_end_position_ms
[Long] 取樣起點 以毫秒為單位drm_scheme
[字串] DRM 配置 (如果受到保護)。有效值為widevine
、playready
和clearkey
。我們也接受 DRM 架構 UUID。drm_license_uri
[字串] 授權伺服器的 URI (如果受保護)。drm_force_default_license_uri
[布林值] 是否強制使用drm_license_uri
適用於包含自己的授權 URI 的金鑰要求。drm_key_request_properties
[字串陣列] 封裝為 name1、value1、name2、value2 等 (除非受到保護)。drm_session_for_clear_content
[布林值] 是否要附加 DRM 工作階段 清除影片和音軌。drm_multi_session
[布林值] 啟用金鑰輪替 (如果受到保護)。subtitle_uri
[字串] 副標題補充資訊檔案的 URI。subtitle_mime_type
[字串] subtitle_uri 的 MIME 類型 (如果 已設定 subtitle_uri)。subtitle_language
[字串] 字幕檔案的 BCP47 語言代碼 (未設定 subtitle_uri 時忽略)。ad_tag_uri
[字串] 要透過 [IMA 擴充功能][]。prefer_extension_decoders
[布林值] 擴充功能解碼器是否 也比較容易獲得採用
使用 adb shell am start
觸發意圖時,可選用的字串額外項目
為 --es
設定 (例如--es extension mpd
)。選用的布林值額外項目
為 --ez
設定 (例如--ez prefer_extension_decoders TRUE
)。選用項目
可透過 --el
設定長額外項目 (例如--el clip_start_position_ms 5000
)。一個
選用的字串陣列額外項目,可透過 --esa
設定 (例如
--esa drm_key_request_properties name1,value1
)。
如要播放樣本的播放清單,請將意圖的動作設為
androidx.media3.demo.main.action.VIEW_LIST
。範例設定
額外項目與 androidx.media3.demo.main.action.VIEW
相同
但有兩個差異:
- 額外項目索引鍵應有底線和以 0 為基礎的樣本索引
做為尾碼。舉例來說,
extension_0
會提示第一個 樣本。drm_scheme_1
會設定第二個樣本的 DRM 配置。 - 範例的 URI 會以額外鍵
uri_<sample-index>
的形式傳遞。
其他非取樣依附元件的其他項目則不會變更。舉例來說, 您可以在終端機中執行下列指令,播放含有兩個項目的播放清單。 覆寫第二個項目的延伸:
adb shell am start -a androidx.media3.demo.main.action.VIEW_LIST \ --es uri_0 https://a.com/sample1.mp4 \ --es uri_1 https://b.com/sample2.fake_mpd \ --es extension_1 mpd