Özel Web Alıcınıza Temel Özellikler Ekleme

Bu sayfa, kod snippet'lerini ve bu veriler için kullanılabilecek özelliklerin açıklamalarını içerir özel bir web alıcı uygulamasıdır.

  1. Yerleşik oynatıcı kullanıcı arayüzünü temsil eden bir cast-media-player öğesi Web Buyer ile sağlanır.
  2. Çeşitli stil özelliklerini ayarlamak için cast-media-player öğesi için özel CSS benzeri stil background-image, splash-image ve gibi kullanıcı arayüzü öğeleri font-family.
  3. Web Alıcı çerçevesini yüklemek için bir komut dosyası öğesi.
  4. Mesajlara müdahale etmek ve etkinlikleri işlemek için JavaScript kodu.
  5. Otomatik oynatma için sıra.
  6. Oynatmayı yapılandırma seçenekleri.
  7. Web Alıcı bağlamını ayarlama seçenekleri.
  8. Web Alıcı uygulaması tarafından desteklenen komutları ayarlama seçenekleri.
  9. Web Alıcısı uygulamasını başlatmak için bir JavaScript çağrısı.
ziyaret edin.

Uygulama yapılandırması ve seçenekleri

Uygulamayı yapılandırma

İlgili içeriği oluşturmak için kullanılan CastReceiverContext en dıştaki sınıftır ve geliştiricilere sunulan Web Receiver SDK'nın ilk kullanıma hazırlama işlemini gerçekleştirir. SDK uygulama geliştiricilerinin SDK'yı CastReceiverOptions. Bu yapılandırmalar her uygulama lansmanı için bir kez değerlendirilir ve start.

Aşağıdaki örnekte, gönderen bağlantısı hâlâ etkin bir şekilde bağlı. Web Buyer, gönderenle iletişim kurabilmiş olup olmadığınızı maxInactivity bir SENDER_DISCONNECTED etkinliği gönderilir. Aşağıdaki yapılandırma bu zaman aşımını geçersiz kılar. Bu, hataları ayıklarken Web Alıcısı uygulamasının Chrome Remote Debugger oturumunu kapatmasını önler. IDLE durumundaki sıfır bağlı gönderendir.

const context = cast.framework.CastReceiverContext.getInstance();
const options = new cast.framework.CastReceiverOptions();
options.maxInactivity = 3600; // Development only
context.start(options);

Oynatıcıyı yapılandırma

Web Receiver SDK, içerik yüklerken oynatmayı yapılandırmak için bir yöntem sunar. DRM gibi değişkenler bilgi, yeniden denemek ve istek işleyicileri için cast.framework.PlaybackConfig. Bu bilgiler Google tarafından PlayerManager ve oyuncuların oluşturulduğu anda değerlendirilir. Oynatıcılar oluşturuldu Web Receiver SDK'ya yeni bir yükleme geçirildiğinde. PlaybackConfig sonra oyuncu oluşturulduktan sonraki sonraki adımlarda değerlendirilir. emin olun. SDK, PlaybackConfig

  • CastReceiverOptions.playbackConfig ilk kullanıma hazırlarken varsayılan yapılandırma seçeneklerini geçersiz kılmak için CastReceiverContext.
  • PlayerManager.getPlaybackConfig() mevcut yapılandırmayı kullanın.
  • PlayerManager.setPlaybackConfig() geçersiz kılın. Bu ayar, yükleme işlemi sırasında veya tekrar geçersiz kılınana kadar.
  • PlayerManager.setMediaPlaybackInfoHandler() (yalnızca yüklenmekte olan medya öğesine yönelik ek yapılandırmalar uygulayın) üst üste bindirebilir. İşleyici, oyuncudan hemen önce çağrılır çok önemli. Burada yapılan değişiklikler kalıcı değildir ve sorgulara dahil edilmez getPlaybackConfig() numaralı telefona. Bir sonraki medya öğesi yüklendiğinde bu işleyici tekrar çağrılır.

Aşağıdaki örnekte,PlaybackConfig CastReceiverContext. Yapılandırma, şunun için giden istekleri geçersiz kılar: ve manifestoları almalısınız. İşleyici, CORS Access-Control isteklerini bu işlem, çerezler veya yetkilendirme üstbilgileri gibi kimlik bilgileri kullanılarak yapılmalıdır.

const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.manifestRequestHandler = requestInfo => {
  requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});

Aşağıdaki örnekte, alıcı kullanılarak PlaybackConfig öğesinin nasıl geçersiz kılınacağı gösterilmektedir ve setter, PlayerManager içinde sağlanır. Bu ayar, oynatıcıyı 1 segment yüklendikten sonra içerik oynatmaya devam et.

