2014-02-05 5 views
0

Я использую последнюю версию 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.

ответ

1

Адаптивные протоколы BitRate нуждаются в Media Player Library. Взгляните на образцы Cast Media Player Library Sample или Cast Custom Receiver.

+0

Спасибо Les, я не заметил, что добавление библиотеки Media Player в мой приемник. Я сделал это, и теперь я больше не получаю сообщение об ошибке, но не вызываются 'onMediaDiscovered' или' onMediaError' после вызова 'loadMedia' в сеансе. У меня включена отладка на приемнике. – sethdeckard

+0

Напишите новый Q и опубликуйте свой журнал и ваш приемник, обязательно заткните любой PII. –

+0

Я закончил с помощью примера получателя в вашей ссылке, который отображает всю информацию об отладке на экране, и теперь onMediaError получает вызов. Вот подробности: код: «session_error», описание: «LOAD_FAILED». На выходе отладки приемника он показывает мне все параметры, которые я передал в объекте MediaInfo. Есть ли способ получить более подробную информацию о том, что происходит с ошибкой? – sethdeckard