Добавление заголовков CORS при запросе файлов .m3u8 с использованием обратного прокси-сервера

Я создаю приложение Chromecast, в котором хочу передавать файлы .m3u8 (HLS) от поставщика потоковой передачи. Поставщик потоковой передачи не добавляет заголовки CORS в заголовки HTTP, что является обязательным требованием для создания приложений Chromecast.

Есть ли способ направить запросы через прокси-сервер и добавить необходимые заголовки для файлов .m3u8? AFAICS, файлы .m3u8 дополнительно указывают на файлы для разных потоков полосы пропускания, поэтому необходимо, чтобы прокси-сервер также добавлял соответствующие заголовки CORS в заголовок для этих файлов.

Вот пример ссылки на файл .m3u8, который я хочу транслировать.


person hanspeide    schedule 16.02.2014    source источник


Ответы (5)


Эй, я понимаю, что немного опоздал, но я подумал, что опубликую здесь, если другие сочтут это полезным. У меня была такая же проблема при разработке приложения Chromecast. Простое решение, которое я нашел, заключалось в том, чтобы включить библиотеку TOMODOkorz, которая будет передавать все HTTP-запросы через свой прокси.

Вы можете разместить свой собственный прокси-сервер и относительно легко изменить библиотеку, чтобы она указывала на вашу.

person Conor Restall    schedule 27.03.2014

На самом деле это возможно, если переписать URL-адреса в библиотеке медиаплеера Chromecast и создать эти вложенные плейлисты. также прокси через прокси-сервер CORS, например http://www.corsproxy.com/.

Чтобы сделать это в своем пользовательском приемнике, не импортируйте библиотеку, размещенную в Google
<script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/mediaplayer/0.5.0/media_player.js"></script>

Вместо этого скопируйте запутанный javascript прямо на HTML-страницу получателя и выполните следующие действия:

  • Найти+заменить g.D.url=k на g.D.url='http://www.corsproxy.com/' + k.replace(/^(?:[a-z]+:)?\/\//i,'')
  • Найти+заменить url:k на url:('http://www.corsproxy.com/' + k.replace(/^(?:[a-z]+:)?\/\//i,''))

Теперь, если вы отправите начальный contentId в Chromecast с http://www.corsproxy.com/YOUR_M3U8_FILE_HERE, у вас должно получиться полнофункциональное приложение Chromecast для воспроизведения HLS.

person Nano    schedule 24.04.2014
comment
Фантастика, спасибо! Это решило мои проблемы с получением большинства HLS-потоков, которые я хотел запустить. Однако для некоторых потоков требуется HTTPS. Любые предложения по решению этого? - person kristofferR; 05.05.2014
comment
Вы действительно тестировали это решение? Из моего исследования видно, что к реальным двоичным файлам также необходимо добавить заголовки CORS, и corsproxy.com, похоже, не добавляет эти заголовки к файлам, на которые есть ссылки в .m3u8. - person hanspeide; 11.06.2014

Большинство провайдеров имеют возможность устанавливать CORS для своих клиентов. Акамай точно знает.

person Les Vogel - Google DevRel    schedule 17.02.2014

Мне удалось передать HLS в ChromeCast из корзины S3, добавив разрешительный файл CORS в разрешения для корзины.

person marxy    schedule 06.03.2014

Чтобы ответить на мой собственный вопрос: это невозможно без ретрансляции потоков. Файлы .m3u8 — это файлы, содержащие ссылки на другие файлы, которые в конечном итоге также содержат двоичные файлы. Все они, включая ответ HTTP, содержащий двоичный файл, требуют заголовков CORS для Chromecast для отображения содержимого.

Если вы хотите добавить заголовки CORS только к текстовым ответам, corsproxy.com является хорошей альтернативой, длинной с несколькими доступные проекты с открытым исходным кодом.

person hanspeide    schedule 20.03.2014
comment
corsproxy.com был очень хорош, но больше не работает. Есть ли альтернативный сервер с таким же функционалом? - person user4500; 04.05.2015