ย้ายข้อมูลไปยัง Web Receiver

คำแนะนำนี้อธิบายวิธีย้ายข้อมูลแอป Cast Receiver v2 ไปยังเว็บเวอร์ชันล่าสุด แอปตัวรับสัญญาณ

Cast Application Framework (CAF) SDK ใหม่หรือที่เรียกว่า Web Receiver v3 การอัปเกรดครั้งใหญ่จาก Receiver v2 SDK Web Receiver SDK มอบ SDK ที่ใช้งานง่ายและมีประสิทธิภาพสำหรับการพัฒนาแอปพลิเคชัน Web Receiver ของสื่อ

Web Receiver มี API ที่สอดคล้องกับผู้ส่ง CAF ใหม่มากขึ้น API มาพร้อมโปรแกรมเล่น (MPL และ Shaka) และเต็มรูปแบบ การใช้งานและการสนับสนุนสำหรับสื่อ Cast และ Google Assistant คำสั่งเสียง CAF SDK ยังมี UI เริ่มต้นซึ่งจัดรูปแบบได้อย่างง่ายดายอีกด้วย โดยใช้ CSS และบริการเชื่อมโยงข้อมูลเพื่อลดความซับซ้อนในการใช้งาน UI

เหตุผลที่ต้องย้ายข้อมูล

ด้วยการย้ายข้อมูลแอปพลิเคชัน Receiver v2 ไปยัง Web Receiver โค้ดจำนวนมากที่ส่ง สามารถกำจัดการเล่นเกมได้ คุณจึงจดจ่อกับการเขียน ตรรกะทางธุรกิจที่ใช้เฉพาะแอปพลิเคชัน

CAF ผสานรวมโปรแกรมเล่น MPL และ Shaka ได้อย่างราบรื่นเพื่อรองรับการใช้งาน ประเภทเนื้อหา ซึ่งรวมถึง HTTP Live Streaming (TS และ CMAF), MPEG-DASH, Smooth สตรีมมิงและประเภทที่รองรับโดยพร็อพเพอร์ตี้แหล่งที่มาขององค์ประกอบสื่อ (MP3, MP4, Icecast เป็นต้น) หากต้องการดูรายการทั้งหมด โปรดดูที่สื่อที่รองรับ Google Cast ขณะนี้ CAF ไม่รองรับโปรแกรมเล่นที่ผู้ใช้ระบุ

การย้ายข้อมูลไปยัง CAF จะเพิ่มการรองรับการควบคุมด้วยเสียงด้วย Google Assistant ระบบจะรองรับคำสั่งเสียงใหม่ของ Google Assistant โดยอัตโนมัติเมื่อ โดยใช้ CAF

นอกเหนือจากการสนับสนุนคำสั่งสื่อใหม่ๆ เช่น "เปลี่ยนแทร็กตามภาษา" และ "เปลี่ยนอัตราการเล่น" CAF ยังช่วยให้จัดคิวโฆษณาในตัวได้ดีขึ้น การสนับสนุนและการสนับสนุนแบบเรียลไทม์ที่ดีขึ้น

สิ่งที่เปลี่ยนแปลง

Web Receiver API พยายามทำตามรูปแบบที่นำมาใช้โดย ผู้ส่ง CAF สำหรับ Android และ iOS และค่อนข้างแตกต่างจาก v2

ตัวรับเว็บกำลังใช้เนมสเปซใหม่ cast.framework แทนที่จะเป็นเนมสเปซ cast.receiver สำหรับ API ทั้งหมดที่เปิดเผย จำนวนมาก ออบเจ็กต์ข้อมูลที่ v2 ใช้นั้นเหมือนกันใน CAF และเปิดเผยภายใต้ เวลา cast.framework.messages เนมสเปซ (ส่วนใหญ่อยู่ภายใต้ cast.receiver.media)

ระบบจะแทนที่บริการ v2 ต่อไปนี้ด้วยบริการ CAF ที่เกี่ยวข้อง

  • แทนที่ CastReceiverManager ชั้นเรียนด้วยแล้ว CastReceiverContext ซึ่งเป็น Singleton ที่จัดการเซสชันการแคสต์ ผู้ส่ง และส่งข้อความที่กำหนดเอง และเหตุการณ์ของระบบทั่วโลก CastReceiverOptions สามารถใช้ในการมอบตัวเลือกส่วนกลางของแอปพลิเคชัน (เช่น คิว, ตัวรับสัญญาณ เวอร์ชัน การกำหนดค่าการเล่น ฯลฯ) เข้ากับบริบท
  • แทนที่ MediaManager ชั้นเรียนด้วยแล้ว PlayerManager ซึ่งเป็นพร็อพเพอร์ตี้ของ CastReceiverContext Singleton และจัดการเซสชันสื่อ, คำขอสื่อ, Google คำขอด้วยเสียงจาก Assistant (CommandAndControlManager ในเวอร์ชัน 2) และเริ่มเหตุการณ์สื่อ การกำหนดค่าสำหรับผู้เล่น (cast.player.api.Host สำหรับ MPL) ให้บริการโดย PlaybackConfig, ซึ่งสามารถให้บริการได้ทั่วโลกหรือตามคําขอโหลด

