Android Chromecast多语言playready不检测语言

Android Chromecast多语言playready不检测语言,android,chromecast,multilingual,playready,Android,Chromecast,Multilingual,Playready,我正在chromecast上播放多语言音频曲目。它播放视频/音频文件,但不会从英语切换到西班牙语。我可以在silverlight播放器中使用相同的文件进行切换。我已经将chromecast播放器语言和android手机语言设置为西班牙语。在GoogleCastSDK开发人员控制台中,我添加了西班牙语作为备用曲目 我已经使用谷歌指南中指定的代码添加了我的自定义播放器,但是指南中的代码似乎无法直接复制和粘贴。有人能告诉我为什么protocol.getStreamCount()是0吗?打电话的时间正确

我正在chromecast上播放多语言音频曲目。它播放视频/音频文件,但不会从英语切换到西班牙语。我可以在silverlight播放器中使用相同的文件进行切换。我已经将chromecast播放器语言和android手机语言设置为西班牙语。在GoogleCastSDK开发人员控制台中,我添加了西班牙语作为备用曲目

我已经使用谷歌指南中指定的代码添加了我的自定义播放器,但是指南中的代码似乎无法直接复制和粘贴。有人能告诉我为什么protocol.getStreamCount()是0吗?打电话的时间正确吗?这是我正在使用的整个播放器,请特别注意window.changeLanguage=function()。。。还有语言的改变。非常感谢您的帮助

<html>
<head>
  <title>Test Player</title>
  <script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
  <script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/mediaplayer/1.0.0/media_player.js"></script>
  <link rel="stylesheet" type="text/css" href="chromecast.css" />
</head>
<body>
<video id='vid' />


<script type="text/javascript">
if (window.location.href.indexOf('Debug=true') != -1) {
  cast.receiver.logger.setLevelValue(cast.receiver.LoggerLevel.DEBUG);
  cast.player.api.setLoggerLevel(cast.player.api.LoggerLevel.DEBUG);
}

var mediaElement = document.getElementById('vid');
var protocol = null;
// Create the media manager. This will handle all media messages by default.
window.mediaManager = new cast.receiver.MediaManager(mediaElement);
window.defaultOnLoad = mediaManager.onLoad;
mediaManager.onLoad = function (event) {
  if (window.player !== null) {
    player.unload();    // Must unload before starting again.
    window.player = null;
  }
  if (event.data['media'] && event.data['media']['contentId']) {
    console.log('Starting media application');
    var url = event.data['media']['contentId'];
    window.host = new cast.player.api.Host({'mediaElement':mediaElement, 'url':url});
    var ext = url.substring(url.lastIndexOf('.'), url.length);
    var initStart = event.data['media']['currentTime'] || 0;
    var autoplay = event.data['autoplay'] || true;
    mediaElement.autoplay = autoplay;  // Make sure autoplay get's set

    if (url.lastIndexOf('.m3u8') >= 0) 
    {
      // HTTP Live Streaming
      protocol = cast.player.api.CreateHlsStreamingProtocol(host);
    } 
    else if (url.lastIndexOf('.mpd') >= 0) 
    {
      // MPEG-DASH
      protocol = cast.player.api.CreateDashStreamingProtocol(host);
    } 
    else if (url.indexOf('.ism/') >= 0) 
    {
      // Smooth Streaming
      protocol = cast.player.api.CreateSmoothStreamingProtocol(host);
    }
    // How to override a method in Host. I know that it's safe to just provide this
    // method.
    host.onError = function(errorCode) {
      console.log("Fatal Error - " + errorCode);
      if (window.player) {
        window.player.unload();
        window.player = null;
      }
    };
    console.log("we have protocol " + ext);
    if (protocol !== null) {
      console.log("Starting Media Player Library");
      window.player = new cast.player.api.Player(host);
      window.player.load(protocol, initStart);
      changeLanguage();
    }
    else {
      window.defaultOnLoad(event);    // do the default process
    }
  }
}

