ExoPlayer demo uygulaması

ExoPlayer'ın ana demo uygulamasının iki temel amacı vardır:

  1. 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. .
  2. 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):

Android Studio'daki proje

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.

SampleChooserActivity ve PlayerActivity

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:

  1. 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.
  2. Android Studio'nun Derleme Varyantları görünümünde demo için derleme varyantını ayarlayın modülünü withDecoderExtensionsDebug veya withDecoderExtensionsRelease olarak aşağıdaki resimde gösteriliyor.

    "withDecoderExtensionsDebug" demo varyantını seçme

  3. 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çin application/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 ve clearkey. 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çin drm_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