Создание собственного получателя с помощью библиотеки Google Cast - Media Player
Я хотел бы реализовать функциональность медиа-плеера для моего пользовательского приемника. На веб-сайте разработчиков Google я нашел описание для реализации приложения- отправителя и медиаприемника в стиле.
Я сделал этот образец, и он отлично работает. Я могу передать файл MP3, размещенный на Google Диске, на мое устройство Chromecast.
Теперь я реализовал специальный приемник (см. Вложение), который должен воспроизводить URL-адрес, указанный в файле m3u8. Для этого я использую медиаплеерную библиотеку в соответствии с рекомендациями Google.
<body>
<div>
<p id='text'> </p>
<video id='vid'> </video>
</div>
<script type="text/javascript" src="https://www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/cast/sdk/libs/mediaplayer/1.0.0/media_player.js"></script>
<script type="text/javascript">
// If you set ?Debug=true in the URL, such as a different App ID in the
// developer console, include debugging information.
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);
}
console.log("mediaElement set");
var mediaElement = document.getElementById('vid');
// Create the media manager. This will handle all media messages by default.
window.mediaManager = new cast.receiver.MediaManager(mediaElement);
// Remember the default value for the Receiver onLoad, so this sample can Play
// non-adaptive media as well.
window.defaultOnLoad = mediaManager.onLoad;
mediaManager.onLoad = function (event) {
// The Media Player Library requires that you call player unload between
// different invocations.
if (window.player !== null) {
player.unload(); // Must unload before starting again.
window.player = null;
}
// This trivial parser is by no means best practice, it shows how to access
// event data, and uses the a string search of the suffix, rather than looking
// at the MIME type which would be better. In practice, you will know what
// content you are serving while writing your player.
if (event.data['media'] && event.data['media']['contentId']) {
console.log('Starting media application');
var t = document.getElementById('text');
t.innerHTML = event.data['media'];
console.log("EventData: "+event.data);
console.log("EventData-Media: "+event.data['media']);
console.log("EventData-ContendID: "+event.data['media']['contentId']);
var url = event.data['media']['contentId'];
console.log("URL: "+url);
// Create the Host - much of your interaction with the library uses the Host and
// methods you provide to it.
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;
var protocol = null;
mediaElement.autoplay = autoplay; // Make sure autoplay get's set
protocol = cast.player.api.CreateHlsStreamingProtocol(host);
host.onError = function(errorCode) {
console.log("Fatal Error - "+errorCode);
if (window.player) {
window.player.unload();
window.player = null;
}
};
// If you need cookies, then set withCredentials = true also set any header
// information you need. If you don't need them, there can be some unexpected
// effects by setting this value.
// host.updateSegmentRequestInfo = function(requestInfo) {
// requestInfo.withCredentials = true;
// };
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);
}
else {
window.defaultOnLoad(event); // do the default process
}
}
}
window.player = null;
console.log('Application is ready, starting system');
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
castReceiverManager.start();
</script>
</body>
Я выяснил, что с помощью медиаплеера Media Player можно просто создавать файлы.m3u8, .ism и.mpd. Поэтому я создал файл m3u8 следующим образом, разместил его на Google Диске и попытался преобразовать его в свой пользовательский приемник.
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=173952
https://www.googledrive.com/host/0B1x31lLRAxTMRndtNkhSWVdGLVE
Но это не работает. Я использовал консоль разработчика Goolge Cast для отладки пользовательского приемника. Превышение
window.player.load(protocol, initStart);
По команде я получаю ФАТАЛЬНУЮ ОШИБКУ на консоли.
Я думаю, что проблема в пользовательском коде получателя, потому что приложение отправителя из документации Google прекрасно работает со стилевым медиа-приемником.
Есть кто-нибудь, кто знает эту проблему или видит какую-то проблему в пользовательском коде получателя? У кого-нибудь есть идеи, как можно отладить стильный медиаплеер? Было бы намного проще, если бы я мог видеть, какие сообщения обмениваются с помощью стилизованного медиа-плеера, но если я активирую отладку, я не вижу обмениваемые сообщения.