นอกจากนี้ PlayerManager จะแสดงชั้นเรียนบัญชีดูแลจัดการย่อยใหม่ด้วย

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 เครื่องจัดการเหตุการณ์คือ แทนที่ด้วย Listener เหตุการณ์ (CastReceiverContext.addEventListener) และเครื่องมือดักจับข้อความ (PlayerManager.setMessageInterceptor) ตัวรับเว็บสามารถมี Listener เหตุการณ์ได้หลายรายการสำหรับเหตุการณ์ (Listener เหตุการณ์) ไม่มีผลต่อเหตุการณ์) และตัวดักจับ 1 รายการต่อข้อความ อินเตอร์เซ็ปเตอร์ จะสามารถอัปเดตหรือจัดการคำขอ (แสดงคำขอที่แก้ไข, หรือข้อความแสดงข้อผิดพลาด) และสามารถเป็นเครื่องจัดการแบบไม่พร้อมกันที่ส่งคืนคำสัญญา

ตัวตัดคำขอโหลดเป็นตำแหน่งที่ใช้กันมากที่สุดในการเพิ่ม ตรรกะเฉพาะแอปพลิเคชัน สำหรับคำขอโหลดจากผู้ส่ง ภาระงาน สามารถแปลงรหัสเนื้อหาเป็น URL เนื้อหาได้ ตัวตัดโหลดคือ ระบบยังจะถูกเรียกคำขอโหลดล่วงหน้าและแคชล่วงหน้าด้วยหากไม่มีตัวดักจับข้อมูลที่ชัดเจน สำหรับการโหลดล่วงหน้าหรือแคชล่วงหน้า

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 จะถูกแทนที่ด้วยข้อความ ข้อความสถานะสื่อ แอป Web Receiver ที่ไม่ต้องการ แสดง URL ของสื่อในสถานะสื่อ ซึ่งสามารถระบุรีโซลเวอร์ URL ได้ (PlayerManager.setMediaUrlResolver), ซึ่งจะระบุ URL สื่อสำหรับคำขอโหลด CAF ใช้ URL ดังกล่าว เป็นการภายในและไม่ได้ระบุไว้ในสถานะสื่อ

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

กิจกรรม

ตัวรับเว็บมีชุดเหตุการณ์ที่ครอบคลุมทั้งจาก CastReceiverContext และ PlayerManager แอป Web Receiver สามารถมี Listener ได้หลายตัวในกิจกรรมใดก็ได้ และ ทั้งยังมอบ Listener 1 ให้กับหลายเหตุการณ์ได้ด้วย (โปรดดู cast.framework.events.category สำหรับเหตุการณ์บางกลุ่ม)

กิจกรรมดังกล่าวจะครอบคลุมคำขอของผู้ใช้ ความคืบหน้าในการเล่น การประมวลผลของโปรแกรมเล่น เหตุการณ์ขององค์ประกอบสื่อระดับต่ำ (CAF ไม่เปิดเผยตัวองค์ประกอบสื่อ)

แอป Web Receiver สามารถเพิ่ม Listener เหตุการณ์เพื่อดำเนินการ (เช่น เพิ่มข้อความ ติดตามคำจำกัดความเมื่อการโหลดเสร็จสมบูรณ์) หรือสำหรับการวิเคราะห์

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

บัสข้อความที่กำหนดเอง

CAF ไม่ได้แสดงบัสข้อความใน API แต่จะแสดง CastReceiverContext.addCustomMessageListener เพื่อเพิ่ม Listener ข้อความสำหรับเนมสเปซที่ระบุ (เพียง 1 รายการต่อเนมสเปซ) และ CastReceiverContext.sendCustomMessage เพื่อส่งข้อความในเนมสเปซ ต้องประกาศเนมสเปซทั้งหมดก่อน เริ่มใช้งานตัวรับเว็บ (ซึ่งก็คือก่อนการโทร CastReceiverContext.start) สามารถประกาศเนมสเปซได้โดย การเพิ่ม Listener ข้อความให้กับพวกเขาหรือสามารถให้เป็นตัวเลือกเริ่มต้นใน CastReceiverOptions.customNamespaces

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'
});

UI เริ่มต้น

CAF มี UI เริ่มต้นของตัวรับเว็บที่แสดงแถบความคืบหน้าในการเล่น และ ข้อมูลเมตาของสื่อตามต้องการ UI เริ่มต้นเป็นองค์ประกอบที่กำหนดเอง (<cast-media-player>) ที่จัดรูปแบบด้วยการจัดรูปแบบที่เหมือน CSS ได้

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

สำหรับการปรับแต่งเพิ่มเติม แอป Web Receiver สามารถใช้งาน UI ของตัวเองได้ Web Receiver มอบ cast.framework.ui.PlayerDataBinder เพื่อช่วยเชื่อมโยงออบเจ็กต์ UI กับสถานะการเล่นของตัวรับเว็บ