Я использую последнюю версию Chrome Sender (v1 новой публичной версии), и у меня возникают проблемы с получением HLS.Адаптивный битрейт HLS, не работающий с Google Cast SDK
Мой манифест m3u8 - это «главный» плейлист, который указывает на шесть других плейлистов m3u8 с различными разрешениями и битрейтами, чтобы обеспечить адаптивное потоковое битрейт в соответствии со спецификацией.
Этот плейлист хорошо протестирован в моих приложениях Roku, моем приложении iOS (с Apple TV), и даже в браузере через Flash (JWPlayer Pro). Он также работает непосредственно в Safari на iOS. Единственное, что немного отличается от моих плейлистов, это то, что они содержат параметры строки запроса, которые обеспечивают срок действия содержимого, но это разрешено в спецификации HLS. Например: playlist.m3u8?expires=1391662909&signature=I3G8RKUkILOwxjZy8EyL5w%3D%3D%24q0WbXA2whSNFAj0Os3NIpfHkqMA%2BH2iqMMjm0xH2CYKNe3jh1jgl%2FUdS39ve%0AFnL%2F
Вот код в моем Chrome Sender, где я устанавливаю плейлиста URL:
var mediaInfo = new chrome.cast.media.MediaInfo('http://master_playlist_url.m3u8');
mediaInfo.contentType = 'application/x-mpegURL';
var request = new chrome.cast.media.LoadRequest(mediaInfo);
request.autoplay = true;
request.currentTime = 0;
session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), onMediaError);
СМИ не загружается и onMediaError
вызывается с объектом ошибки, содержащий следующее:
code: "session_error"
description: "LOAD_FAILED"
details: null
Я также попытался установить streamType
в chrome.cast.media.StreamType.BUFFERED
, chrome.cast.media.StreamType.LIVE
и chrome.cast.media.StreamType.OTHER
каждый с тем же результатом. Я также попытался установить duration
без везения. Я попытался удалить autoplay
и currentTime
на LoadRequest, но не повезло.
Мой приемник является одним из основного пользовательского приемника следующим образом:
<html>
<head>
<title>Cast</title>
<script src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
</head>
<body>
<video id='media' width="100%" height="auto" />
<script>
window.onload = function() {
window.mediaElement = document.getElementById('media');
window.mediaManager = new cast.receiver.MediaManager(window.mediaElement);
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
window.castReceiverManager.start();
}
</script>
</body>
</html>
Согласно обновленной документации HLS теперь поддерживаются, но я не могу заставить его работать: https://developers.google.com/cast/docs/media
Я должен также упомянутый этот код отлично работает при использовании прогрессивного MP4 и изменении типа контента на video/mp4
.
ОБНОВЛЕНИЕ: Я решил попробовать удалить главный плейлист (адаптивный поток битрейта) из микса и просто пойти с одним плейлистом m3u8, который содержит одно качество сегментов TS. Это привело к той же точной ошибке. По крайней мере, мы знаем, что проблема связана не только с адаптивной потоковой передачей, но и с поддержкой HLS.
Спасибо Les, я не заметил, что добавление библиотеки Media Player в мой приемник. Я сделал это, и теперь я больше не получаю сообщение об ошибке, но не вызываются 'onMediaDiscovered' или' onMediaError' после вызова 'loadMedia' в сеансе. У меня включена отладка на приемнике. – sethdeckard
Напишите новый Q и опубликуйте свой журнал и ваш приемник, обязательно заткните любой PII. –
Я закончил с помощью примера получателя в вашей ссылке, который отображает всю информацию об отладке на экране, и теперь onMediaError получает вызов. Вот подробности: код: «session_error», описание: «LOAD_FAILED». На выходе отладки приемника он показывает мне все параметры, которые я передал в объекте MediaInfo. Есть ли способ получить более подробную информацию о том, что происходит с ошибкой? – sethdeckard