window.changeLanguage = function() {
 var currentLanguage = null;
 var streamCount = protocol.getStreamCount();
 console.log("streamCount: " + streamCount);
 var streamInfo;
 for (var i = 0; i < streamCount; i++) {
   console.log("isStreamEnabled " + i + "? " + protocol.isStreamEnabled(i));
   if (protocol.isStreamEnabled(i)) {
     streamInfo = protocol.getStreamInfo(i);
     console.log("streamInfo isAudio? " + streamInfo.mimeType.indexOf('audio'));
     if (streamInfo.mimeType.indexOf('audio') === 0) {
       if (streamInfo.language) {
     console.log("streamInfo.language: " + streamInfo.language);
     currentLanguage = i;
     break;
       }
     }
   }
 }

 if (currentLanguage === null) {
   currentLanguage = 0;
 }

 i = currentLanguage + 1;
 console.log("i: " + i);
 console.log("currentLanguage: " + currentLanguage);
 while (i !== currentLanguage) {
   if (i === streamCount) {
     console.log("resetting i to 0");
     i = 0;
   }

   streamInfo = protocol.getStreamInfo(i);
   if (streamInfo.mimeType.indexOf('audio') === 0) {
     protocol.enableStream(i, true);
     protocol.enableStream(currentLanguage, false);

     console.log("Enabling: " + i);
     console.log("Disabling: " + currentLanguage);
     break;
   }

   i++;
 }

 if (i !== currentLanguage) {
   console.log("reloading window player" + window.player);
   window.player.reload();
 }
};

window.player = null;
console.log('Application is ready, starting system');
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
castReceiverManager.start();
</script>
</body>
</html>

测试播放器
if(window.location.href.indexOf('Debug=true')!=-1){
cast.receiver.logger.setLevelValue(cast.receiver.LoggerLevel.DEBUG);
cast.player.api.setLoggerLevel(cast.player.api.LoggerLevel.DEBUG);
}
var mediaElement=document.getElementById('vid');
var协议=null;
//创建媒体管理器。默认情况下,这将处理所有媒体消息。
window.mediaManager=new cast.receiver.mediaManager(mediaElement);
window.defaultOnLoad=mediaManager.onLoad;
mediaManager.onLoad=函数(事件){
如果(window.player!==null){
player.unload();//重新开始之前必须卸载。
window.player=null;
}
if(event.data['media']和&event.data['media']['contentId']){
log(“启动媒体应用程序”);
var url=event.data['media']['contentId'];
window.host=new cast.player.api.host({'mediaElement':mediaElement'url':url});
var ext=url.substring(url.lastIndexOf('.')、url.length);
var initStart=event.data['media']['currentTime']||0;
var autoplay=event.data['autoplay']| | true;
mediaElement.autoplay=autoplay;//确保设置了autoplay get
if(url.lastIndexOf('.m3u8')>=0)
{
//HTTP实时流媒体
协议=cast.player.api.CreateHlsStreamingProtocol(主机);
} 
else if(url.lastIndexOf('.mpd')>=0)
{
//MPEG-DASH
协议=cast.player.api.CreateDashStreamingProtocol(主机);
} 
else if(url.indexOf('.ism/')>=0)
{
//平滑流
协议=cast.player.api.CreateSmoothStreamingProtocol(主机);
}
//如何在主机中重写方法。我知道只提供这个是安全的
//方法。
host.onError=函数(错误代码){
日志(“致命错误-”+错误代码);
if(window.player){
window.player.unload();
window.player=null;
}
};
log(“我们有协议”+ext);
if(协议!==null){
log(“启动媒体播放器库”);
window.player=new cast.player.api.player(主机);
window.player.load(协议,initStart);
改变语言();
}
否则{
window.defaultOnLoad(event);//执行默认进程
}
}
}
window.changeLanguage=函数(){
var currentLanguage=null;
var streamCount=protocol.getStreamCount();
console.log(“streamCount:+streamCount”);
var-streamInfo;
对于(变量i=0;i
Chromecast控制台:

应用程序准备就绪,启动系统

启动媒体应用程序

我们有协议ism/manifest

正在启动媒体播放器库

流量计数:0

i:1

当前语言:0

编辑

我进入控制台并在加载后调用以下命令:

this.protocol.getStreamCount()

二,

因此,这显然是一个时间问题。一旦流完全加载,我需要调用changeLanguage。我正在调查什么时候打电话合适。我非常感谢您的帮助,但现在我确定这是一个时间问题,我会尝试用谷歌搜索这个答案。

答案是:

host.onManifestReady = function() {
  changeLanguage();
};
这将为何时拉出备用音频曲目提供正确的时间