ExoPlayer'ın ana demo uygulamasının iki temel amacı vardır:
- Nispeten basit ancak yine de tam özellikli bir ExoPlayer kullanımı örneği sağlamak. Demo uygulaması, uygulama geliştirme sürecinde pratik bir başlangıç noktası olarak kullanılabilir. .
- ExoPlayer'ı denemeyi kolaylaştırmak. Demo uygulaması, oynatmayı test etmek için kullanılabilir kendi içeriğinizin yer aldığı bir video hazırlarsınız.
Bu sayfada, demo uygulamasının nasıl alınacağı, derleneceği ve çalıştırılacağı açıklanmaktadır. Ayrıca kendi medyanızı oynatmak için nasıl kullanacağınızı öğrenin.
Kodu alma
Ana demo uygulamasının kaynak kodu, uygulamanın demos/main
klasöründe bulunabilir
GitHub projemiz hakkında daha fazla bilgi edinin. Henüz yapmadıysanız projeyi bir
yerel dizin:
git clone https://github.com/androidx/media.git
Ardından, projeyi Android Studio'da açın. Bağlantı kurulduğunda Android Projesi görünümü (demo uygulamanın ilgili klasörleri genişletildi):
Derleniyor ve çalıştırılıyor
Demo uygulamayı derlemek ve çalıştırmak için şurada demo
yapılandırmasını seçip çalıştırın:
Android Studio'ya gidin. Demo uygulama, bağlı bir Android cihaza yüklenir ve cihazda çalışır.
Mümkünse fiziksel bir cihaz kullanmanızı öneririz. Emülatör kullanmak isterseniz
Bunun yerine lütfen Desteklenen cihazlar başlığının emülatörler bölümünü okuyun ve
Sanal cihazınızın, API düzeyi en az 23 olan bir sistem görüntüsü kullandığından emin olun.
Demo uygulaması bir örnek listesi (SampleChooserActivity
) sunar. Seçim
bir örnek, oynatılmak üzere ikinci bir etkinliği (PlayerActivity
) açar. Demo
oynatma kontrolleri ve parça seçme işlevi gibi özellikler içerir. Ayrıca
ExoPlayer'ın EventLogger
yardımcı program sınıfını kullanarak yararlı hata ayıklama bilgileri çıktısını verir.
sistem günlüğünüz için de geçerlidir. Bu günlük kaydı,
diğer etiketler) şu komutu kullanarak:
adb logcat EventLogger:V *:E
Gruplandırılmış kod çözücüleri etkinleştirme
ExoPlayer, paket halinde sunulan yazılımların kullanılmasına izin veren çeşitli uzantılara sahiptir. AV1, VP9, Opus, FLAC ve FFmpeg (yalnızca ses) dahil olmak üzere kod çözücüler Demo uygulama aşağıdaki gibi eklemek ve kullanmak üzere oluşturulabilir:
- Dahil etmek istediğiniz her bir uzantıyı oluşturun. Bunun bir
manuel işlem. için her uzantıdaki
README.md
dosyasına bakın bakın. Android Studio'nun Derleme Varyantları görünümünde demo için derleme varyantını ayarlayın modülünü
withDecoderExtensionsDebug
veyawithDecoderExtensionsRelease
olarak aşağıdaki resimde gösteriliyor.demo
yapılandırmasını normal şekilde derleyin, yükleyin ve çalıştırın.
Uzantı kod çözücü varsayılan olarak yalnızca uygun bir platform kod çözücüsü mevcut değil. Uzantı kod çözücülerin tercih edilir.
Kendi içeriğinizi oynatma
Demo uygulamada kendi içeriğinizi oynatmanın birden fazla yolu vardır.
1. Öğeleri düzenleme/media.exolist.json
Demo uygulamada listelenen örnekler assets/media.exolist.json
uygulamasından yüklenir.
Bu JSON dosyasını düzenleyerek demoya örnek ekleyip çıkarabilirsiniz
uygulamasını indirin. Şema aşağıdaki gibidir. Burada [O], isteğe bağlı bir özelliği belirtir.
[
{
"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
]
Örnek oynatma listeleri şema kullanılarak belirtilebilir:
[
{
"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
]
Gerekirse anahtar isteği başlıkları, dize içeren bir nesne olarak belirtilir. özelliğini kullanın:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
Örnek seçici etkinliğindeki taşma menüsü, uzantı kod çözücülerinin tercih edilip edilmeyeceğini belirtir.
Yerel dosya URI'leri ve kapsamlı depolama alanı kısıtlamaları
Demo uygulaması, yerel dosya URI'lerini belirtirken gerekli depolama alanını ister
bu dosyaları okumak için erişim izinlerini verin. Ancak Android 13'ten itibaren
tipik bir medya dosyasıyla bitmeyen rastgele dosyalar yüklemek mümkündür
uzantı (.mp4
gibi). Böyle bir dosyayı yüklemeniz gerekirse dosyayı
Demo uygulamaya özgü, erişim kısıtlaması olmayan depolama dizini. Bu
genellikle /sdcard/Android/data/androidx.media3.demo.main/files
konumunda bulunur.
2. Harici bir exolist.json dosyası yükleniyor
Demo uygulaması, yukarıdaki ve adlandırılmış şemayı kullanarak harici JSON dosyalarını yükleyebilir.
*.exolist.json
kurallarına göre. Örneğin, böyle bir web sitesi
dosyasını https://yourdomain.com/samples.exolist.json
konumunda açabilirsiniz.
şu uygulamayı kullanan demo uygulama:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
*.exolist.json
bağlantısını (ör. tarayıcıda veya e-postada) tıklama
istemci) aynı zamanda uygulamayı demoda da açar.
uygulamasını indirin. Dolayısıyla bir *.exolist.json
JSON dosyasını barındırmak,
Demo uygulamada başkalarının denemeleri için içerik dağıtma.
3. Amaç tetikleme
İntentler, örnek listesini atlamak ve doğrudan
oynatmaya devam edebilirsiniz. Tek bir örnek çalmak için intent işlemini şu şekilde ayarlayın:
androidx.media3.demo.main.action.VIEW
ve veri URI'si
oynatma örneği. Böyle bir niyet, terminalden şunlar kullanılarak tetiklenebilir:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
Tek bir örnek niyeti için desteklenen isteğe bağlı ekstralar şunlardır:
- Örnek yapılandırma ekstraları:
mime_type
[Dize] Örnek MIME türü ipucu. Örneğin: DASH içeriği içinapplication/dash+xml
.clip_start_position_ms
[Uzun] Örneğin olması gereken başlangıç noktası milisaniye cinsinden kırpılır.clip_end_position_ms
[Uzun] Örneklemin alınması gereken bitiş noktası milisaniye cinsinden kırpılır.drm_scheme
[Dize] Korunuyorsa DRM şeması. Geçerli değerler:widevine
,playready
veclearkey
. DRM şeması UUID'leri de kabul edilir.drm_license_uri
[Dize] Korunuyorsa lisans sunucusunun URI'si.drm_force_default_license_uri
[Boole] Kullanımının zorunlu kılınıp kılınmayacağı Kendi lisans URI'sini içeren anahtar istekleri içindrm_license_uri
.drm_key_request_properties
[Dize dizisi] Anahtar isteği başlıkları ad1, değer1, ad2, değer2 vb. bulunur.drm_session_for_clear_content
[Boole] DRM oturumu eklenip eklenmeyeceğini belirtir video ve ses parçalarını temizleyin.drm_multi_session
[Boole] Korunduğunda anahtar döndürmeyi etkinleştirir.subtitle_uri
[Dize] Bir altyazı yardımcı dosyasının URI'sı.subtitle_mime_type
[String] Caption_uri'nin MIME türü (şöyleyse gereklidir: Caption_uri ayarlanmış).subtitle_language
[Dize] Altyazı dosyasının BCP47 dil kodu (caption_uri ayarlanmadıysa yoksayılır).ad_tag_uri
[Dize] [IMA uzantısı][] olarak değiştirin.prefer_extension_decoders
[Boole] Uzantı kod çözücülerin daha çok tercih edebilirsiniz.
Bir niyeti tetiklemek için adb shell am start
kullanılırken isteğe bağlı bir dize ekstra
ile ayarlanmış olması gerekir: --es
(ör. --es extension mpd
) bilgileri gösterilir. İsteğe bağlı bir boole ekstra can
ile ayarlanmış olması gerekir: --ez
(ör. --ez prefer_extension_decoders TRUE
) bilgileri gösterilir. İsteğe bağlı
ekstra uzun ekstra, --el
ile ayarlanabilir (ör. --el clip_start_position_ms 5000
) bilgileri gösterilir.
isteğe bağlı dize dizisi ekstra, --esa
ile ayarlanabilir (ör.
--esa drm_key_request_properties name1,value1
) bilgileri gösterilir.
Örnek oynatma listesini çalmak için intent işlemini
androidx.media3.demo.main.action.VIEW_LIST
Örnek yapılandırma
ekstra özellikler androidx.media3.demo.main.action.VIEW
ile aynı kalır.
İki farklılık dışında:
- Ekstralar anahtarlarda alt çizgi ve örneğin 0 tabanlı dizini olmalıdır
ekleyin. Örneğin,
extension_0
, ilk etiket için örnek türüne ipucu verir örneklem.drm_scheme_1
, ikinci örnek için DRM şemasını ayarlar. - Örneğin URI'si,
uri_<sample-index>
anahtarıyla fazladan bir öğe olarak iletilir.
Örneklem bağımlı olmayan diğer ekstra özellikler değişmez. Örneğin, iki öğeli bir oynatma listesi oynatmak için terminalde aşağıdaki komutu çalıştırabilirsiniz: ikinci öğenin uzantısını geçersiz kılın:
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