У меня проблемы с кастингом собственного видео JW Player.Вот соответствующая ссылка в Javascript API для настройки проигрывателя.
https://developer.jwplayer.com/jw-player/docs/developer-guide/customization/configuration-reference/#casting
Вот некоторые подробности о моей настройке:
1) Видео в потоковом формате HLS.Поэтому файл, который я передаю в Javascript API JW Player, имеет расширение .m3u8.
2) Видео размещено на S3.
3) Видео подается через CloudFront.
Воткод, который я использую для загрузки видео в JW Player:
<div id="jwplayer"></div>
var playerInstance = jwplayer('jwplayer');
playerInstance.setup({
file: <cloudfront-path-to-m3u8-file>,
androidhls: true,
cast: {},
});
Когда я использую версию 7.12.13 библиотеки JW Player JW Player, вот что я наблюдаю:
1)видео нормально загружается в браузер.
2) Когда я пытаюсь разыграть его, я вижу в браузере спиннер, указывающий, что он собирается начать воспроизведение через Chromecast.
3) Chromecast выглядит так, как будтособирается начать воспроизведение видео на телевизоре.Я вижу символ Chromecast со спиннером, затем линейку временной шкалы видео.
4) Через несколько секунд я вижу домашний экран Chromecast.Видео никогда не воспроизводится на телевизоре.
5) На этом этапе видео начинает воспроизводиться в браузере.
6) Я вижу следующее сообщение об ошибке в консоли отладки браузера:
provider.cast.js:1 Error: {code: "session_error", description:
"LOAD_FAILED", details: {…}}code: "session_error"description:
"LOAD_FAILED"details: {type: "LOAD_FAILED"}__proto__: Object
d.error @ provider.cast.js:1
(anonymous) @ cast_sender.js:70
U.onMessage @ cast_sender.js:76
M.i @ cast_sender.js:56
Когда я использую версию 8.6.3 библиотеки JW Player JW Player, вот что я наблюдаю:
1) Видео отлично загружается в браузере.
2) Когда я пытаюсь его разыграть, я вижуспиннер в видео в браузере, указывающий, что он собирается начать воспроизведение через Chromecast.
3) Похоже, что Chromecast начинает воспроизведение видео на телевизоре.Я вижу символ Chromecast со спиннером, затем линейку временной шкалы видео.
4) Через несколько секунд я вижу только символ Chromecast на телевизоре.
5) Вращается спиннер в проигрывателе видео в браузере.на неопределенный срок.
6) Я вижу следующее сообщение об ошибке в консоли отладки браузера:
provider.cast.js:10 Uncaught TypeError: Cannot read property 'trigger' of undefined
at c.<anonymous> (provider.cast.js:10)
at s (application-0a118d5fa8c4bb8de5f5da2cc04ef8c3a0cc5bf84da710890d3a90e9c79a04ee.js:3)
at c.a [as trigger] (application-0a118d5fa8c4bb8de5f5da2cc04ef8c3a0cc5bf84da710890d3a90e9c79a04ee.js:3)
at t.error (provider.cast.js:10)
at cast_sender.js:70
at U.onMessage (cast_sender.js:76)
at M.i (cast_sender.js:56)
(anonymous) @ provider.cast.js:10
s @ application-0a118d5fa8c4bb8de5f5da2cc04ef8c3a0cc5bf84da710890d3a90e9c79a04ee.js:3
a @ application-0a118d5fa8c4bb8de5f5da2cc04ef8c3a0cc5bf84da710890d3a90e9c79a04ee.js:3
t.error @ provider.cast.js:10
(anonymous) @ cast_sender.js:70
U.onMessage @ cast_sender.js:76
M.i @ cast_sender.js:56
Любые идеи о том, что означают эти ошибки или как отладить эту проблему?
Обратите внимание, что я выполнил вышеупомянутые тесты в Chrome (версия 71.0.3578.98, 64-разрядная версия) на Ubuntu 14.04.Я также попытался привести эти страницы с устройства Android, но получил те же результаты.
Несколько вещей, которые я пробовал:
- Настроил CORS в корзине S3, чтобы разрешить доступ из этихдомены.
- В корзину S3 добавлен crossdomain.xml, чтобы разрешить доступ с этих доменов.
- Признание недействительными кэшированных объектов в ребрах CloudFront
- Очистка кэша браузера.
Пытаясь изолировать проблему, я также попытался сделать следующее:
- Заменить файл m3u8 файлом webm.Я могу успешно разыграть с этой установкой.
- Заменить файл m3u8 на файл mp4.Я могу успешно разыграть с этой настройкой.
- Заменить путь CloudFront на прямой путь S3.Я наблюдаю то же проблемное поведение, которое я описал выше (т.е. не могу приводить и видеть ошибки в консоли).
Я обнаружил, что изменение конфигурации CORS для корзины S3, чтобы разрешить доступ из всех источников, исправляетпроблема:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
Однако это, безусловно, не идеально, поскольку открывает доступ к любому домену.Я попытался ограничить доступ, явно указав CORSRule
блоки для домена, который я использую для обслуживания видеоплеера.Я также попытался добавить http://*.jwpcdn.com
и https://*.jwpcdn.com
в качестве разрешенных источников, поскольку я считаю, что именно здесь размещен приемник Chromecast от JWPlayer.https://support.jwplayer.com/articles/cross-domain-file-loading-reference
Ни одна из этих комбинаций не сработала.Единственный способ заставить JW Player успешно использовать HLS-видео - это разрешить доступ из всех источников.
Любая идея, как настроить CORS для получения желаемого поведения без ущерба для конфиденциальностиведра.
Спасибо!