const playerManager =
    cast.framework.CastReceiverContext.getInstance().getPlayerManager();
const playbackConfig = (Object.assign(
            new cast.framework.PlaybackConfig(), playerManager.getPlaybackConfig()));
playbackConfig.autoResumeNumberOfSegments = 1;
playerManager.setPlaybackConfig(playbackConfig);

Aşağıdaki örnekte, belirli bir yükleme için PlaybackConfig değerinin nasıl geçersiz kılınacağı gösterilmektedir isteği gönderebilirsiniz. İşleyici bir uygulamayı çağırır licenseUrl verilerini elde etmek için getLicenseUrlForMedia yöntemini uygula geçerli öğenin contentId.

playerManager.setMediaPlaybackInfoHandler((loadRequestData, playbackConfig) => {
  const mediaInformation = loadRequestData.media;
  playbackConfig.licenseUrl = getLicenseUrlForMedia(mediaInformation.contentId);

  return playbackConfig;
});

Etkinlik işleyici

Web Buyer SDK'sı, Web Alıcı uygulamanızın oynatıcı etkinliklerini işlemesini sağlar. İlgili içeriği oluşturmak için kullanılan etkinlik işleyici cast.framework.events.EventType parametresini (veya bu parametrelerden oluşan bir diziyi) işleyiciyi tetikleyecektir. Önceden yapılandırılmış Hata ayıklama için faydalı cast.framework.events.EventType bilgilerini şurada bulabilirsiniz: cast.framework.events.category Etkinlik parametresi, etkinlik hakkında ek bilgiler sağlar.

Örneğin, bir anahtar kelimenin ne zaman mediaStatus yayınlanıyorsa bu değişikliği işlemek için aşağıdaki mantığı kullanabilirsiniz: etkinlik:

const playerManager =
    cast.framework.CastReceiverContext.getInstance().getPlayerManager();
playerManager.addEventListener(
    cast.framework.events.EventType.MEDIA_STATUS, (event) => {
      // Write your own event handling code, for example
      // using the event.mediaStatus value
});

Mesaj müdahalesi

Web Buyer SDK'sı, Web Receiver uygulamanızın mesajlara müdahale edip bu mesajlarda özel kod yürütür. Mesaj müdahalesi, cast.framework.messages.MessageType parametresini kullanabilirsiniz.

Müdahaleci, değiştirilen isteği veya yeni bir istek oluşturun. null dönerseniz kullanabilirsiniz. Daha fazla bilgi için Medya yükleme bölümüne bakın.

Örneğin, yükleme isteği verilerini değiştirmek istiyorsanız kesmek ve değiştirmek için aşağıdaki mantığı kullanır:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {
      const error = new cast.framework.messages.ErrorData(
                      cast.framework.messages.ErrorType.LOAD_FAILED);
      if (!loadRequestData.media) {
        error.reason = cast.framework.messages.ErrorReason.INVALID_PARAM;
        return error;
      }

      if (!loadRequestData.media.entity) {
        return loadRequestData;
      }

      return thirdparty.fetchAssetAndAuth(loadRequestData.media.entity,
                                          loadRequestData.credentials)
        .then(asset => {
          if (!asset) {
            throw cast.framework.messages.ErrorReason.INVALID_REQUEST;
          }

          loadRequestData.media.contentUrl = asset.url;
          loadRequestData.media.metadata = asset.metadata;
          loadRequestData.media.tracks = asset.tracks;
          return loadRequestData;
        }).catch(reason => {
          error.reason = reason; // cast.framework.messages.ErrorReason
          return error;
        });
    });

context.start();

Hata işleme

Mesaj müdahalesinde hata oluştuğunda Web Alıcı uygulamanız şunu döndürecektir: uygun bir cast.framework.messages.ErrorType ve cast.framework.messages.ErrorReason.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {
      const error = new cast.framework.messages.ErrorData(
                      cast.framework.messages.ErrorType.LOAD_CANCELLED);
      if (!loadRequestData.media) {
        error.reason = cast.framework.messages.ErrorReason.INVALID_PARAM;
        return error;
      }

      ...

      return fetchAssetAndAuth(loadRequestData.media.entity,
                               loadRequestData.credentials)
        .then(asset => {
          ...
          return loadRequestData;
        }).catch(reason => {
          error.reason = reason; // cast.framework.messages.ErrorReason
          return error;
        });
    });

Mesaj müdahalesi ve etkinlik işleyici karşılaştırması

Mesaj müdahalesi ile etkinlik işleyici arasındaki bazı temel farklar şunlardır: şöyle olur:

  • Etkinlik işleyici, istek verilerini değiştirmenize izin vermez.
  • Etkinlik işleyici, analizleri veya özel bir işlevi tetiklemek için en iyi seçenektir.
