Поддержка субтитров Chromecast

Много поиграв с Chromecast, чтобы найти хорошее решение для субтитров (в моем проекте мы уже используем TTML и сегментированный WEBVtt - оба не работают "как есть"), я был ОЧЕНЬ удивлен, обнаружив, что моя последняя яркая идея, чтобы вручную добавить "новый VTTCue()", чтобы textTrack-элемент не был поддержан.

Я прочитал много ответов на вопросы здесь, где ответ подобен этому " Делайте сами", как этот Поддерживает ли Chromecast TTML?,

Вы можете просто написать анализатор Javascript для анализа файла [ttml] и добавить подсказки к вашему элементу видео в javascript, используя такие методы, как addTextTrack() и т. д.

Ну, это говорит о том, что TTML поддерживается здесь https://github.com/googlecast/CastClosedCaptioning-chrome но неважно.

Так что, не сумев включить в Google ответ (код, альтернативный VTTCue), я обращаюсь к вам - как добавить Cues, что VTTCue не поддерживается?

То, что я действительно думал (надеялся), сработает:

loadTTML().done(function(ttml){
    var cueData = extractCueDataFromTTML(ttml);
    var vid = document.querySelector('video');

    vid.addTextTrack("subtitles", "sample");
    var track = vid.textTracks[0];

    cueData.forEach(function(cue){
        track.addCue(new VTTCue(cue.start, cue.end, cue.text))
    });
})

Примечание: это позволяет избежать написания конвертера TTML в WEBVtt или сегментированного объединителя WEBVtt

2 ответа

Из-за изменений в Chrome, предстоящее обновление Chromecast потребует изменения кода в приложениях получателя, которые выполняют скрытые субтитры.

В библиотеке Media Player есть исправление для изменения, поэтому изменение API не повлияет на получателей, использующих MPL.

Разработчики, которые не используют MPL, должны будут изменить свой код получателя, если они поддерживают субтитры.

В Chrome M37 TextTrackCue все еще существует, но его нельзя создать напрямую. Вместо этого необходимо создать экземпляр VTTCue.

Чтобы справиться с этой разницей, для вашего получателя рекомендуется следующий полифилл JavaScript:

window['VTTCue'] = window['VTTCue'] || window['TextTrackCue'];

Это гарантирует, что VTTCue всегда определен. Как только полифилл будет установлен, необходимо обновить код, который создает подсказки, чтобы создавать объекты VTTCue вместо TextTrackCue.

Chromecast не поддерживает VTTCue, поэтому вам нужно использовать конструктор TextTrackCue. Т.е.

//...
cueData.forEach(function(cue){
    track.addCue(new TextTrackCue(cue.start, cue.end, cue.text))
});
//...
Другие вопросы по тегам