Cast SDK را در برنامه فرستنده وب خود ادغام کنید

این راهنمای برنامه‌نویس نحوه افزودن پشتیبانی Google Cast را با استفاده از Cast SDK به برنامه Web Sender خود توضیح می‌دهد.

واژه شناسی

دستگاه تلفن همراه یا مرورگر فرستنده است که پخش را کنترل می کند. دستگاه Google Cast گیرنده ای است که محتوا را برای پخش روی صفحه نمایش می دهد.

Web Sender SDK از دو بخش تشکیل شده است: Framework API ( cast.framework ) و Base API ( chrome.cast ) به طور کلی، شما با یک Framework API ساده تر و سطح بالاتر تماس برقرار می کنید، که سپس توسط فریم ورک پایین تر پردازش می شود. سطح پایه API.

چارچوب فرستنده به Framework API، ماژول و منابع مرتبط اشاره دارد که پوششی را در اطراف عملکرد سطح پایین‌تر ارائه می‌کنند. برنامه فرستنده یا برنامه Google Cast Chrome به یک برنامه وب (HTML/JavaScript) اشاره دارد که در یک مرورگر Chrome در دستگاه فرستنده اجرا می شود. برنامه گیرنده وب به یک برنامه HTML/JavaScript که در Chromecast یا دستگاه Google Cast اجرا می شود اشاره دارد.

چارچوب فرستنده از یک طراحی پاسخ به تماس ناهمزمان برای اطلاع رسانی به برنامه فرستنده از رویدادها و انتقال بین حالت های مختلف چرخه عمر برنامه Cast استفاده می کند.

کتابخانه را بارگیری کنید

برای اینکه برنامه شما ویژگی‌های Google Cast را اجرا کند، باید مکان Google Cast Web Sender SDK را بداند، همانطور که در زیر نشان داده شده است. پارامتر پرس و جو URL loadCastFramework را برای بارگیری Web Sender Framework API نیز اضافه کنید. همه صفحات برنامه شما باید به صورت زیر به کتابخانه مراجعه کنند:

<script src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"></script>

چارچوب

Web Sender SDK از cast.framework استفاده می کند. * فضای نام فضای نام نشان دهنده موارد زیر است:

  • روش ها یا توابعی که عملیات را در API فراخوانی می کنند
  • شنوندگان رویداد برای توابع شنونده در API

چارچوب از این اجزای اصلی تشکیل شده است:

  • CastContext یک شی تک‌تنه است که اطلاعاتی در مورد وضعیت Cast فعلی ارائه می‌کند و رویدادها را برای تغییر وضعیت Cast و Cast session فعال می‌کند.
  • شی CastSession جلسه را مدیریت می کند -- اطلاعات وضعیت را ارائه می دهد و رویدادهایی مانند تغییر در حجم دستگاه، وضعیت بی صدا و ابرداده برنامه را راه اندازی می کند.
  • عنصر دکمه Cast، که یک عنصر سفارشی ساده HTML است که دکمه HTML را گسترش می دهد. اگر دکمه Cast ارائه شده کافی نیست، می توانید از حالت Cast برای اجرای دکمه Cast استفاده کنید.
  • RemotePlayerController اتصال داده را برای ساده سازی اجرای پخش کننده از راه دور فراهم می کند.

برای توضیح کامل فضای نام ، مرجع API فرستنده وب Google Cast را مرور کنید.

دکمه Cast

مؤلفه دکمه Cast در برنامه شما به طور کامل توسط چارچوب مدیریت می شود. این شامل مدیریت دید و همچنین مدیریت رویداد کلیک می شود.

<google-cast-launcher></google-cast-launcher>

همچنین، می توانید دکمه را به صورت برنامه ریزی شده ایجاد کنید:

document.createElement("google-cast-launcher");

در صورت لزوم می‌توانید هر گونه استایل اضافی مانند اندازه یا موقعیت را روی عنصر اعمال کنید. از ویژگی --connected-color برای انتخاب رنگ برای حالت گیرنده وب متصل و --disconnected-color برای حالت قطع استفاده کنید.

مقداردهی اولیه

پس از بارگیری چارچوب API، برنامه با window.__onGCastApiAvailable . باید مطمئن شوید که برنامه قبل از بارگیری کتابخانه فرستنده، این کنترلر را روی window تنظیم می کند.

در این کنترلر، تعامل Cast را با فراخوانی متد setOptions(options) CastContext مقداردهی اولیه می‌کنید.

