ExoPlayer डेमो ऐप्लिकेशन

ExoPlayer का मुख्य डेमो ऐप्लिकेशन दो मुख्य कामों के लिए है:

  1. इससे ExoPlayer के इस्तेमाल का आसान, और बेहतरीन सुविधाओं का उदाहरण दिया जा सकता है. डेमो ऐप्लिकेशन को आसानी से शुरुआत करने के लिए इस्तेमाल किया जा सकता है. आपका ऐप्लिकेशन.
  2. ExoPlayer पर गेम खेलना आसान बनाने के लिए. डेमो ऐप्लिकेशन का इस्तेमाल, प्लेबैक की जांच करने के लिए किया जा सकता है अपना कॉन्टेंट बनाया.

इस पेज पर डेमो ऐप्लिकेशन पाने, उसे कंपाइल करने, और चलाने का तरीका बताया गया है. इसमें यह भी बताया गया है कि मीडिया कैसे चलाएँ.

कोड लोड हो रहा है

मुख्य डेमो ऐप्लिकेशन का सोर्स कोड, इसके demos/main फ़ोल्डर में मिल सकता है हमारा GitHub प्रोजेक्ट. अगर आपने अभी तक ऐसा नहीं किया है, तो प्रोजेक्ट का क्लोन लोकल डायरेक्ट्री:

git clone https://github.com/androidx/media.git

इसके बाद, Android Studio में प्रोजेक्ट खोलें. आपको यहां दिए गए विकल्पों में यह दिखेगा: Android प्रोजेक्ट व्यू (डेमो ऐप्लिकेशन के काम के फ़ोल्डर बड़े किए गए हैं):

Android Studio में प्रोजेक्ट

कंपाइल करना और चलाना

डेमो ऐप्लिकेशन को कंपाइल और चलाने के लिए, demo कॉन्फ़िगरेशन को चुनें और चलाएं Android Studio. डेमो ऐप्लिकेशन, कनेक्ट किए गए Android डिवाइस पर इंस्टॉल होकर चलेगा. हमारा सुझाव है कि अगर हो सके, तो किसी फ़िज़िकल डिवाइस का इस्तेमाल करें. अगर आपको एम्युलेटर का इस्तेमाल करना है इसके बजाय, कृपया काम करने वाले डिवाइस का एम्युलेटर सेक्शन पढ़ें और पक्का करें कि यह ज़रूरी है कि आपका वर्चुअल डिवाइस कम से कम 23 के एपीआई लेवल वाली सिस्टम इमेज का इस्तेमाल करता हो.

sampleChooserActivity और PlayerActivity

डेमो ऐप्लिकेशन में, सैंपल की सूची (SampleChooserActivity) दी जाती है. चुना जा रहा है सैंपल, प्लेबैक के लिए दूसरी गतिविधि (PlayerActivity) खोलेगा. डेमो प्लेबैक कंट्रोल और ट्रैक चुनने के फ़ंक्शन की सुविधा देता है. यह इनका इस्तेमाल भी करता है काम की डीबग की जानकारी देने के लिए, ExoPlayer की EventLogger यूटिलिटी क्लास सिस्टम लॉग. इस लॉगिंग को देखा जा सकता है (के लिए गड़बड़ी स्तर लॉगिंग के साथ अन्य टैग) शामिल करें:

adb logcat EventLogger:V *:E

बंडल किए गए डिकोडर चालू करना

