किसी मीडिया ऐप्लिकेशन से कनेक्ट करना

किसी मीडिया से क्वेरी करने और उसे कंट्रोल करने के लिए, मीडिया कंट्रोलर, मीडिया सेशन से इंटरैक्ट करता है ऐप्लिकेशन पर वीडियो चलाने की सुविधा देते हैं. Media3 में, MediaController एपीआई, Player इंटरफ़ेस को लागू करता है. मीडिया का इस्तेमाल करने वाले क्लाइंट ऐप्लिकेशन के उदाहरण कंट्रोलर में शामिल है:

मीडिया कंट्रोलर किसी मीडिया ऐप्लिकेशन में भी काम का हो सकता है. उदाहरण के लिए, अगर प्लेयर और मीडिया सत्र Service में Activity से अलग यूज़र इंटरफ़ेस (यूआई) वाला Fragment.

MediaController बनाएं

MediaController बनाने के लिए, उससे जुड़े MediaSession के लिए SessionToken बनाएं. इसका onStart() तरीका आपके Activity या इसके लिए, Fragment एक अच्छा तरीका हो सकता है.

KotlinJava
val sessionToken = 
  SessionToken(context, ComponentName(context, PlaybackService::class.java))
SessionToken sessionToken = 
  new SessionToken(context, new ComponentName(context, PlaybackService.class));

इसके बाद MediaController बनाने के लिए इस SessionToken का इस्तेमाल करने पर, कंट्रोलर को दिए गए सेशन में ले जाना चाहती है. यह प्रोसेस एसिंक्रोनस तरीके से होती है. इसलिए, आपको नतीजे के लिए इंतज़ार करना चाहिए और उपलब्ध होने पर उसका इस्तेमाल करना चाहिए.

KotlinJava
val controllerFuture =
  MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
  // MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())
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.

KotlinJava
MediaController.releaseFuture(controllerFuture)
MediaController.releaseFuture(controllerFuture);

कंट्रोलर को रिलीज़ करने पर भी, सेशन में भेजे गए सभी निर्देश डिलीवर किए जाएंगे. साथ ही, सेशन सेवा से सिर्फ़ तब अनबाइंड किया जाएगा, जब इन निर्देशों को मैनेज कर लिया जाएगा या टाइम आउट की अवधि खत्म हो जाएगी.

MediaBrowser बनाना और उसका इस्तेमाल करना

MediaBrowser, MediaController की सुविधाओं के साथ काम करता है. इससे मीडिया ऐप्लिकेशन के MediaLibraryService की लाइब्रेरी को ब्राउज़ करने की सुविधा भी मिलती है.

KotlinJava
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
  // MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())
ListenableFuture<MediaBrowser> browserFuture =
  new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
  // MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());

मीडिया ऐप्लिकेशन की कॉन्टेंट लाइब्रेरी को ब्राउज़ करना शुरू करने के लिए, सबसे पहले getLibraryRoot() का इस्तेमाल करके रूट नोड पाएं:

KotlinJava
// 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())
// 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 के चाइल्ड:

KotlinJava
// 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())
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());