ziyaret edin.
playerManager.addEventListener(cast.framework.events.category.CORE,
    event => {
        console.log(event);
    });
  • Mesaj müdahalesi bir mesajı dinlemenize, müdahale etmenize ve istek verilerinin kendisini değiştirebilir.
  • İleti müdahalesi en çok verileri talep edebilirsiniz.

Medya yükleniyor

MediaInformation çok sayıda özellik sunar. entity dahil cast.framework.messages.MessageType.LOAD mesaj, contentUrl ve contentId.

  • entity hem gönderen hem de gönderen için uygulamanızda kullanmanız önerilen özelliktir, alıcı uygulamalarıdır. Mülk, oynatma listesi olabilen bir derin bağlantı URL'sidir olabilir. Uygulamanız bu URL'yi ayrıştırmalı ve diğer iki alandan en az birini doldurun.
  • contentUrl oynatıcının içeriği yüklemek için kullanacağı oynatılabilir URL'ye karşılık gelir. Örneğin, bu URL bir DASH manifestine işaret edebilir.
  • contentId bir oynanabilir içerik URL'si (contentUrl'nin URL'sine benzer) olabilir. özelliği) ya da yüklenen içeriğin veya oynatma listesinin benzersiz tanımlayıcısını içermelidir. Bu özelliği tanımlayıcı olarak kullanıyorsanız uygulamanız bir contentUrl içindeki oynatılabilir URL'ler.

Öneri, gerçek kimlik veya anahtar parametreleri depolamak için entity kullanılması ve medyanın URL'si için contentUrl kullanın. Şunun bir örneği gösterilmektedir: LOAD isteğinde entity öğesinin ve oynanabilir contentUrl alındı:

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {
      ...

      if (!loadRequestData.media.entity) {
        // Copy the value from contentId for legacy reasons if needed
        loadRequestData.media.entity = loadRequestData.media.contentId;
      }

      return thirdparty.fetchAssetAndAuth(loadRequestData.media.entity,
                                          loadRequestData.credentials)
        .then(asset => {
          loadRequestData.media.contentUrl = asset.url;
          ...
          return loadRequestData;
        });
    });

Cihaz özellikleri

İlgili içeriği oluşturmak için kullanılan getDeviceCapabilities yöntemi, bağlı yayın cihazı ve videoya ilişkin cihaz bilgilerini sağlar veya ses sistemi var. getDeviceCapabilities yöntemi destek sağlar Google Asistan, Bluetooth, bağlı ekran ve ses bilgileri cihazlar.

Bu yöntem, belirtilen numaralandırmaları kullanın. Sıralamalar şurada tanımlandığı: cast.framework.system.DeviceCapabilities.

Bu örnekte, Web Alıcı cihazının HDR ve video oynatma için uygun olup olmadığı IS_HDR_SUPPORTED ve IS_DV_SUPPORTED tuşlarıyla DolbyVision (DV) tıklayın.

const context = cast.framework.CastReceiverContext.getInstance();
context.addEventListener(cast.framework.system.EventType.READY, () => {
  const deviceCapabilities = context.getDeviceCapabilities();
  if (deviceCapabilities &&
      deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_HDR_SUPPORTED]) {
    // Write your own event handling code, for example
    // using the deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_HDR_SUPPORTED] value
  }
  if (deviceCapabilities &&
      deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_DV_SUPPORTED]) {
    // Write your own event handling code, for example
    // using the deviceCapabilities[cast.framework.system.DeviceCapabilities.IS_DV_SUPPORTED] value
  }
});
context.start();

Kullanıcı etkileşimini yönetme

Bir kullanıcı, gönderen üzerinden Web Receiver uygulamanızla etkileşim kurabilir. uygulamalar (Web, Android ve iOS), Asistan özellikli sesli komutlar cihazlar, akıllı ekranlardaki dokunma kontrolleri ve Android TV'deki uzaktan kumandalar cihazlar. Cast SDK, Web Alıcısı uygulamasının API'lerin son durumunu kontrol etmek için, uygulama arayüzünü kullanıcı işlemi durumlarını gösterir ve isteğe bağlı olarak değişiklikleri arka uç hizmetlerini güncellemek için gönderin.

Desteklenen medya komutları

Kullanıcı arayüzü denetimlerinin durumu MediaStatus.supportedMediaCommands iOS ve Android'deki gönderen genişletilmiş kumandaları, alıcı ve uzaktan kumanda için Dokunmatik cihazlarda çalışan uygulamalar ve Android TV cihazlarındaki alıcı uygulamaları. Bir mülkte belirli bit tabanlı Command etkinleştirildiğinden, etkinleştirildiğinden emin olun. Değer ayarlanmazsa düğme devre dışı bırakıldı. Bu değerler Web Alıcısı'nda şu şekilde değiştirilebilir:

  1. Kullanım PlayerManager.setSupportedMediaCommands özel ayarı Commands
  2. Yeni bir komut eklemek için addSupportedMediaCommands
  3. Mevcut bir komutu removeSupportedMediaCommands.
playerManager.setSupportedMediaCommands(cast.framework.messages.Command.SEEK |
  cast.framework.messages.Command.PAUSE);

Alıcı, güncellenen MediaStatus dosyasını hazırladığında bildirim, supportedMediaCommands özelliğindeki değişiklikler. Durum bağlı gönderen uygulamaları, kullanıcı arayüzündeki düğmeleri günceller buna göre hazırlar.

Desteklenen medya komutları ve dokunmatik cihazlar hakkında daha fazla bilgi için bkz. Accessing UI controls rehberini inceleyin.

Kullanıcı işlemi durumlarını yönetme

Kullanıcılar kullanıcı arayüzüyle etkileşimde bulunduğunda veya sesli komutlar gönderdiğinde oynatılan öğeyle ilgili içeriğin ve özelliklerin oynatılması. İstek sayısı oynatmayı kontrol eden tüm işlevlerin SDK tarafından otomatik olarak işlenmesi gerekir. Şunları içeren istekler: oynatılan geçerli öğenin özelliklerini (ör. LIKE komutu) değiştirme alıcı uygulamanın bunları işlemesini gerektirir. SDK, Google Analytics 4'te Bu tür istekleri işleyecek API'ler. Bu taleplerin desteklenmesi için aşağıda yer alan yapılması gerekenler:

  • MediaInformation cihazını ayarlayın userActionStates kullanıcı tercihleri ile uyumlu hale getirebilirsiniz.
  • USER_ACTION mesajlarına müdahale edin ve istenen işlemi belirleyin.
  • Kullanıcı arayüzünü güncellemek için MediaInformation UserActionState bileşenini güncelleyin.
ziyaret edin.

Aşağıdaki snippet, LOAD isteğini engeller ve LoadRequestData adlı kullanıcının MediaInformation cihazı. Bu durumda, kullanıcı yüklenmelidir.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, (loadRequestData) => {
      const userActionLike = new cast.framework.messages.UserActionState(
          cast.framework.messages.UserAction.LIKE);
      loadRequestData.media.userActionStates = [userActionLike];

      return loadRequestData;
    });

Aşağıdaki snippet, USER_ACTION mesajını engeller ve çağrıyı işler arka uçta olması gerekir. Ardından, Alıcıda UserActionState.

playerManager.setMessageInterceptor(cast.framework.messages.MessageType.USER_ACTION,
  (userActionRequestData) => {
    // Obtain the media information of the current content to associate the action to.
    let mediaInfo = playerManager.getMediaInformation();

    // If there is no media info return an error and ignore the request.
    if (!mediaInfo) {
        console.error('Not playing media, user action is not supported');
        return new cast.framework.messages.ErrorData(messages.ErrorType.BAD_REQUEST);
    }

    // Reach out to backend services to store user action modifications. See sample below.
    return sendUserAction(userActionRequestData, mediaInfo)

    // Upon response from the backend, update the client's UserActionState.
    .then(backendResponse => updateUserActionStates(backendResponse))

    // If any errors occurred in the backend return them to the cast receiver.
    .catch((error) => {
      console.error(error);
      return error;
    });
});

Aşağıdaki snippet, bir arka uç hizmetine yapılan çağrıyı simüle eder. İşlev, Kullanıcının istediği değişiklik türünü görmek için UserActionRequestData ve yalnızca işlem arka uç tarafından destekleniyorsa ağ çağrısı yapar.

function sendUserAction(userActionRequestData, mediaInfo) {
  return new Promise((resolve, reject) => {
    switch (userActionRequestData.userAction) {
      // Handle user action changes supported by the backend.
      case cast.framework.messages.UserAction.LIKE:
      case cast.framework.messages.UserAction.DISLIKE:
      case cast.framework.messages.UserAction.FOLLOW:
      case cast.framework.messages.UserAction.UNFOLLOW:
      case cast.framework.messages.UserAction.FLAG:
      case cast.framework.messages.UserAction.SKIP_AD:
        let backendResponse = {userActionRequestData: userActionRequestData, mediaInfo: mediaInfo};
        setTimeout(() => {resolve(backendResponse)}, 1000);
        break;
      // Reject all other user action changes.
      default:
        reject(
          new cast.framework.messages.ErrorData(cast.framework.messages.ErrorType.INVALID_REQUEST));
    }
  });
}

Aşağıdaki snippet UserActionRequestData öğesini alır ve UserActionState öğesini MediaInformation öğesinden kaldırır. MediaInformation ayarının UserActionState değeri, düğmenin istenen işlemle ilişkilendirilmiş. Bu değişiklik, ekran denetimleri kullanıcı arayüzü, uzaktan kumanda uygulaması ve Android TV kullanıcı arayüzü. Aynı zamanda Giden MediaStatus mesajları aracılığıyla yayınlandı. iOS ve Android gönderenler için genişletilmiş denetleyici.

function updateUserActionStates(backendResponse) {
  // Unwrap the backend response.
  let mediaInfo = backendResponse.mediaInfo;
  let userActionRequestData = backendResponse.userActionRequestData;

  // If the current item playing has changed, don't update the UserActionState for the current item.
  if (playerManager.getMediaInformation().entity !== mediaInfo.entity) {
    return;
  }

  // Check for existing userActionStates in the MediaInformation.
  // If none, initialize a new array to populate states with.
  let userActionStates = mediaInfo.userActionStates || [];

  // Locate the index of the UserActionState that will be updated in the userActionStates array.
  let index = userActionStates.findIndex((currUserActionState) => {
    return currUserActionState.userAction == userActionRequestData.userAction;
  });

  if (userActionRequestData.clear) {
    // Remove the user action state from the array if cleared.
    if (index >= 0) {
      userActionStates.splice(index, 1);
    }
    else {
      console.warn("Could not find UserActionState to remove in MediaInformation");
    }
  } else {
    // Add the UserActionState to the array if enabled.
    userActionStates.push(
      new cast.framework.messages.UserActionState(userActionRequestData.userAction));
  }

  // Update the UserActionState array and set the new MediaInformation
  mediaInfo.userActionStates = userActionStates;
  playerManager.setMediaInformation(mediaInfo, true);
  return;
}

Sesli komutlar

Aşağıdaki medya komutları şu anda Web Receiver SDK'sında desteklenmektedir: Asistan özellikli cihazlar. Bu komutların varsayılan uygulamaları şunlardır: bulundu cast.framework.PlayerManager.

Komut Açıklama
Play Oynatın veya duraklatılmış durumdan oynatmaya devam edin.
Duraklat Oynatılan içeriği duraklatın.
Önceki Medya sıranızdaki önceki medya öğesine atlayın.
İleri Medya sıranızdaki sonraki medya öğesine atlayın.
Durdur Oynatılan medyayı durdurun.
Tekrarlama Yok Sıradaki son öğenin oynatılması tamamlandığında, sıradaki medya öğelerinin tekrarlanmasını devre dışı bırakın.
Single'ı tekrarla Oynatılan medyayı süresiz olarak tekrarla.
Tümünü Tekrarla Sıradaki son öğe oynatıldığında, sıradaki tüm öğeleri yineler.
Tümünü Tekrarla ve Karıştır Sıradaki son öğenin oynatılması tamamlandığında, sırayı karıştırın ve sıradaki tüm öğeleri tekrarlayın.
Karıştır Medya sıranızdaki medya öğelerini karıştırın.
Altyazıları AÇMA / KAPATMA Medyanız için Altyazıyı etkinleştirin / devre dışı bırakın. Etkinleştirme / Devre dışı bırakma özelliği dillere göre de kullanılabilir.
Mutlak zamana ara Belirtilen mutlak zamana atlar.
Geçerli zamana göre zamana git Geçerli oynatma süresine göre belirtilen dönemde ileri veya geri atlar.
Tekrar Oyna Oynatılan medyayı yeniden başlatın veya şu anda hiçbir şey oynatılmıyorsa son oynatılan medya öğesini oynatın.
Oynatma hızını ayarlama Farklı medya oynatma hızları. Bu, varsayılan olarak işlenmelidir. Gelen hız isteklerini geçersiz kılmak için SET_PLAYBACK_RATE mesaj önleyicisini kullanabilirsiniz.

Sesli olarak desteklenen medya komutları

Sesli komutun Asistan'da medya komutunu tetiklemesini önlemek için: etkin bir cihaz kullanıyorsanız önce desteklenen medya komutları temel bir açık kaynaktır. Ardından "the" CastReceiverOptions.enforceSupportedCommands Cast SDK'sı gönderenlerin ve dokunma özellikli cihazların kullanıcı arayüzü şu şekilde değiştirilecek: yansıttığını gösterir. İşaret etkinleştirilmezse gelen ses komut yürütülür.

