प्लेयर आपके ऐप्लिकेशन का वह हिस्सा होता है जिसकी मदद से मीडिया आइटम चलाए जा सकते हैं.
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
में ऐसा खिलाड़ी हो जो
फ़ोरग्राउंड सेवा का इस्तेमाल करें. अगर ऐसा किया जाता है, तो अपने प्लेयर को ऐक्टिविटी से अलग किया जा सकता है
जिसमें प्लेबैक कंट्रोल के लिए यूज़र इंटरफ़ेस (यूआई) शामिल है. इसकी ज़रूरत पड़ सकती है
मीडिया कंट्रोलर का इस्तेमाल किया जाता है.
प्लेयर की स्थिति
Player
इंटरफ़ेस को लागू करने वाले मीडिया प्लेयर की स्थिति में
डेटा की चार कैटगरी होती हैं:
- वीडियो चलाने की स्थिति
getPlaybackState()
की मदद से वापस पाएं.- इंटरफ़ेस में तय की गई स्टेट वैल्यू है
STATE_IDLE
STATE_BUFFERING
,STATE_READY
, औरSTATE_ENDED
.
- मीडिया आइटम की प्लेलिस्ट
- प्लेबैक के लिए
MediaItem
इंस्टेंस का क्रम. getCurrentTimeline()
की मदद से वापस पाएंPlayer
इंस्टेंस के ज़रिए प्लेलिस्ट से जुड़ी कार्रवाई करने के तरीके दिए जा सकते हैं, जैसे कि जोड़ना या हटानाMediaItem
और सुविधा के तरीके जैसेgetCurrentMediaItem()
.
- प्लेबैक के लिए
- चलाएं/रोकें की प्रॉपर्टी, जैसे:
playWhenReady
: इस बात का संकेत कि उपयोगकर्ता चाहता है कि मीडिया संभव होने पर चले या बने रहे पॉज़ किया गया- वीडियो चलाने में रुकावट आने की वजह:
इस बात का संकेत कि अगर लागू हो, तो भी वीडियो को रोका क्यों गया है
playWhenReady
true
है isPlaying
: इस बात का संकेत कि खिलाड़ी अभी खेल रहा है या नहीं, जो कि अगर वीडियो चलाने की स्थितिSTATE_READY
है, तोtrue
,playWhenReady
true
, और प्लेबैक रोका नहीं गया है
- वीडियो चलाने की पोज़िशन. इसमें, यह शामिल है:
- मौजूदा मीडिया आइटम इंडेक्स:
प्लेलिस्ट में मौजूदा
MediaItem
का इंडेक्स. isPlayingAd
: इस बात का संकेत कि डाला गया विज्ञापन चल रहा है या नहीं.- वीडियो चलाने की मौजूदा जगह:
वर्तमान
MediaItem
या शामिल किए गए विज्ञापन में वर्तमान प्लेबैक स्थिति.
- मौजूदा मीडिया आइटम इंडेक्स:
प्लेलिस्ट में मौजूदा
इसके अलावा, 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
इंटरफ़ेस में, स्थिति और कंट्रोल को मैनेज करने के कई तरीके मिलते हैं
प्लेबैक:
- वीडियो चलाने के बुनियादी कंट्रोल
जैसे,
play()
,pause()
,prepare()
, औरstop()
. - प्लेलिस्ट से जुड़ी कार्रवाइयां, जैसे
addMediaItem()
याremoveMediaItem()
. - इसमें बदलाव करना मौजूदा आइटम या स्थिति.
- रिपीट मोड सेट करें और शफ़ल मोड.
- अपडेट करें चुनने की प्राथमिकताएं ट्रैक करें.
- सेट करें वीडियो चलाने की स्पीड.
कस्टम 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
.