Chromecast отправляет метаданные получателю

Мне нужна помощь, в моем приложении Chromecast с пользовательским приемником я не могу получить метаданные мультимедиа, с которыми было инициализировано приложение.

Я загрузил медиафайл следующим образом после успешного запроса сеанса:

    var mediaInfo = new chrome.cast.media.MediaInfo('https://wse-wowaza01.playne.tv:443/webdrmorigin/1042a2W.smil/manifest.mpd');
    mediaInfo.customData = {
        "userId": "mislav",
        "sessionId": "39BE906248F9F5C4A93C7",
        "merchant": "playnr"
    };
    mediaInfo.metadata = new chrome.cast.media.MovieMediaMetadata();
    mediaInfo.metadata.metadataType = chrome.cast.media.MetadataType.MOVIE;
    var img = new chrome.cast.Image('https://ottservice.playnr.tv/OTTranscoderHttps/get?url=http%asd9.168%2f20664_5b8df65c-67ff-4f13-b90d-b28c37f2310c.jpg&w=224&h=126');
    mediaInfo.metadata.images = [img];
    mediaInfo.contentType = 'video/mp4';
    var request = new chrome.cast.media.LoadRequest(mediaInfo);
    //this.playerState = this.PLAYER_STATE.LOADING;
    this.session.loadMedia(request,
        this.onLoadMediaSuccess.bind(this, 'loadMedia'),
        this.onLoadMediaFailure.bind(this)
    );

Как я могу получить доступ к этим метаданным в приложении-приемнике? я пробовал с

cast.receiver.MediaManager.getInstance() 

но не повезло. Предусмотрены ли какие-либо действия перед кодированием на приемнике, чтобы сделать данные доступными?


person MIslavMIslav    schedule 03.10.2015    source источник


Ответы (2)


Спасибо за помощь, направил меня в правильном направлении.

Заработало, вот в чем проблема. Я использую сторонний плагин javascript DMR для защиты контента. Он инкапсулирует cast_receiver и уже создал экземпляры MediaManager и ReceiverManager, я этого не заметил. Затем я создал новый mediaManager, но он не был привязан ни к каким данным. Все события паузы/воспроизведения обрабатывались экземпляром медиаменеджера плагинов, поэтому мой экземпляр был бесполезен. Как только я сослался на уже созданный медиаменеджер, данные есть, и его события работают. То же самое с диспетчером приемника, я запустил экземпляр, который уже был запущен, и проблемы .... Итак, вывод, мне не нужно ничего создавать, плагин DRM позаботится обо всем, просто нужно переопределить его обработчики событий

person MIslavMIslav    schedule 04.10.2015

Зависит от того, где на приемнике вы хотите получить доступ к этой информации. Например, в ряде обратных вызовов у вас есть «событие» типа cast.receiver.MediaManager.Event, из которого можно получить, например, объект cast.receiver.MediaManager.LoadRequestData через event.data. Затем этот объект данных имеет ваши пользовательские данные (data.customData)

person Ali Naddaf    schedule 03.10.2015
comment
Как попасть в ф.э. обработчик событий this.mediaManager.onPause? Или что-то похожее? Можете ли вы привести мне пример, пожалуйста? Мне удалось вызвать только обработчики событий, вызванных объектом ‹video›, а обработчики событий медиаменеджера почему-то не работают. - person MIslavMIslav; 03.10.2015
comment
Вы можете взглянуть на developers.google.com/cast/docs/custom_receiver#media, который говорит вам, как переопределить определенные обратные вызовы и как перехватывать события. Пример эталонного приемника также полезно посмотреть: github.com/googlecast/Cast- Образец игрока - person Ali Naddaf; 04.10.2015
comment
Мне удалось подключиться к событиям медиаменеджера, но только при запуске моего диспетчера приемника. Если я не запускаю диспетчер приемника, мое видео загружается и транслируется, а затем я не получаю никаких событий медиаменеджера. Только от медиаэлемента. Но когда я запускаю диспетчер приемника, я получаю событие от медиаменеджера, но поток не воспроизводится, я получаю onLoadMetadataError. В чем может быть проблема? Когда я запускаю диспетчер приемника, я получаю такие ошибки, как неожиданное отключение WebSocket: undefined. - person MIslavMIslav; 04.10.2015
comment
Если вы хотите правильно использовать Cast SDK, вам нужно запустить и использовать MediaManager. Как я уже говорил ранее, вы можете взять эталонный приемник в качестве отправной точки, а затем обновить его, чтобы добавить дополнительные функции, которые могут вам понадобиться. - person Ali Naddaf; 04.10.2015