मीडिया ट्रैक इस्तेमाल करना

MediaTrack यह मीडिया ट्रैक के बारे में बताता है. यह कोई ऑडियो स्ट्रीम, वीडियो स्ट्रीम या टेक्स्ट हो सकता है. जैसे, सबटाइटल या सबटाइटल. आपका ऐप्लिकेशन मीडिया ट्रैक को ग्रुप, स्टाइल, और चालू कर सकता है.

ट्रैक को कॉन्फ़िगर करना

किसी ट्रैक को कॉन्फ़िगर करके, उसके लिए यूनीक आईडी असाइन किया जा सकता है. नीचे दिया गया कोड एक अंग्रेज़ी टेक्स्ट ट्रैक, फ़्रेंच टेक्स्ट ट्रैक, और फ़्रेंच ऑडियो ट्रैक बनाता है. हर एक का अपना आईडी होता है:

कोटलिन
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
    .setName("English Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_en.vtt")
    /* language is required for subtitle type but optional otherwise */
    .setLanguage("en-US")
    .build()

val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
    .setName("French Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_fr.vtt")
    .setLanguage("fr")
    .build()

val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
    .setName("French Audio")
    .setContentId("trk0001")
    .setLanguage("fr")
    .build()
Java
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
  .setName("French Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_fr.vtt")
  .setLanguage("fr")
  .build();

MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
  .setName("French Audio")
  .setContentId("trk0001")
  .setLanguage("fr")
  .build();

ग्रुप ट्रैक

एक से ज़्यादा ट्रैक को किसी मीडिया आइटम में ग्रुप किया जा सकता है, जिसे MediaInfo से दिखाया जाता है. MediaInfo का एक इंस्टेंस, ट्रैक का एक कलेक्शन लेता है और मीडिया आइटम के बारे में अन्य जानकारी इकट्ठा करता है. उदाहरण के लिए, आपका ऐप्लिकेशन उन तीन मीडिया ट्रैक को किसी मीडिया आइटम में जोड़ सकता है. इसके लिए, यह उन तीनों ट्रैक की सूची को MediaInfo.Builder.setMediaTracks(List) में पास करेगा. मीडिया को पाने वाले के लिए लोड करने से पहले, आपके ऐप्लिकेशन को MediaInfo में ट्रैक इस तरह से जोड़ने होंगे.

कोटलिन
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>()
tracks.add(englishSubtitle)
tracks.add(frenchSubtitle)
tracks.add(frenchAudio)
val mediaInfo = MediaInfo.Builder(url)
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType(getContentType())
    .setMetadata(getMetadata())
    .setMediaTracks(tracks)
    .build()
Java
List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .build();

ट्रैक हटाएं

मौजूदा मीडिया से सभी ट्रैक हटाने (जैसे, उदाहरण में तीन सबटाइटल बंद करना) के लिए, MediaInfo.Builder.setMediaTracks(List) को कॉल करें और आईडी की खाली सूची दें.

ट्रैक अपडेट करें

आपका ऐप्लिकेशन, RemoteMediaClient.setActiveMediaTracks(long[]) को कॉल करके और चालू किए जाने वाले ट्रैक के आईडी पास करके, मीडिया आइटम (मीडिया लोड होने के बाद) से जुड़े एक या एक से ज़्यादा ट्रैक को चालू कर सकता है. इस उदाहरण में, फ़्रेंच सबटाइटल और फ़्रेंच ऑडियो की सुविधा को चालू किया गया है:

कोटलिन
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3))
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed with status code:" +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
Java
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(new long[]{2, 3})
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed with status code:" +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

टेक्स्ट ट्रैक को स्टाइल करें

TextTrackStyle टेक्स्ट ट्रैक की स्टाइलिंग से जुड़ी जानकारी को इकट्ठा करता है. किसी मौजूदा TextTrackStyle बनाने या अपडेट करने के बाद, मौजूदा समय में चल रहे मीडिया आइटम पर उस स्टाइल को लागू किया जा सकता है. इसके लिए, RemoteMediaClient.setTextTrackStyle को कॉल करें, जैसे:

कोटलिन
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed to set the style, status code: " +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
Java
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed to set the style, status code: " +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

आपके ऐप्लिकेशन में उपयोगकर्ताओं को यह अनुमति मिलनी चाहिए कि वे सिस्टम की दी गई सेटिंग या ऐप्लिकेशन की मदद से, टेक्स्ट ट्रैक की स्टाइल अपडेट कर सकें. Android KitKat और इसके बाद के वर्शन में, फ़्रेमवर्क के हिसाब से सिस्टम में मौजूद क्लोज़्ड कैप्शन सेटिंग का इस्तेमाल किया जा सकता है. ये सेटिंग इन फ़्रेमवर्क के हिसाब से उपलब्ध होती हैं:

कोटलिन
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
Java
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

