किसी मीडिया से क्वेरी करने और उसे कंट्रोल करने के लिए, मीडिया कंट्रोलर, मीडिया सेशन से इंटरैक्ट करता है
ऐप्लिकेशन पर वीडियो चलाने की सुविधा देते हैं. Media3 में, MediaController
एपीआई, Player
इंटरफ़ेस को लागू करता है. मीडिया का इस्तेमाल करने वाले क्लाइंट ऐप्लिकेशन के उदाहरण
कंट्रोलर में शामिल है:
- Android सिस्टम के मीडिया कंट्रोल
- Android Wear OS का साथी ऐप्लिकेशन
- Android Auto और Automotive OS
- वॉइस असिस्टेंट, जैसे कि Google Assistant
- मीडिया कंट्रोलर टेस्ट ऐप्लिकेशन
मीडिया कंट्रोलर किसी मीडिया ऐप्लिकेशन में भी काम का हो सकता है. उदाहरण के लिए, अगर
प्लेयर और मीडिया सत्र Service
में Activity
से अलग
यूज़र इंटरफ़ेस (यूआई) वाला Fragment
.
एक MediaController
बनाएं
MediaController
बनाने के लिए, SessionToken
संबंधित MediaSession
. इसका onStart()
तरीका आपके Activity
या
इसके लिए, Fragment
एक अच्छा तरीका हो सकता है.
Kotlin
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
Java
SessionToken sessionToken = new SessionToken(context, new ComponentName(context, PlaybackService.class));
इसके बाद MediaController
बनाने के लिए इस SessionToken
का इस्तेमाल करने पर,
कंट्रोलर को दिए गए सेशन में ले जाना चाहती है. यह काम एसिंक्रोनस रूप से होता है, इसलिए आपको
नतीजे को सुनें और उपलब्ध होने पर इसका इस्तेमाल करें.
Kotlin
val controllerFuture = MediaController.Builder(context, sessionToken).buildAsync() controllerFuture.addListener({ // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor())
Java
ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(context, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor());
MediaController
का इस्तेमाल करें
MediaController
, Player
इंटरफ़ेस को लागू करता है, ताकि आप निर्देशों का इस्तेमाल कर सकें
इंटरफ़ेस में, कनेक्ट किए गए MediaSession
के प्लेबैक को कंट्रोल करने के लिए बनाया गया है.
इसका मतलब यह है कि MediaController
पर play()
को कॉल करने पर
कमांड की मदद से कनेक्ट किए गए MediaSession
को निर्देश दें, जो बाद में
आदेश को इसके अंतर्निहित Player
में जोड़ दें.
इसी तरह, आप सुनने के लिए कंट्रोलर में Player.Listener
जोड़ सकते हैं
Player
की स्थिति में बदलाव. देखें
खिलाड़ी इवेंट गाइड
Player.Listener
पर जाएं. MediaController.Listener
इंटरफ़ेस
MediaSession
से जुड़े हैं, जैसे कि
onAvailableSessionCommandsChanged()
जब मीडिया सेशन, उपलब्ध सेशन कमांड को बदलता है और
onDisconnected()
जब कंट्रोलर को सेशन से डिसकनेक्ट कर दिया जाता है.
दूसरे कॉम्पोनेंट की तरह, MediaController
को तब रिलीज़ करना न भूलें, जब यह
अब ज़रूरत नहीं है, जैसे कि onStop()
तरीके में Activity
या
Fragment
.
Kotlin
MediaController.releaseFuture(controllerFuture)
Java
MediaController.releaseFuture(controllerFuture);
नियंत्रक को छोड़ने से अब भी सत्र और केवल इन कमांड के बाद सत्र सेवा से बाइंड करना बंद करें. हैंडल किए जा सकें या टाइम आउट की अवधि के बाद, जो भी पहले हो.
MediaBrowser
बनाना और उसका इस्तेमाल करना
एक MediaBrowser
,
किसी मीडिया की मीडिया लाइब्रेरी को ब्राउज़ करने की सुविधा भी चालू करने के लिए MediaController
ऐप्लिकेशन का MediaLibraryService
.
Kotlin
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync() browserFuture.addListener({ // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor())
Java
ListenableFuture<MediaBrowser> browserFuture = new MediaBrowser.Builder(context, sessionToken).buildAsync(); browserFuture.addListener(() -> { // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor());
मीडिया ऐप्लिकेशन की कॉन्टेंट लाइब्रेरी ब्राउज़ करने के लिए, पहले रूट नोड को वापस पाएं
getLibraryRoot()
के साथ:
Kotlin
// Get the library root to start browsing the library tree. val rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null) rootFuture.addListener({ // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor())
Java
// Get the library root to start browsing the library tree. ListenableFuture<LibraryResult<MediaItem>> rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null); rootFuture.addListener(() -> { // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor());
इसके बाद आप मीडिया लाइब्रेरी में नेविगेट करने के लिए,
getChildren()
के साथ लाइब्रेरी में MediaItem
. उदाहरण के लिए,
रूट नोड MediaItem
के चाइल्ड:
Kotlin
// Get the library root to start browsing the library tree. val childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Int.MAX_VALUE, null) childrenFuture.addListener({ // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor())
Java
ListenableFuture<LibraryResult<ImmutableList<MediaItem>>> childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Integer.MAX_VALUE, null); childrenFuture.addListener(() -> { // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor());