वेब रिसीवर पर माइग्रेट करें

इस गाइड में, कास्ट रिसीवर का 2.0 ऐप्लिकेशन को नए वेब रिसीवर ऐप्लिकेशन पर माइग्रेट करने का तरीका बताया गया है.

नया रिसीवर ऐप्लिकेशन फ़्रेमवर्क (CAF) SDK, जिसे वेब रिसीवर v3 भी कहा जाता है, रिसीवर v2 SDK से दिया गया प्रमुख अपग्रेड है. वेब रिसीवर SDK, मीडिया वेब रिसीवर ऐप्लिकेशन डेवलप करने के लिए एक आसान, व्यवस्थित SDK उपलब्ध कराता है.

'वेब रिसीवर' एक एपीआई मुहैया कराता है जो नए सीएएफ़ भेजने वाले एपीआई के मुताबिक ज़्यादा बेहतर तरीके से काम करता है. इससे प्लेयर (MPL और Shaka) का पूरा इंटिग्रेशन मिलता है. साथ ही, इससे कास्ट मीडिया और Google Assistant के बोले गए निर्देशों को पूरी तरह लागू और इस्तेमाल करने में मदद मिलती है. CAF SDK एक डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) भी उपलब्ध कराता है, जिसे सीएसएस का इस्तेमाल करके आसानी से स्टाइल किया जा सकता है. साथ ही, एक डेटा बाइंडिंग सेवा देता है, जो यूज़र इंटरफ़ेस (यूआई) को आसानी से लागू करती है.

माइग्रेट क्यों करें?

रिसीवर v2 ऐप्लिकेशन को वेब रिसीवर पर माइग्रेट करने से, प्लेयर से जुड़े कई कोड खत्म हो सकते हैं, ताकि आप ऐप्लिकेशन के लिए खास कारोबारी नियम लिखने पर ध्यान दे सकें.

CAF, कई तरह के कॉन्टेंट पर काम करने के लिए, MPL और Shaka प्लेयर को आसानी से इंटिग्रेट करता है. इनमें एचटीटीपी लाइव स्ट्रीमिंग (TS और CMAF), MPEG-DASH, स्मूद स्ट्रीमिंग, और Media Element सोर्स प्रॉपर्टी (MP3, MP4, Icecast, वगैरह...) के साथ काम करने वाले कॉन्टेंट भी शामिल हैं. पूरी सूची के लिए Google Cast के लिए काम करने वाला मीडिया देखें. फ़िलहाल, CAF का इस्तेमाल, उपयोगकर्ता के दिए गए प्लेयर पर नहीं किया जा सकता.

CAF पर माइग्रेट करने से, आवाज़ से कंट्रोल करने की सुविधा Google Assistant पर काम करने लगेगी. CAF का इस्तेमाल करने पर, Google Assistant को निर्देश देने के लिए कोई भी नया निर्देश अपने-आप इस्तेमाल हो जाएगा.

नए मीडिया निर्देश—जैसे कि "भाषा के हिसाब से ट्रैक बदलना" और "वीडियो चलाने की दर बदलना" में काम करने के अलावा, सीएएफ़ की मदद से सूची में पहले से बेहतर सुविधाएं, पहले से मौजूद विज्ञापन, और लाइव सहायता भी मिलती है.

क्या बदलाव हुए हैं?

Web रिसीवर एपीआई उन तरीकों को अपनाने की कोशिश करता है जो सीएएफ़ भेजने वालों ने Android और iOS के लिए शुरू किए थे. यह वर्शन 2 से बहुत अलग है.

वेब रिसीवर सभी उभरे हुए एपीआई के लिए cast.receiver नेमस्पेस के बजाय cast.framework नए नेमस्पेस का इस्तेमाल कर रहा है. CA2 में, v2 में इस्तेमाल किए गए कई डेटा ऑब्जेक्ट एक जैसे हैं. उन्हें cast.framework.messages नेमस्पेस के ज़रिए दिखाया जाता है (वे ज़्यादातर cast.receiver.media से कम होते हैं).

नीचे दी गई v2 सेवाओं को संबंधित CAF सेवाओं से बदल दिया गया है:

  • CastReceiverManager क्लास को CastReceiverContext से बदल दिया जाता है, जो एक सिंगलटन होता है. यह कास्ट सेशन, भेजने वालों, कस्टम मैसेज भेजने, और ग्लोबल सिस्टम इवेंट को मैनेज करता है. CastReceiverOptions का इस्तेमाल, दुनिया भर में मौजूद ऐप्लिकेशन के विकल्प देने के लिए किया जा सकता है. जैसे, सूची, रिसीवर का वर्शन, वीडियो, कॉन्फ़िगरेशन वगैरह.
  • MediaManager क्लास को PlayerManager से बदल दिया गया है, जो CastReceiverContext सिंगलटन की प्रॉपर्टी है और यह मीडिया सेशन, मीडिया के अनुरोधों, Google Assistant के वॉइस अनुरोधों (CommandAndControlManager को v2 में) मैनेज करती है और मीडिया इवेंट फ़ायर करती है. प्लेयर का कॉन्फ़िगरेशन (MPL में cast.player.api.Host) PlaybackConfig से मिलता है, जो दुनिया भर में या हर बार लोड करने के अनुरोध के हिसाब से दिया जा सकता है.

PlayerManager नई सब-मैनेजर क्लास भी दिखाता है:

  • TextTracksManager - मीडिया टेक्स्ट ट्रैक मैनेज करें.
  • AudioTracksManager - ऑडियो ट्रैक मैनेज करें.
  • QueueManager - सूची को मैनेज करें.
  • BreakManager - विज्ञापन मैनेज करें.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

रिसीवर का व्यवसाय तर्क

पाने वाला v2 एक्सपोज़र इवेंट हैंडलर (जैसे कि CastReceiverManager.onReady या MediaManager.onLoad), जो कारोबार के तर्क जोड़ सकते हैं. CAF में इवेंट हैंडलर को इवेंट लिसनर (CastReceiverContext.addEventListener) और मैसेज इंटरसेप्टर (PlayerManager.setMessageInterceptor) से बदल दिया जाता है. वेब रिसीवर के पास किसी इवेंट के लिए कई इवेंट लिसनर हो सकते हैं (लिसनर, इवेंट पर असर नहीं डालता) और हर मैसेज में एक इंटरसेप्टर है. इंटरसेप्टर अनुरोध को अपडेट कर सकता है या उसे हैंडल कर सकता है, बदला गया अनुरोध, सफल मैसेज या गड़बड़ी का मैसेज दिखाना. साथ ही, वह एसिंक्रोनस हैंडलर भी हो सकता है, जो कोई प्रॉमिस रिटर्न करता है.

ऐप्लिकेशन-विशिष्ट तर्क जोड़ने के लिए लोड अनुरोध इंटरसेप्टर सबसे सामान्य स्थान है. भेजने वाले से लोड करने के अनुरोधों के लिए, लोड इंटरसेप्टर सामग्री आईडी को सामग्री यूआरएल में बदल सकता है. लोड इंटरसेप्टर को पहले से लोड करने और पहले से लोड करने के अनुरोधों के लिए भी कॉल किया जा रहा है. ऐसा तब किया जाता है, जब पहले से लोड या प्री-कैश के लिए कोई खास इंटरसेप्टर नहीं दिया गया हो.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

v2 कस्टमाइज़ किए गए मीडिया स्थिति हैंडलर को भी मीडिया स्थिति मैसेज के लिए मैसेज इंटरसेप्टर से बदल दिया जाता है. मीडिया फ़ाइल पाने वाले जो ऐप्लिकेशन, मीडिया स्टेटस में मीडिया यूआरएल नहीं दिखाना चाहते हैं वे यूआरएल रिज़ॉल्वर (PlayerManager.setMediaUrlResolver) उपलब्ध करा सकते हैं. इस यूआरएल से कॉन्टेंट लोड करने के अनुरोध के लिए, मीडिया का यूआरएल मिलता है. उस यूआरएल का इस्तेमाल अंदरूनी तौर पर CAF करता है और उसे मीडिया स्टेटस में नहीं दिया जाता है.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

इवेंट

वेब रिसीवर, CastReceiverContext और PlayerManager, दोनों से इवेंट का एक बड़ा सेट उपलब्ध कराता है. वेब रिसीवर ऐप्लिकेशन में किसी भी इवेंट पर एक से ज़्यादा लिसनर हो सकते हैं और वे कई इवेंट के लिए एक लिसनर भी उपलब्ध करा सकते हैं. (इवेंट के कुछ ग्रुप के लिए cast.framework.events.category देखें.)

इन इवेंट में उपयोगकर्ता के अनुरोध, वीडियो चलाने की स्थिति, प्लेयर प्रोसेसिंग, और लो-लेवल मीडिया एलिमेंट इवेंट (सीएएफ़), मीडिया एलिमेंट को ज़ाहिर नहीं करता है.

वेब रिसीवर ऐप्लिकेशन इवेंट सुनने वालों को कार्रवाई करने के लिए जोड़ सकता है (उदाहरण के लिए, लोड पूरा होने पर टेक्स्ट ट्रैक की परिभाषा जोड़ें) या आंकड़ों के लिए.

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

कस्टम मैसेज बस

CAF, एपीआई में मैसेज बस को सार्वजनिक नहीं करता है. इसके बजाय, यह किसी खास नेमस्पेस (सिर्फ़ एक नेमस्पेस) के लिए मैसेज आइडेंटिफ़ायर जोड़ने और CastReceiverContext.sendCustomMessage नेमस्पेस पर मैसेज भेजने के लिए उपलब्ध कराता है. वेब रिसीवर शुरू करने से पहले, सभी नेमस्पेस के बारे में बताएं

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई)

CAF एक डिफ़ॉल्ट वेब रिसीवर यूज़र इंटरफ़ेस (यूआई) देता है, जो प्लेबैक प्रगति बार और मीडिया मेटाडेटा को ज़रूरत के मुताबिक दिखाता है. डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) कस्टम एलिमेंट के तौर पर दिया जाता है (<cast-media-player>) जिसे सीएसएस जैसे स्टाइल की मदद से शैली में बदला जा सकता है.

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

ज़्यादा कस्टमाइज़ेशन के लिए, वेब रिसीवर ऐप्लिकेशन अपना खुद का यूज़र इंटरफ़ेस (यूआई) लागू कर सकता है. वेब रिसीवर, cast.framework.ui.PlayerDataBinder क्लास उपलब्ध कराता है, ताकि वेब रिसीवर की प्लेबैक स्थिति से किसी यूज़र इंटरफ़ेस (यूआई) को बाइंड किया जा सके.