KitKat से पहले के वर्शन के लिए, ऊपर दिया गया कॉल एक ऐसा ऑब्जेक्ट दिखाएगा जिसके फ़ील्ड तय नहीं हैं. इसलिए, आपको अपने ऐप्लिकेशन में उन फ़ील्ड को उपयोगकर्ता के चुने हुए और कुछ डिफ़ॉल्ट वैल्यू के आधार पर पॉप्युलेट करना होगा. आप इन टेक्स्ट ट्रैक शैली तत्वों को शैली दे सकते हैं:

  • फ़ोरग्राउंड (टेक्स्ट) का रंग और अपारदर्शिता
  • बैकग्राउंड का रंग और अपारदर्शिता
  • किनारे का प्रकार
  • किनारे का रंग
  • फ़ॉन्ट स्केल
  • फ़ॉन्ट परिवार
  • फ़ॉन्ट स्टाइल

उदाहरण के लिए, टेक्स्ट के रंग को 50% ओपैसिटी (80) के साथ लाल (FF) पर इस तरह सेट करें:

कोटलिन
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
Java
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

KitKat और इसके बाद के वर्शन में, आपको पूरे सिस्टम के लिए सबटाइटल की सेटिंग अपडेट होने पर सूचना पाने के लिए, अपना ऐप्लिकेशन रजिस्टर करना चाहिए. इसके लिए, आपको अपने ऐप्लिकेशन में CaptioningManager.CaptioningChangeListener लागू करना होगा और लिसनर को रजिस्टर करना होगा. इसके लिए:

कोटलिन
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
Java
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

अगर आपके ऐप्लिकेशन को वापस कॉल आता है कि कैप्शन सेटिंग बदल गई हैं, तो आपको नई सेटिंग में बदलाव करना होगा. इसके बाद, मीडिया के लिए, मौजूदा समय में चल रहे टेक्स्ट कैप्शन की स्टाइल को अपडेट करना होगा. ऐसा RemoteMediaClient.setTextTrackStyle को कॉल करके और पास करके किया जा सकता है.

स्टेटस से जुड़े अपडेट पाएं

जब मैसेज पाने वाले कई लोगों को एक ही रिसीवर से कनेक्ट किया जाता है, तो भेजने वाले हर व्यक्ति के लिए इन बदलावों की जानकारी होना ज़रूरी होता है, भले ही वे बदलाव दूसरे भेजने वालों ने ही किए हों.

इसके लिए, आपके ऐप्लिकेशन को RemoteMediaClient.Listener और RemoteMediaClient.ProgressListener को रजिस्टर करना होगा.

अगर मौजूदा मीडिया में TextTrackStyle बदलाव होता है, तो ईमेल भेजने वाले सभी लोगों को ऊपर रजिस्टर किए गए दोनों लिसनर के ज़रिए सूचना दी जाएगी. इस मामले में, मैसेज पाने वाले का SDK टूल इस बात की पुष्टि नहीं करता है कि नई स्टाइल, पिछली स्टाइल से अलग है या नहीं. साथ ही, वह कनेक्ट किए गए सभी ईमेल पतों की सूचना भी देता है. हालांकि, चालू ट्रैक के स्टेटस में बदलाव होने पर, सिर्फ़ कनेक्ट किए गए लोगों के ईमेल पतों पर मौजूद RemoteMediaClient.ProgressListener को सूचना दी जाएगी.

सीओआरएस से जुड़ी शर्तें पूरी करें

अडैप्टिव मीडिया स्ट्रीमिंग के लिए, Google Cast को सीओआरएस हेडर की ज़रूरत होती है. हालांकि, आसान mp4 मीडिया स्ट्रीम में भी ट्रैक शामिल होने पर, सीओआरएस की ज़रूरत होती है. अगर आपको किसी भी मीडिया के लिए ट्रैक चालू करना है, तो आपको अपनी ट्रैक स्ट्रीम और मीडिया स्ट्रीम, दोनों के लिए सीओआरएस को चालू करना होगा. इसलिए, अगर आपके सर्वर पर सामान्य mp4 मीडिया के लिए सीओआरएस हेडर उपलब्ध नहीं है और फिर एक सामान्य सबटाइटल ट्रैक जोड़ा जाता है, तो जब तक सही सीओआरएस हेडर शामिल करने के लिए अपने सर्वर को अपडेट नहीं किया जाता, तब तक आपका मीडिया स्ट्रीम नहीं किया जा सकेगा. इसके अलावा, आपको कम से कम इन हेडर को इस्तेमाल करने की अनुमति देनी होगी: कॉन्टेंट-टाइप, स्वीकार करने का तरीका, और रेंज. ध्यान दें कि आखिरी दो हेडर, ऐसे अतिरिक्त हेडर हैं जिनकी शायद आपको पहले ज़रूरत न हो.