Заключение
Наиболее этичный ответ - работать с Reddit, чтобы убедиться, что они установили правильные заголовки CORS. Заголовки CORS требуются в документации Google.
Имитация вашей проблемы
Использование этого тестера:
https://developer.jwplayer.com/tools/stream-tester/
Он имитирует некоторые из тех же впечатлений, которые вы испытывали в своем коде с Chromecast SDK. Видео Google воспроизводилось без настройки Playready DRM, а видео с Reddit - нет (в большинстве браузеров).
MS EDGE и jwplayer
Если вы выберете Playready и поместите что-нибудь для URL Playready, даже оставив его пустым, оно будет работать для M3U8.
Internet Explorer и jwplayer
Ошибка, 232011 Запрос манифеста был сделан без надлежащих учетных данных междомена. Не удается загрузить M3U8: кросс-доменный доступ запрещен. Это видео не может быть воспроизведено из-за технической ошибки.
Это указывает на то, что, возможно, CORS не включен на серверах Reddit. Подробнее об этом ниже.
Firefox и jwplayer
Кажется, ничего не работает с jwplayer.
Chrome и jwplayer
Не работает с jwplayer.
Safari и jwplayer player
Вы указали, что он работает без необходимости установки каких-либо настроек DRM.
iPhone / Apple TV
Я попробовал, и видео m3u8 может использовать AirPlay для прямой трансляции с телефона на Apple TV (4K).
Сводка моделирования
Все видео M3U8 уже могут транслироваться с iPhone на AppleTV, просто отлично с Airplay. Похоже, что это работает Edge, а также в Safari, так что, возможно, это работает только потому, что Reddit принял потоковую передачу Apple через эфир в качестве службы, но не Chromecast. Не совсем уверен, но как еще это можно объяснить? Было бы здорово получить от кого-то больше разъяснений.
Анализ первопричин
Обратите внимание, что ссылка Google, которой вы поделились, включает этот заголовок:
Access-Control-Allow-Origin
и он установлен на * (он же все), что означает, что сервер будет использовать запрошенные ресурсы для любого домена в Интернете.
https://tools.geekflare.com/report/cors-test/https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/hls/DesigningForGoogleCast.m3u8
Ссылки Reddit не имеют этого заголовка, что означает, что CORS не разрешено совместное использование ресурсов, что означает, что он не предназначен для работы.
Описание заголовков CORS
https://www.codecademy.com/articles/what-is-cors
Заголовок Access-Control-Allow-Origin позволяет серверам указывать, как их ресурсы используются совместно с внешними доменами. Когда будет сделан запрос GET для доступа к ресурсу на сервере A, сервер A ответит значением заголовка Access-Control-Allow-Origin. Много раз это значение будет *, означая, что Сервер A будет совместно использовать запрошенные ресурсы с любым доменом в Интернете. В других случаях значение этого заголовка может быть задано для конкретного домена (или списка доменов), а это означает, что Сервер A будет совместно использовать свои ресурсы с этим конкретным доменом (или списком доменов). Заголовок Access-Control-Allow-Origin важен для безопасности ресурсов.
Существует несколько ресурсов, указывающих, что CORS должен быть включен со стороны сервера:
https://stackoverflow.com/a/28360045/9105725
https://help.ooyala.com/video-platform/concepts/cors_enablement.html
Даже Google говорит, что эти заголовки должны быть установлены:
https://developers.google.com/cast/docs/chrome_sender/advanced
Требования к CORSДля адаптивной потоковой передачи мультимедиа Google Cast требует наличия заголовков CORS, но даже для простых потоков мультимедиа mp4 требуется CORS, если они содержат дорожки.Если вы хотите включить треки для любого медиа, вы должны включить CORS для ваших потоков треков и ваших медиа потоков.Таким образом, если на вашем сервере нет доступных заголовков CORS для простых носителей mp4, и вы затем добавляете простую дорожку субтитров, вы не сможете выполнять потоковую передачу мультимедиа, если не обновите свой сервер, добавив соответствующий заголовок CORS.Кроме того, вам нужно разрешить как минимум следующие заголовки: Content-Type, Accept-Encoding и Range.Обратите внимание, что последние два заголовка являются дополнительными заголовками, которые вам могут не понадобиться ранее.