प्लेयर इंटरफ़ेस

प्लेयर आपके ऐप्लिकेशन का वह हिस्सा होता है जिसकी मदद से मीडिया आइटम चलाए जा सकते हैं. Media3 Player इंटरफ़ेस उन सुविधाओं के लिए एक आउटलाइन सेट करता है जिन्हें आम तौर पर खिलाड़ी मैनेज करता है. यह शामिल हैं:

  • वीडियो चलाने से जुड़े कंट्रोल पर असर डालना. जैसे, चलाना, रोकना, और वीडियो पर आगे जाना
  • चल रहे मीडिया की प्रॉपर्टी की क्वेरी करना, जैसे कि प्लेबैक स्थिति
  • मीडिया आइटम की प्लेलिस्ट/सूची मैनेज करना
  • पॉडकास्ट चलाने की प्रॉपर्टी कॉन्फ़िगर करना. जैसे, शफ़ल करना, दोहराना, स्पीड, और वॉल्यूम
  • वीडियो को स्क्रीन पर रेंडर किया जा रहा है

Media3, Player इंटरफ़ेस को लागू करने की सुविधा भी देता है. इसे ExoPlayer.

कॉम्पोनेंट के बीच सामान्य इंटरफ़ेस

Media3 के कई कॉम्पोनेंट, प्लेयर इंटरफ़ेस को लागू करते हैं. उदाहरण के लिए:

कॉम्पोनेंट विवरण और व्यवहार की जानकारी
ExoPlayer मीडिया प्लेयर एपीआई और Player इंटरफ़ेस को डिफ़ॉल्ट रूप से लागू करने की सुविधा.
MediaController प्लेबैक निर्देश भेजने के लिए MediaSession से इंटरैक्ट करता है. अगर आपने आपकी Player और MediaSession Service, Activity से अलग या Fragment जहां आपके खिलाड़ी का यूज़र इंटरफ़ेस (यूआई) मौजूद होता है, आप उसे असाइन कर सकते हैं MediaController आपके गेम के लिए खिलाड़ी के तौर पर PlayerView यूज़र इंटरफ़ेस (यूआई). प्लेबैक और प्लेलिस्ट तरीके से कॉल भेजे जाते हैं आपके MediaSession के ज़रिए, Player को.
MediaBrowser इसके अलावा, नीचे दी गई सुविधाओं के अलावा, MediaController, इसकी मदद से इंटरैक्ट करता है: उपलब्ध मीडिया कॉन्टेंट ब्राउज़ करने के लिए MediaLibrarySession.
ForwardingPlayer Player को लागू करने की सुविधा, जो कॉल को इस पर फ़ॉरवर्ड करती है कोई दूसरा Player. इस क्लास का इस्तेमाल दबाने या बदलाव करने के लिए करें खास ऑपरेशन का इस्तेमाल करने के लिए, संबंधित तरीकों को ओवरराइड करें.
SimpleBasePlayer Player को लागू करने का तरीका, जो तरीकों की संख्या को कम करता है कम से कम लागू करना होगा. यह कस्टम प्लेयर का इस्तेमाल करते समय आपके काम आता है MediaSession से कनेक्ट करना चाहते हैं.
CastPlayer Player को लागू करने की सुविधा, जो कास्ट के साथ डेटा शेयर करती है पाने वाला ऐप्लिकेशन. यह तय करें कि कास्ट सेशन किस तरह का है.

MediaSession, Player इंटरफ़ेस को लागू नहीं करता है. हालांकि, इसके लिए यह ज़रूरी है आपको Player का इस्तेमाल करना होगा. इसका मकसद, Player का ऐक्सेस देना है दूसरे प्रोसेस या थ्रेड से लिया जाता है.

Media3 प्लेबैक आर्किटेक्चर

अगर आपके पास Player का ऐक्सेस है, तो समस्या हल करने के लिए, आपको इसके तरीकों पर सीधे कॉल करना चाहिए चलाने के निर्देश देता है. वीडियो चलाने की सुविधा का विज्ञापन किया जा सकता है और बाहरी सोर्स को ऐक्सेस ���िया जा सकता है MediaSession लागू करके वीडियो कंट्रोल करने की सुविधा. ये बाहरी सोर्स MediaController लागू करें, जिससे मीडिया सेशन से कनेक्ट करने में मदद मिलती है वीडियो चलाने के लिए निर्देश देने के अनुरोध करने होंगे.

बैकग्राउंड में मीडिया चलाते समय, आपको मीडिया सेशन को मॉडरेट करना होगा और MediaSessionService या MediaLibraryService में ऐसा खिलाड़ी हो जो फ़ोरग्राउंड सेवा का इस्तेमाल करें. अगर ऐसा किया जाता है, तो अपने प्लेयर को ऐक्टिविटी से अलग किया जा सकता है जिसमें प्लेबैक कंट्रोल के लिए यूज़र इंटरफ़ेस (यूआई) शामिल है. इसकी ज़रूरत पड�� सकती है मीडिया कंट्रोलर का इस्तेमाल किया जाता है.

इस डायग्राम में दिखाया गया है कि Media3 के वीडियो चलाने के कॉम्पोनेंट, मीडिया ऐप्लिकेशन के आर्किटेक्चर में कैसे फ़िट होते हैं.
पहली इमेज: Player इंटरफ़ेस में एक कुंजी वह Media3 के आर्किटेक्चर में भी एक खास भूमिका में थे.

प्लेयर की स्थिति