ExoPlayer में ऐसे कई एक्सटेंशन हैं जो बंडल किए गए सॉफ़्टवेयर का इस्तेमाल करने की अनुमति देते हैं डिकोडर, जिनमें AV1, VP9, Opus, FLAC, और FFmpeg (सिर्फ़ ऑडियो) शामिल हैं. डेमो ऐप्लिकेशन को इन एक्सटेंशन को इस तरह शामिल और इस्तेमाल करने के लिए बनाया जा सकता है:

  1. हर वह एक्सटेंशन बनाएं जिसे आपको शामिल करना है. ध्यान दें कि यह मैन्युअल प्रोसेस के बारे में बताएं. इसके लिए प्रत्येक एक्सटेंशन में README.md फ़ाइल देखें निर्देश.
  2. Android Studio के बिल्ड वैरिएंट व्यू में, डेमो के लिए बिल्ड वैरिएंट सेट करें मॉड्यूल को इस रूप में withDecoderExtensionsDebug या withDecoderExtensionsRelease में जोड़ें नीचे दी गई इमेज में दिखाया गया है.

    डेमो के तौर पर, `withDecoderextensionDebug` बिल्ड वैरिएंट चुनें

  3. 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
}

सैंपल सिलेक्टर गतिविधि में, ओवरफ़्लो मेन्यू में यह तय करता है कि एक्सटेंशन डिकोडर को प्राथमिकता देनी है या नहीं.

लोकल फ़ाइल यूआरआई और स्टोरेज के स्कोप वाली पाबंदियां

लोकल फ़ाइल यूआरआई तय करते समय, डेमो ऐप्लिकेशन ज़रूरी स्टोरेज का अनुरोध करता है इन फ़ाइलों को पढ़ने के लिए, ऐक्सेस की अनुमतियां दें. हालांकि, 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 और उसका डेटा यूआरआई सैंपल के तौर पर मिलाएँ. ऐसे इंटेंट को टर्मिनल से इनका इस्तेमाल करके ट्रिगर किया जा सकता है:

adb shell am start -a androidx.media3.demo.main.action.VIEW \
    -d https://yourdomain.com/sample.mp4

किसी एक सैंपल इंटेंट के लिए, अतिरिक्त सुविधाएं इस्तेमाल की जा सकती हैं:

  • कॉन्फ़िगरेशन की अतिरिक्त सुविधाओं का उदाहरण:
    • mime_type [स्ट्रिंग] MIME टाइप हिंट का सैंपल. उदाहरण के लिए डैश कॉन्टेंट के लिए application/dash+xml.
    • clip_start_position_ms [लॉन्ग] वह शुरुआती पॉइंट जहां से सैंपल किया जाना चाहिए मिलीसेकंड में क्लिप किया गया.
    • clip_end_position_ms [लंबा] एक आखिरी पॉइंट जहां से सैंपल होना चाहिए मिलीसेकंड में क्लिप किया गया.
    • drm_scheme [स्ट्रिंग] सुरक्षित होने पर डीआरएम स्कीम. मान्य वैल्यू widevine हैं, playready और clearkey. डीआरएम स्कीम के यूयूआईडी भी स्वीकार किए जाते हैं.
    • drm_license_uri [स्ट्रिंग] अगर सुरक्षित हो, तो लाइसेंस सर्वर का यूआरआई.
    • drm_force_default_license_uri [बूलियन] क्या ज़बरदस्ती इस्तेमाल करना है उन मुख्य अनुरोधों के लिए drm_license_uri जिनमें उनका खुद का लाइसेंस यूआरआई शामिल है.
    • drm_key_request_properties [स्ट्रिंग अरे] कुंजी अनुरोध के हेडर इस तौर पर पैक किए गए name1, value1, name2, value2 वगैरह.
    • drm_session_for_clear_content [बूलियन] क्या डीआरएम सेशन अटैच करना है से वीडियो और ऑडियो ट्रैक मिटा सकते हैं.
    • drm_multi_session [बूलियन] सुरक्षित होने पर, 'की' का नया वर्शन बनाने की सुविधा चालू करता है.
    • subtitle_uri [स्ट्रिंग] सबटाइटल साइडकार फ़ाइल का यूआरआई.
    • subtitle_mime_type [स्ट्रिंग] सबटाइटल_uri का एमआईएमई टाइप (अगर ज़रूरी है, तो) 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 दूसरे सैंपल के लिए डीआरएम स्कीम सेट करेगा.
  • सैंपल के यूआरआई को, 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