مثلا:

<script>
window['__onGCastApiAvailable'] = function(isAvailable) {
  if (isAvailable) {
    initializeCastApi();
  }
};
</script>

سپس، API را به صورت زیر مقداردهی اولیه می کنید:

initializeCastApi = function() {
  cast.framework.CastContext.getInstance().setOptions({
    receiverApplicationId: applicationId,
    autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
  });
};

ابتدا برنامه نمونه تکی شی CastContext ارائه شده توسط چارچوب را بازیابی می کند. سپس از setOptions(options) با استفاده از یک شی CastOptions برای تنظیم applicationID استفاده می کند.

اگر از گیرنده رسانه پیش‌فرض استفاده می‌کنید که نیازی به ثبت نام ندارد، به جای applicationID ، از یک ثابت از پیش تعریف شده توسط Web Sender SDK استفاده می‌کنید، همانطور که در زیر نشان داده شده است:

cast.framework.CastContext.getInstance().setOptions({
  receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
});

کنترل رسانه ها

هنگامی که CastContext مقداردهی اولیه شد، برنامه می‌تواند در هر زمانی CastSession فعلی را با استفاده از getCurrentSession() بازیابی کند.

var castSession = cast.framework.CastContext.getInstance().getCurrentSession();

از CastSession می توان برای بارگیری رسانه به دستگاه Cast متصل با استفاده از loadMedia(loadRequest) استفاده کرد. ابتدا یک MediaInfo با استفاده از contentId و contentType و همچنین سایر اطلاعات مرتبط با محتوا ایجاد کنید. سپس یک LoadRequest از آن ایجاد کنید و تمام اطلاعات مربوط به درخواست را تنظیم کنید. در نهایت، loadMedia(loadRequest) را در CastSession خود فراخوانی کنید.

var mediaInfo = new chrome.cast.media.MediaInfo(currentMediaURL, contentType);
var request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
  function() { console.log('Load succeed'); },
  function(errorCode) { console.log('Error code: ' + errorCode); });

متد loadMedia یک Promise را برمی‌گرداند که می‌توان از آن برای انجام هرگونه عملیات لازم برای نتیجه موفقیت‌آمیز استفاده کرد. اگر Promise رد شود، آرگومان تابع یک chrome.cast.ErrorCode خواهد بود.

می‌توانید به متغیرهای وضعیت پخش‌کننده در RemotePlayer دسترسی داشته باشید. تمام تعاملات با RemotePlayer ، از جمله فراخوانی رویدادهای رسانه ای و دستورات، با RemotePlayerController انجام می شود.

var player = new cast.framework.RemotePlayer();
var playerController = new cast.framework.RemotePlayerController(player);

RemotePlayerController به برنامه کنترل رسانه کامل PLAY، MAUSE، STOP و SEEK را برای رسانه بارگذاری شده می دهد.

  • PLAY/PAUSE: playerController.playOrPause();
  • STOP: playerController.stop();
  • SEEK: playerController.seek();

RemotePlayer و RemotePlayerController را می توان با چارچوب های اتصال داده، مانند Polymer یا Angular، برای پیاده سازی یک پخش کننده از راه دور استفاده کرد.

در اینجا یک قطعه کد برای Angular آمده است:

<button id="playPauseButton" class="playerButton"
  ng-disabled="!player.canPause"
  ng-click="controller.playOrPause()">
    {{player.isPaused ? 'Play' : 'Pause'}}
</button>
<script>
var player = new cast.framework.RemotePlayer();
var controller = new cast.framework.RemotePlayerController(player);
// Listen to any player update, and trigger angular data binding
update.controller.addEventListener(
  cast.framework.RemotePlayerEventType.ANY_CHANGE,
  function(event) {
    if (!$scope.$$phase) $scope.$apply();
  });
</script>

وضعیت رسانه

در طول پخش رسانه، رویدادهای مختلفی رخ می‌دهد که می‌توان با تنظیم شنوندگان برای رویدادهای مختلف cast.framework.RemotePlayerEventType در شی RemotePlayerController ، آنها را ضبط کرد.

برای دریافت اطلاعات وضعیت رسانه، از رویداد cast.framework.RemotePlayerEventType .MEDIA_INFO_CHANGED استفاده کنید، که هنگام تغییر پخش و زمانی که CastSession.getMediaSession().media