Player इंटरफ़ेस को लागू करने वाले मीडिया प्लेयर की स्थिति में डेटा की चार कैटगरी होती हैं:

  1. वीडियो चलाने की स्थिति
  2. मीडिया आइटम की प्लेलिस्ट
    • प्लेबैक के लिए MediaItem इंस्टेंस का क्रम.
    • getCurrentTimeline() की मदद से वापस पाएं
    • Player इंस्टेंस के ज़रिए प्लेलिस्ट से जुड़ी कार्रवाई करने के तरीके दिए जा सकते हैं, जैसे कि जोड़ना या हटाना MediaItem और सुविधा के तरीके जैसे getCurrentMediaItem().
  3. चलाएं/रोकें की प्रॉपर्टी, जैसे:
    • playWhenReady: इस बात का संकेत कि उपयोगकर्ता चाहता है कि मीडिया संभव होने पर चले या बने रहे पॉज़ किया गया
    • वीडियो चलाने में रुकावट आने की वजह: इस बात का संकेत कि अगर लागू हो, तो भी वीडियो को रोका क्यों गया है playWhenReady true है
    • isPlaying: इस बात का संकेत कि खिलाड़ी अभी खेल रहा है या नहीं, जो कि अगर ��ीडियो ��लाने ���� ��्��िति STATE_READY है, तो true, playWhenReady true, और प्लेबैक रोका नहीं गया है
  4. वीडियो चलाने की पोज़िशन. इसमें, यह शामिल है:

इसके अलावा, Player इंटरफ़ेस उपलब्ध ट्रैक, मीडिया मेटाडेटा, वीडियो चलाने की स्पीड, वॉल्यूम और अन्य सहायक प्रॉपर्टी.

बदलावों को सुनें

Player.Listener का इस्तेमाल करें Player में हुए बदलावों को सुनने के लिए. इस पर ExoPlayer दस्तावेज़ देखें इसके लिए खिलाड़ी इवेंट लिसनर बनाने और उसका इस्तेमाल करने के बारे में जानकारी.

ध्यान दें कि लिसनर इंटरफ़ेस में सामान्य ट्रैक करने के लिए कोई कॉलबैक शामिल नहीं है वीडियो चलने में कितना समय लगेगा. प्लेबैक प्रोग्रेस पर लगातार नज़र रखने के लिए, जैसे कि सेट करने के लिए एक प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) शुरू करना है, तो आपको सही इंटरवल पर मौजूदा पोज़िशन की क्वेरी करनी चाहिए.

Kotlin

val handler = Handler(Looper.getMainLooper())
fun checkPlaybackPosition(delayMs: Long): Boolean =
  handler.postDelayed(
    {
      val currentPosition = player.currentPosition
      // Update UI based on currentPosition
      checkPlaybackPosition(delayMs)
    },
    delayMs)

Java

Handler handler = new Handler(Looper.getMainLooper());
boolean checkPlaybackPosition(long delayMs) {
    return handler.postDelayed(() -> {
        long currentPosition = player.getCurrentPosition();
        // Update UI based on currentPosition
        checkPlaybackPosition(delayMs);
    }, delayMs);
}

ऑडियो कंट्रोल करने का तरीक़ा

Player इंटरफ़ेस में, स्थिति और कंट्रोल को मैनेज करने के कई तरीके मिलते हैं प्लेबैक:

कस्टम Player लागू करना

कस्टम प्लेयर बनाने के लिए, SimpleBasePlayer Media3 में शामिल कर लिया गया है. यह क्लास, Player को बुनियादी तरीके से लागू करती है इंटरफ़ेस का उपयोग करें.

getState() तरीके को बदलकर शुरू करें. इस तरीके से प्लेयर की मौजूदा स्थिति. इसमें यह जानकारी शामिल होती है:

  • उपलब्ध निर्देशों का सेट
  • प्लेबैक प्रॉपर्टी, जैसे कि प्लेयर को वीडियो चलाने की स्थिति STATE_READY है, जो चल रहे मीडिया आइटम का इंडेक्स है, और मौजूदा आइटम को चलाने की पोज़िशन

Kotlin

class CustomPlayer : SimpleBasePlayer(looper) {
  override fun getState(): State {
    return State.Builder()
      .setAvailableCommands(...) // Set which playback commands the player can handle
      // Configure additional playback properties
      .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
      .setCurrentMediaItemIndex(0)
      .setContentPositionMs(0)
      .build()
  }
}

Java

public class CustomPlayer extends SimpleBasePlayer {
  public CustomPlayer(Looper looper) {
    super(looper);
  }

  @Override
  protected State getState() {
    return new State.Builder()
      .setAvailableCommands(...) // Set which playback commands the player can handle
      // Configure additional playback properties
      .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
      .setCurrentMediaItemIndex(0)
      .setContentPositionMs(0)
      .build();
  }
}

SimpleBasePlayer लागू करेगा कि State को राज्य के मानों का संयोजन. यह ऑडियंस को सूचना और जानकारी भी देगा, स्टेटस बदलने वाले लिसनर. अगर आपको मैन्युअल तौर पर, ऐप्लिकेशन के अपडेट होने की स्थिति अपडेट करनी है, तो invalidateState() को कॉल करें.

getState() वाले तरीके के अलावा, आपको सिर्फ़ उन तरीकों को लागू करना होगा जिनका इस्तेमाल किया जाता है उन कमांड के लिए जिन्हें आपका प्लेयर उपलब्ध होने का एलान करता है. बदला जा सकने वाला हैंडलर ढूंढें तरीका है जो उस फ़ंक्शन से जुड़ा है जिसे आपको लागू करना है. उदाहरण के लिए, handleSeek() को बदलें का तरीका चुनने की कोशिश करें, जैसे कि COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM और COMMAND_SEEK_TO_NEXT_MEDIA_ITEM.