Örneğin, gönderen uygulamalarınızda PAUSE ürününe izin verirseniz ve özellikli cihazları kullanıyorsanız, alıcınızı bu cihazları yansıtacak şekilde Ayarlar'da devre dışı bırakabilirsiniz. Yapılandırıldığında, gelen sesli komutlar atlanacaksa bölümüne bakabilirsiniz.

Aşağıdaki örnekte, başlangıç aşamasında CastReceiverOptions CastReceiverContext. PAUSE komutu için destek ekledik ve oynatıcının yalnızca bu komutu desteklemesini zorunlu kılar. Artık bir sesli komut SEEK gibi başka bir işlem isteğinde bulunursa reddedilecektir. Kullanıcı, komutun henüz desteklenmediğini bildirir.

const context = cast.framework.CastReceiverContext.getInstance();

context.start({
  enforceSupportedCommands: true,
  supportedCommands: cast.framework.messages.Command.PAUSE
});

Kısıtlamak istediğiniz her komut için ayrı mantık uygulayabilirsiniz. Çıkar enforceSupportedCommands işareti ve istediğiniz her komut için gelen iletiye müdahale edebilirsiniz. Burada, isteği ön plana çıkarırız. Asistan özellikli cihazlara SEEK komutlarının verileceği şekilde SDK tarafından sağlanır Web Alıcısı uygulamanızda bir aramayı tetiklemez.

Uygulamanızın desteklemediği medya komutları için uygun bir hata nedeni, örneğin NOT_SUPPORTED.

playerManager.setMessageInterceptor(cast.framework.messages.MessageType.SEEK,
  seekData => {
    // Block seeking if the SEEK supported media command is disabled
    if (!(playerManager.getSupportedMediaCommands() & cast.framework.messages.Command.SEEK)) {
      let e = new cast.framework.messages.ErrorData(cast.framework.messages.ErrorType
      .INVALID_REQUEST);
      e.reason = cast.framework.messages.ErrorReason.NOT_SUPPORTED;
      return e;
    }

    return seekData;
  });

Ses etkinliğinden arka plan alma

Cast platformu, Asistan nedeniyle uygulamanızın sesini arka plana atıyorsa kullanıcının konuşmasını dinleme veya "konuşma" gibi FocusState NOT_IN_FOCUS mesajı, etkinliği başlar. Etkinlik sona erdiğinde IN_FOCUS ile birlikte başka bir mesaj gönderilir. Uygulamanıza ve oynatılan medyaya bağlı olarak FocusState NOT_IN_FOCUS olduğunda mesaja müdahale ederek medyayı duraklat FOCUS_STATE yazın.

Örneğin, Asistan, kullanıcı sorgusuna yanıt veriyor.

playerManager.setMessageInterceptor(cast.framework.messages.MessageType.FOCUS_STATE,
  focusStateRequestData => {
    // Pause content when the app is out of focus. Resume when focus is restored.
    if (focusStateRequestData.state == cast.framework.messages.FocusState.NOT_IN_FOCUS) {
      playerManager.pause();
    } else {
      playerManager.play();
    }

    return focusStateRequestData;
  });

Ses tarafından belirlenen altyazı dili

Kullanıcı altyazıların dilini açıkça belirtmediğinde Altyazılar için kullanılan dil, komutun konuşulduğu dille aynıdır. Bu senaryolarda isSuggestedLanguage parametresinden, gelen mesajın tarafından önerilen veya açıkça talep edilen içerikler.