playerController.addEventListener(
  cast.framework.RemotePlayerEventType.MEDIA_INFO_CHANGED, function() {
    // Use the current session to get an up to date media status.
    let session = cast.framework.CastContext.getInstance().getCurrentSession();

    if (!session) {
        return;
    }

    // Contains information about the playing media including currentTime.
    let mediaStatus = session.getMediaSession();
    if (!mediaStatus) {
        return;
    }

    // mediaStatus also contains the mediaInfo containing metadata and other
    // information about the in progress content.
    let mediaInfo = mediaStatus.media;
  });

هنگامی که رویدادهایی مانند توقف، پخش، ازسرگیری یا جستجو رخ می‌دهند، برنامه باید بر روی آنها عمل کند و بین خود و برنامه گیرنده وب در دستگاه Cast همگام شود. برای اطلاعات بیشتر به به روز رسانی وضعیت مراجعه کنید.

نحوه عملکرد مدیریت جلسه

Cast SDK مفهوم جلسه Cast را معرفی می کند که ایجاد آن ترکیبی از مراحل اتصال به یک دستگاه، راه اندازی (یا پیوستن) یک برنامه گیرنده وب، اتصال به آن برنامه و راه اندازی یک کانال کنترل رسانه است. برای اطلاعات بیشتر در مورد جلسات Cast و چرخه عمر گیرنده وب، به راهنمای چرخه عمر برنامه گیرنده وب مراجعه کنید.

جلسات توسط کلاس CastContext مدیریت می شوند که برنامه شما می تواند آن را از طریق cast.framework.CastContext.getInstance() بازیابی کند. جلسات فردی توسط زیر کلاس های کلاس Session نشان داده می شوند. برای مثال، CastSession جلسات را با دستگاه‌های Cast نشان می‌دهد. برنامه شما می تواند از طریق CastContext.getCurrentSession() به جلسه Cast در حال حاضر فعال دسترسی داشته باشد.

برای نظارت بر وضعیت جلسه، یک شنونده به CastContext برای نوع رویداد CastContextEventType .SESSION_STATE_CHANGED اضافه کنید.

var context = cast.framework.CastContext.getInstance();
context.addEventListener(
  cast.framework.CastContextEventType.SESSION_STATE_CHANGED,
  function(event) {
    switch (event.sessionState) {
      case cast.framework.SessionState.SESSION_STARTED:
      case cast.framework.SessionState.SESSION_RESUMED:
        break;
      case cast.framework.SessionState.SESSION_ENDED:
        console.log('CastContext: CastSession disconnected');
        // Update locally as necessary
        break;
    }
  })

برای قطع ارتباط، مانند زمانی که کاربر روی دکمه «توقف ارسال محتوا» از کادر گفتگوی Cast کلیک می‌کند، می‌توانید یک شنونده برای نوع رویداد RemotePlayerEventType .IS_CONNECTED_CHANGED در شنونده خود اضافه کنید. در شنونده خود بررسی کنید که آیا RemotePlayer قطع شده است یا خیر. اگر چنین است، وضعیت پخش محلی را در صورت لزوم به روز کنید. مثلا:

playerController.addEventListener(
  cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, function() {
    if (!player.isConnected) {
      console.log('RemotePlayerController: Player disconnected');
      // Update local player to disconnected state
    }
  });

در حالی که کاربر می‌تواند مستقیماً پایان Cast را از طریق دکمه Cast Framework کنترل کند، خود فرستنده می‌تواند با استفاده از شی CastSession فعلی ارسال را متوقف کند.

function stopCasting() {
  var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
  // End the session and pass 'true' to indicate
  // that Web Receiver app should be stopped.
  castSession.endSession(true);
}

انتقال جریان

حفظ وضعیت جلسه اساس انتقال جریان است، جایی که کاربران می‌توانند با استفاده از دستورات صوتی، برنامه Google Home یا نمایشگرهای هوشمند، جریان‌های صوتی و تصویری موجود را در دستگاه‌ها جابه‌جا کنند. پخش رسانه در یک دستگاه (منبع) متوقف می شود و در دستگاه دیگر (مقصد) ادامه می یابد. هر دستگاه Cast با آخرین سیستم‌افزار می‌تواند به عنوان منبع یا مقصد در انتقال جریان عمل کند.

برای دریافت دستگاه مقصد جدید در طول انتقال جریان، زمانی که رویداد cast.framework.SessionState .SESSION_RESUMED فراخوانی شد CastSession#getCastDevice() را فراخوانی کنید.

برای اطلاعات بیشتر به انتقال جریان در گیرنده وب مراجعه کنید.