Główna aplikacja demonstracyjna ExoPlayer pełni 2 główne cele:
- Oto przykład stosunkowo prostego, ale w pełni funkcjonalnego zastosowania ExoPlayer. Aplikacja w wersji demonstracyjnej może stanowić wygodny punkt wyjścia do tworzenia dzięki własnej aplikacji.
- Żeby ułatwić Ci wypróbowanie ExoPlayer aplikacji w wersji demonstracyjnej można używać do testowania odtwarzania własne treści oprócz dołączonych fragmentów.
Na tej stronie dowiesz się, jak pobrać, skompilować i uruchomić aplikację w wersji demonstracyjnej. Opisuje także jak jej używać do odtwarzania własnych multimediów.
Pobieram kod
Kod źródłowy głównej aplikacji w wersji demonstracyjnej znajduje się w folderze demos/main
naszego projektu GitHub. Skopiuj projekt do pliku
katalog lokalny:
git clone https://github.com/androidx/media.git
Następnie otwórz projekt w Android Studio. W Widok projektu na Androida (odpowiednie foldery aplikacji w wersji demonstracyjnej zostały rozwinięte):
Kompiluję i uruchamiam
Aby skompilować i uruchomić aplikację w wersji demonstracyjnej, wybierz i uruchom konfigurację demo
w
Android Studio. Aplikacja w wersji demonstracyjnej zostanie zainstalowana i uruchomiona na połączonym urządzeniu z Androidem.
Jeśli to możliwe, zalecamy użycie urządzenia fizycznego. Korzystanie z emulatora
przeczytaj sekcję dotyczącą emulatorów obsługiwanych urządzeń i upewnij się,
urządzenie wirtualne używa obrazu systemu z interfejsem API poziomu 23.
Aplikacja w wersji demonstracyjnej zawiera listę przykładów (SampleChooserActivity
). Wybieram
próbka otworzy drugą aktywność (PlayerActivity
) do odtwarzania. Wersja demonstracyjna
zawiera elementy sterujące odtwarzaniem i funkcję wyboru ścieżki. Wykorzystuje też
Klasa narzędzi ExoPlayer EventLogger
do przesyłania przydatnych informacji debugowania
w dzienniku systemowym. Logowanie można wyświetlić (wraz z logowaniem na poziomie błędu dla
inne tagi) za pomocą polecenia:
adb logcat EventLogger:V *:E
Włączanie pakietów dekoderów
ExoPlayer ma wiele rozszerzeń, które umożliwiają korzystanie z oprogramowania zawartego w pakiecie. takich jak AV1, VP9, Opus, FLAC i FFmpeg (tylko dźwięk). Aplikacja w wersji demonstracyjnej Rozszerzenia, które można utworzyć tak, aby uwzględniać i wykorzystywać te rozszerzenia:
- Utwórz wszystkie rozszerzenia, które chcesz uwzględnić. Pamiętaj, że jest to
ręcznie. Zapoznaj się z plikiem
README.md
w każdym rozszerzeniu – za instrukcje. W widoku wariantów kompilacji w Android Studio ustaw wariant kompilacji dla wersji demonstracyjnej. moduł do
withDecoderExtensionsDebug
lubwithDecoderExtensionsRelease
jako na poniższej ilustracji.Skompiluj, zainstaluj i uruchom konfigurację
demo
w zwykły sposób.
Domyślnie dekoder rozszerzeń będzie używany tylko w przypadku odpowiedniego dekodera platformy nie istnieje. Można określić, że dekodery rozszerzeń powinny być zgodnie z opisem w kolejnych sekcjach.
Odtwarzanie własnych treści
Możesz odtwarzać własne treści w aplikacji w wersji demonstracyjnej na kilka sposobów.
1. Edytowanie zasobów/media.exolist.json
Przykłady wymienione w aplikacji w wersji demonstracyjnej są wczytywane z okresu assets/media.exolist.json
.
Edytując ten plik JSON, możesz dodawać przykłady do wersji demonstracyjnej i usuwać je z niej
. Schemat jest następujący, gdzie [O] oznacza atrybut opcjonalny.
[
{
"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
]
Playlisty próbek można określić za pomocą schematu:
[
{
"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
]
W razie potrzeby nagłówki żądań klucza są określane jako obiekt zawierający ciąg znaków dla każdego nagłówka:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
W przykładowym działaniu selektora rozszerzone menu zawiera opcje określając, czy preferowane są dekodery rozszerzeń.
Identyfikatory URI plików lokalnych i ograniczenia dotyczące miejsca na dane
Gdy określasz identyfikatory URI plików lokalnych, aplikacja w wersji demonstracyjnej prosi o niezbędną pamięć
uprawnienia dostępu do odczytu tych plików. Jednak w Androidzie 13
umożliwia ładowanie dowolnych plików, których format nie jest zakończony jako typowy plik multimedialny
(np. .mp4
). Jeśli musisz wczytać taki plik, możesz umieścić go w
katalog pamięci aplikacji w wersji demonstracyjnej, który nie ma ograniczeń dostępu. Ten
zwykle znajduje się pod adresem /sdcard/Android/data/androidx.media3.demo.main/files
.
2. Wczytywanie zewnętrznego pliku exolist.json
Aplikacja demonstracyjna może ładować zewnętrzne pliki JSON za pomocą powyższego schematu o nazwie
zgodnie z konwencją *.exolist.json
. Na przykład, jeśli hostujesz
pod adresem https://yourdomain.com/samples.exolist.json
, możesz go otworzyć w
aplikacji w wersji demonstracyjnej:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
kliknięcie linku *.exolist.json
(na przykład w przeglądarce lub e-mailu),
(klient) na urządzeniu z zainstalowaną aplikacją w wersji demonstracyjnej, zostanie ona również otwarta w wersji demonstracyjnej
. Dlatego hostowanie pliku JSON *.exolist.json
zapewnia prosty sposób
rozpowszechnianie treści do wypróbowania w aplikacji w wersji demonstracyjnej.
3. Uruchamianie intencji
Intencji można używać do omijania listy przykładów i uruchamiania bezpośrednio
odtwarzania. Aby odtworzyć 1 próbkę, ustaw działanie intencji na
androidx.media3.demo.main.action.VIEW
i jego identyfikator URI danych do identyfikatora
fragment, który chcesz odtworzyć. Intencję taką można wywołać z terminala za pomocą polecenia:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
Obsługiwane opcjonalne dodatki w przypadku pojedynczej przykładowej intencji to:
- Przykładowe dodatki konfiguracji:
mime_type
[Ciąg] Przykładowa wskazówka na temat typu MIME. Przykład:application/dash+xml
w przypadku treści DASH.clip_start_position_ms
[Long] Punkt początkowy, w którym powinna znaleźć się próbka w milisekundach.clip_end_position_ms
[Długi] Punkt końcowy, z którego ma pochodzić próbka w milisekundach.drm_scheme
[Ciąg znaków] schemat DRM, jeśli jest chroniony. Prawidłowe wartości towidevine
,playready
iclearkey
. Akceptujemy też identyfikatory UUID schematów DRM.drm_license_uri
[Ciąg] Identyfikator URI serwera licencji, jeśli jest chroniony.drm_force_default_license_uri
[Wartość logiczna] – określa, czy wymusić użyciedrm_license_uri
w przypadku żądań kluczy, które zawierają własny identyfikator URI licencji.drm_key_request_properties
[Tablica ciągu] Nagłówki żądań klucza spakowane jako nazwa1, wartość1, nazwa2, wartość2 itd., jeśli jest chroniona.drm_session_for_clear_content
[Wartość logiczna] Określa, czy dołączyć sesję DRM aby wyczyścić ścieżki audio i wideo.drm_multi_session
[Wartość logiczna]: włącza rotację klucza, jeśli jest zabezpieczona.subtitle_uri
[Ciąg] Identyfikator URI pliku pomocniczego napisów.subtitle_mime_type
[Ciąg] Typ MIME parametru Caption_uri (wymagany, jeśli parametr Caption_uri jest ustawiony).subtitle_language
[Ciąg] Kod języka BCP47 pliku napisów. (jest ignorowany, jeśli nie określono parametru Caption_uri).ad_tag_uri
[Ciąg] Identyfikator URI tagu reklamy do wczytania za pomocą funkcji [Rozszerzenie IMA][].prefer_extension_decoders
[wartość logiczna] określa, czy dekodery rozszerzeń są a nie platformowych.
Gdy do uruchamiania intencji za pomocą parametru adb shell am start
możesz dodać opcjonalny dodatkowy ciąg znaków,
być ustawiany za pomocą atrybutu --es
(np. --es extension mpd
). Opcjonalna dodatkowa wartość logiczna może
być ustawiany za pomocą atrybutu --ez
(np. --ez prefer_extension_decoders TRUE
). Parametr opcjonalny
długiego dodatkowego elementu można ustawić za pomocą parametru --el
(np. --el clip_start_position_ms 5000
). An
opcjonalny ciąg znaków w tablicy można ustawić za pomocą funkcji --esa
(np.
--esa drm_key_request_properties name1,value1
).
Aby odtworzyć playlistę sampli, ustaw działanie intencji na
androidx.media3.demo.main.action.VIEW_LIST
Przykładowa konfiguracja
dodatki pozostają takie same jak w przypadku androidx.media3.demo.main.action.VIEW
,
oprócz dwóch różnic:
- Dodatki klucze powinny mieć podkreślenie i indeks zaczynający się od 0,
jako przyrostek. Na przykład dyrektywa
extension_0
wskaże typ przykładowego pola pierwszego przykład.drm_scheme_1
ustawiłby schemat DRM dla drugiego przykładu. - Identyfikator URI próbki jest przekazywany jako dodatkowy za pomocą klucza
uri_<sample-index>
.
Inne dodatki, które nie są zależne od próbki, nie ulegają zmianie. Na przykład: możesz uruchomić w terminalu to polecenie, by odtworzyć playlistę z 2 elementami: zastępując rozszerzenie drugiego elementu:
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