Örneğin isSuggestedLanguage, "Ok Google,true altyazıları aç", çünkü dili, kullanılan dili bunu söylemiştim. Dil açıkça istenirse (örneğin, "Tamam Google, İngilizce altyazıları aç," isSuggestedLanguage, false olarak ayarlandı.

Meta veri ve ses yayınlama

Sesli komutlar varsayılan olarak Web Alıcısı tarafından işlense de, İçeriğinizin meta verilerinin eksiksiz ve doğru olduğundan emin olun. Böylece proje daha sesli komutların Asistan tarafından düzgün şekilde işlendiğinden ve meta verilerin Google Home uygulaması ve Google Analytics gibi yeni arayüz türlerinde düzgün bir şekilde Google Home Hub gibi akıllı ekranlar.

Akış aktarma

Akış aktarımının temeli oturum durumunu korumaktır. Bu yöntemde kullanıcılar sesli komutları, Google Home'u kullanarak mevcut ses ve video akışlarını cihazlar arasında taşıyabilir uygulama veya akıllı ekranlar. Medya bir cihazda (kaynak) duruyor ve başka bir cihazda (kaynaktaki) devam ediyor hedef). En son donanım yazılımına sahip Cast cihazları bir akış aktarımı.

Akış aktarımı için etkinlik akışı:

  1. Kaynak cihazda:
    1. Medyanın oynatılması durduruluyor.
    2. Web Alıcı uygulaması, geçerli medyayı kaydetmek için bir komut alır. durumu.
    3. Web Alıcı uygulaması kapatıldı.
  2. Hedef cihazda:
    1. Web Alıcı uygulaması yüklendi.
    2. Web Alıcı uygulaması, kaydedilen medya içeriğini geri yüklemek durumu.
    3. Medya oynatılmaya devam eder.

Medya durumu öğeleri şunlardır:

  • Şarkının, videonun veya medya öğesinin belirli konumu ya da zaman damgası.
  • Video daha geniş bir sıraya eklenir (ör. oynatma listesi veya sanatçı radyosu).
  • Kimliği doğrulanan kullanıcı.
  • Oynatma durumu (örneğin, oynatma veya duraklatıldı).

Akış aktarımı etkinleştiriliyor

Web Alıcınız için akış aktarımını uygulamak üzere:

  1. Güncelleme supportedMediaCommands STREAM_TRANSFER komutuyla aşağıdaki işlemleri yapabilirsiniz:
    playerManager.addSupportedMediaCommands(
    cast.framework.messages.Command.STREAM_TRANSFER, true);
  2. İsteğe bağlı olarak SESSION_STATE ve RESUME_SESSION mesajını geçersiz kılın Oturumu koruma bölümünde açıklandığı gibi) durumu hakkında daha fazla bilgi edinin. Yalnızca özel veri ihtiyacı olduğunda bunları geçersiz kıl oturum anlık görüntüsünün bir parçası olarak depolanmaya devam eder. Aksi halde, varsayılan uygulama, akış aktarımını destekleyecektir.

Oturum durumu korunuyor

Web Receiver SDK, Web Alıcı uygulamaları için varsayılan uygulama olan oturum durumlarını korumak için mevcut medya durumunun anlık görüntüsünü alıp durumu bir yükleme isteğine dönüştürme ve oturumun yükleme isteğiyle devam ettirilmesi.

Web Alıcısı tarafından oluşturulan yükleme isteği, Gerekirse SESSION_STATE mesaj önleyicisi. Özel veriler eklemek istiyorsanız bunları, tek bir anahtar kelimeden ya da loadRequestData.customData.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.SESSION_STATE,
    function (sessionState) {
        // Override sessionState.loadRequestData if needed.
        const newCredentials = updateCredentials_(sessionState.loadRequestData.credentials);
        sessionState.loadRequestData.credentials = newCredentials;

        // Add custom data if needed.
        sessionState.loadRequestData.customData = {
            'membership': 'PREMIUM'
        };

        return sessionState;
    });

Özel veriler şuradan alınabilir: loadRequestData.customData içindeki RESUME_SESSION ileti müdahalesinde

let cred_ = null;
let membership_ = null;

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.RESUME_SESSION,
    function (resumeSessionRequest) {
        let sessionState = resumeSessionRequest.sessionState;

        // Modify sessionState.loadRequestData if needed.
        cred_ = sessionState.loadRequestData.credentials;

        // Retrieve custom data.
        membership_ = sessionState.loadRequestData.customData.membership;

        return resumeSessionRequest;
    });

İçerik önceden yükleme

Web Alıcısı, geçerli oynatmadan sonra medya öğelerinin önceden yüklenmesini destekler öğe var.

Önceden yükleme işlemi, içe aktarılan öğeler. Spesifikasyon, preloadTime değeri QueueItem nesnesi (sağlanmazsa varsayılan olarak 20 saniyedir). Zaman, saniye cinsinden ifade edilir. sonuna kadar oynatıldığından emin olun . Yalnızca pozitif değerler geçerlidir. Örneğin, değer 10 saniyeyse bu öğe önceden 10 saniye saniye sonra tekrar kontrol edin. Önceden yükleme süresi daha uzunsa MevcutÖğede kalan zamandan daha uzun süre varsa önceden yükleme, yapmasını sağlar. Böylece, OrderItem öğesinde çok yüksek bir önceden yükleme değeri belirtiliyorsa ne zaman oynadığımızın etkisini bir sonraki öğenin önceden yüklü olduğudur. Ancak biz, Bant genişliği ve akış performansını etkileyebileceği için bu değer geliştiriciye gönderilir. oynatmaya devam eder.

Önceden yükleme; HLS, DASH ve Smooth akış içeriği için varsayılan olarak çalışır.

Normal MP4 video ve MP3 gibi ses dosyaları Cast biçiminde önceden yüklenmez cihazlar yalnızca bir medya öğesini destekler ve mevcut içerik öğesi oynatılmaya devam ediyor.

