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

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

मीडिया कंट्रोलर किसी मीडिया ऐप्लिकेशन में भी काम का हो सकता है. उदाहरण के लिए, अगर प्लेयर और मीडिया सत्र 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());