chromecast에서 다국어 오디오 트랙을 재생하려고합니다. 비디오/오디오 파일을 재생하지만 영어에서 스페인어로 전환하지 않습니다. Silverlight 플레이어에서 같은 파일을 사용하여 전환 할 수 있습니다. 내 chromecast 플레이어 언어와 안드로이드 전화 언어를 스페인어로 설정했습니다. Google Cast SDK 개발자 콘솔에서 대체 트랙으로 스페인어를 추가했습니다.Chromecast 다 언어 재생 언어가 감지되지 않습니다.
Google 가이드에 지정된 코드를 사용하여 맞춤식 플레이어를 추가했지만 가이드의 코드가 곧게 복사하여 붙여 넣기되지 않습니다. 누군가가 나를 protocol.getStreamCount()가 0 인 이유를 지시 할 수 있습니까? 통화 시간이 맞습니까? 다음은 전체 플레이어입니다. window.changeLanguage = function() ... 및 changeLanguage 호출에 특히주의하십시오. 어떤 도움이라도 대단히 감사합니다!
<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>
Chromecast의 콘솔 :
응용 프로그램은 시스템을 시작 준비가 미디어 응용 프로그램을 시작
우리가 가지고 Media Player 라이브러리
시작매니페스트 프로토콜 .ISM/
streamCount : 0
I : 1
currentLanguage :
:
내가 콘솔 및 사후 로딩에 들어간 다음 명령이라고 0
편집 this.protocol.getStreamCount()
,451,515,2
그래서 이것은 분명히 타이밍 문제입니다. 스트림이 완전히로드되면 changeLanguage를 호출해야합니다. 전화 할 적절한시기가 언제인지 조사하고 있습니다. 어떤 도움을 주셔서 감사하겠습니다하지만 지금은 타이밍 문제가 긍정적 인 나는이 대답을 구글하려고합니다.