Özel mesajlar

Mesaj değişimi, Web Alıcısı uygulamaları için temel etkileşim yöntemidir.

Bir gönderen, kullandığı platform (Android, iOS, Web). Etkinlik nesnesi ( bir mesajın manifestiyse) etkinlik işleyicilere aktarılan bir (event.data) belirli bir etkinlik türü.

Bir Web Alıcı uygulaması belirli bir tıklayın. Dolayısıyla, Web Alıcısı uygulaması, destekler. Bu durumda dilediğiniz bağlı göndericinin iletişim kurmak için kullanabilirsiniz.

Tüm ad alanları bir dizeyle tanımlanır ve "urn:x-cast:" ile başlamalıdır ve ardından herhangi bir dize gelir. Örneğin, "urn:x-cast:com.example.cast.mynamespace".

Web Alıcısı'nın bu kullanıcıdan gelen özel mesajları dinlemesi için kullanabileceğiniz bir kod snippet'i bağlı gönderenler:

const context = cast.framework.CastReceiverContext.getInstance();

const CUSTOM_CHANNEL = 'urn:x-cast:com.example.cast.mynamespace';
context.addCustomMessageListener(CUSTOM_CHANNEL, function(customEvent) {
  // handle customEvent.
});

context.start();

Benzer şekilde, Web Alıcı uygulamaları da gönderenleri durum hakkında bilgilendirebilir ileti göndererek Web Alıcısı'na geri bildirim gönderir. Web Alıcısı uygulama şununla mesaj gönderebilir: sendCustomMessage(namespace, senderId, message) açık CastReceiverContext. Web Alıcısı, tek bir gönderene şuna yanıt olarak ileti gönderebilir: gelen bir mesaj olabilir veya uygulamanın durumundaki bir değişiklik olabilir. Noktadan noktaya ötesinde 64 KB ile sınırlı olmak üzere, bir Web Alıcısı da mesajları tüm bağlı gönderenlerden paylaşın.

Ses sistemleri için yayınlama

Sesle ilgili destek almak üzere Ses cihazları için Google Cast kılavuzuna bakın yalnızca oynatma.

Android TV

Bu bölümde Google Web Alıcısı'nın girişlerinizi kayıttan oynatma için nasıl kullandığı, Android TV uyumluluğu da var.

Uygulamanızı uzaktan kumandayla entegre etme

Android TV cihazında çalışan Google Web Alıcısı, medya oynatma olarak cihazın kontrol girişleri (ör. elde tutulan uzaktan kumanda) urn:x-cast:com.google.cast.media ad alanı için şu şekilde tanımlanmış mesajlar: Medya Oynatma Mesajları bölümünde açıklanmıştır. Sizin uygulamanın, uygulama medyasını kontrol edebilmesi için bu mesajları desteklemesi gerekir temel oynatma kontrolüne izin vermek için video oynatımının giriş değerleridir.

Android TV uyumluluğu yönergeleri

Aşağıda, uygulamanız Android TV ile uyumluysa:

  • Kullanıcı aracısı dizesinin hem "Android" hem de ve "CrKey"; Bazı siteler, ilk olarak mobil cihazlara özel bir siteye "Android" etiket. Önce "Android" olduğunu varsaymayın emin olmak için mobil kullanıcıyı ifade eder.
  • Android'in medya yığını, veri getirmek için şeffaf GZIP kullanabilir. Şunlardan emin olun: medya verileriniz, Accept-Encoding: gzip komutuna yanıt verebilir.
  • Android TV HTML5 medya etkinlikleri, Bu işlem Chromecast'te gizlenmiş olan sorunları ortaya çıkarabilir.
  • Medyayı güncellerken <audio>/<video> tarafından tetiklenen medyayla ilgili etkinlikleri kullanın öğeler (timeupdate, pause ve waiting gibi). Ağ iletişimini kullanmaktan kaçının progress, suspend ve stalled gibi alakalı etkinlikler değişiklik gösterir. Medya etkinliklerini inceleyin bakın.
  • Alıcı sitenizin HTTPS sertifikalarını yapılandırırken ara CA sertifikaları. Bkz. Qualsys SSL test page'i doğrulayın: sitenizin güvenilir sertifika yolu bir sertifika yetkilisi içeriyorsa "ekstra indirme" etiketli sertifika, Android tabanlı cihazlarda yüklenmeyebilir platformlar.
  • Chromecast, alıcı sayfasını 720p grafik düzleminde görüntülerken Android TV gibi yayınlama platformları sayfayı 1080p'ye kadar görüntüleyebilir. Emin olun alıcı sayfanız farklı çözünürlüklerde sorunsuz bir şekilde ölçeklenir.