【问题标题】:How to correctly notify the sender about the operation of the Google CAF receiver?如何正确通知发送方 Google CAF 接收方的操作?
【发布时间】:2022-11-01 12:36:29
【问题描述】:

在 playerManager.setMessageInterceptor (cast.framework.messages.MessageType.LOAD) 我拦截消息并启动播放器。

问题来了。 发送方在大约 5 分钟后断开连接,因为发送方不知道播放器已开始播放。如何正确通知发送方播放器正在运行?如何设置接收方和发送方之间的通信?

索引.html

<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
    <script src="//www.gstatic.com/cast/sdk/libs/devtools/debug_layer/caf_receiver_logger.js"></script>
    <script src="js/players/videojs_7.20.1.js"></script>
    <script type="module" src="js/cast.js"></script>
  </head>
  <body>
      <video id="hlsPlayer" class="cast cast_hlsPlayer" autoplay></video>
  </body>
</html> 

cast.js

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

options.skipPlayersLoad = true;

let token =  null;
let title =  null;
let subtitle = null;
let streamUrl = null;
let licenseUrl = null;
let prevStreamUrl = null;
let contentId = null;
let hlsPlayerDOMElement = document.getElementById("hlsPlayer");


// Debug Logger
const castDebugLogger = cast.debug.CastDebugLogger.getInstance();
const LOG_TAG = 'MyAPP.LOG';

// Enable debug logger and show a 'DEBUG MODE' overlay at top left corner.
castDebugLogger.setEnabled(true);

// Set verbosity level for Core events.
castDebugLogger.loggerLevelByEvents = {
  'cast.framework.events.category.CORE': cast.framework.LoggerLevel.INFO,
  'cast.framework.events.EventType.MEDIA_STATUS': cast.framework.LoggerLevel.DEBUG
};

// Set verbosity level for custom tags.
castDebugLogger.loggerLevelByTags = {
    LOG_TAG: cast.framework.LoggerLevel.DEBUG,
};

playerManager.setMessageInterceptor(
  cast.framework.messages.MessageType.LOAD,
  request => {
    return new Promise((resolve, _reject) => {

    token = request.media.metadata.token;
    title =  request.media.metadata.title;
    subtitle =  request.media.metadata.subtitle;
    licenseUrl = request.media.metadata.licenseUrl;
    streamUrl = request.media.contentUrl;
    contentId = request.media.metadata.contentId;

    //Check if a new thread has arrived
    if (prevStreamUrl !== streamUrl){
      prevStreamUrl = streamUrl;

      initHlsPlayer(hlsPlayerDOMElement);
      startHlsPlayer(streamUrl);
    }

    resolve(request);
  });
});

context.start(options);

 function initHlsPlayer(videoDomElement){
  const videoOptions = {
      restoreEl: true,
      fill: true,
      overNative: true,
      autoplay: true,
      controls: false,
      loop: false,
      language: 'en',
      inactivityTimeout: 0,
      preload: 'auto',
      sourceOrder: true,
      errorDisplay: false,
      fluid: false,
      liveui: true,
      loadingSpinner: true,
      html5: { 
        hvs: { 
          withCredentials: false,
          enableLowInitialPlaylist: true
        } 
      },
      techOrder: ['html5'],
      plugins: {},
  };

  window.hlsPlayerInstance = null;
  window.hlsPlayerInstance = videojs(videoDomElement, videoOptions);
}

 function startHlsPlayer(streamUrl){
  const mediaData = {
    withCredentials: false,
    type: "application/x-mpegURL",
    src: streamUrl,
  };

  window.hlsPlayerInstance.src(mediaData);
}


【问题讨论】:

    标签: google-cast google-cast-sdk custom-receiver


    【解决方案1】:

    更新了票。请查看此以获取更多详细信息https://issuetracker.google.com/244260274

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2018-06-11
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多