Интернет-трансляция
Приложение Android для извлечения URL-адресов видео (файлов/потоков) с веб-сайтов и просмотра их в другом месте (внутренний/внешний видеоплеер, Google Chromecast, ExoAirPlayer).
Скриншоты..
Тур
-
BrowserActivity
отображается при запуске приложения и включает в себя:- очень простой веб-браузер
- значки панели действий:
- переключение закладок
- добавить/удалить текущий URL-адрес веб-сайта в/из списка постоянно сохраненных закладок
- Пункты меню панели действий:
- Закладки
- открытый ящик слева: Закладки
- Видео
- открытый ящик справа: Видео
- Настройки
- Выход
- закройте весь пользовательский интерфейс и выйдите из приложения
- ящик слева: Закладки
- содержит постоянный список:
- URL-адреса веб-сайтов, сохраненные с помощью значка переключения закладок
- URL-адреса видео, сохраненные через ящик «Видео»
- щелкните элемент списка, чтобы:
- открыть URL-адрес веб-сайта в WebView
- посмотреть URL-адрес видео
-
SettingsActivity
определяет конкретное действие, которое необходимо выполнить.
- нажмите и удерживайте элемент списка, чтобы:
- ящик справа: Видео
- содержит временный список URL-адресов видео, найденных на веб-странице, загруженной в данный момент в
WebView
- этот список очищается каждый раз, когда
WebView
переходит на новую веб-страницу
- щелкните элемент списка, чтобы:
- добавить URL-адрес видео в список постоянно сохраненных закладок
- посмотреть URL-адрес видео
-
SettingsActivity
определяет конкретное действие, которое необходимо выполнить.
- нажмите и удерживайте элемент списка, чтобы:
-
SettingsActivity
запускается из меню панели действий в BrowserActivity
и включает в себя:- Видеоплеер , чтобы выбрать, смотреть ли видео с помощью..
- внутренний с отправителем Chromecast
- внешний
- запустить выбор действий с неявным намерением
- действие
-
android.intent.action.VIEW
- данные
- тип
- mime-тип для формата видео
- дополнительные услуги
-
referUrl
- (Строка) URL-адрес ссылки
- используется ExoAirPlayer
- Отправитель ExoAirPlayer
- запустить
ExoAirPlayerSenderActivity
- Конфигурация HLS-прокси
- запустить выбор действий с неявным намерением
- действие
-
android.intent.action.VIEW
- данные
-
http://webcast-reloaded.surge.sh/proxy.html#/watch/${base64_video}/referer/${base64_referer}
- тип
- запустить
HlsProxyConfigurationActivity
- только тогда, когда нет активности с соответствующим фильтром намерений
- чего никогда не должно произойти, поскольку любой стандартный веб-браузер должен предлагать обработку этого намерения.
-
VideoActivity
запускается при просмотре URL-адреса видео с помощью внутреннего видеоплеера и включает в себя:- Экзоплеер
- отображает значок в правом нижнем углу панели инструментов управления видео для включения/выключения полноэкранного режима
- Отправитель Chromecast
- отображает значок трансляции на панели действий, когда в локальной сети обнаружен хотя бы один Google Chromecast
- при подключении к Chromecast
- URL-адреса видео передаются в приложение-приемник, работающее в Chromecast.
- приложение-приемник Chromecast загружает URL-адрес видео во встроенный видеоплеер HTML5.
- передача видеоданных происходит непосредственно между Chromecast и сервером, на котором размещен URL-адрес видео.
- Передача не будет осуществлена ни в одном из следующих событий:
-
VideoActivity
остановлена -
BrowserActivity
остановлена - Приложение WebCast закрыто
- Устройство Android выключено
- список URL-адресов видео
- щелкните элемент списка, чтобы:
- URL-адрес воспроизведения видео
- при подключении к Chromecast:
- в противном случае:
- на Android, в ExoPlayer
- все HTTP-запросы включают URL-адрес реферера
-
ExoAirPlayerSenderActivity
запускается при просмотре URL-адреса видео с помощью отправителя ExoAirPlayer и включает в себя:-
WebView
, который загружает одну веб-страницу- URL-адрес веб-страницы зависит от версии Android
- Android 5.0 и новее
- версия с использованием современного JavaScript ES6+
- Android 4.x и старше
- версия с использованием JavaScript, совместимого с ES5
- Хэш URL-адреса содержит:
-
#/watch/${base64_video}/referer/${base64_referer}
- веб-страница считывает данные из хеша URL-адреса и предварительно заполняет поля:
- URL-адрес видео
- URL-адрес реферера
- веб-страница считывает данные из файлов cookie и предварительно заполняет поля:
- предоставляет базовый пользовательский интерфейс для управления любым приложением-приемником ExoAirPlayer, доступным через сеть.
-
HlsProxyConfigurationActivity
запускается при просмотре URL-адреса видео с использованием конфигурации HLS-прокси на устройстве без доступного веб-браузера и включает в себя:-
WebView
, который загружает веб-страницу, совместимую с ES5.- Хэш URL-адреса содержит:
-
#/watch/${base64_video}/referer/${base64_referer}
- веб-страница считывает данные из хеша URL-адреса и предварительно заполняет поля:
- URL-адрес видео
- URL-адрес реферера
- веб-страница считывает данные из файлов cookie и предварительно заполняет поля:
- нажатие кнопки «Загрузить проигрыватель» выполняет следующие задачи:
- настраивает новый URL-адрес видео, который перенаправляет манифест HLS через HLS-прокси
- перенаправляет
WebView
на другую веб-страницу, совместимую с ES5, которая предоставляет дополнительные пункты назначения конечной точки для проксированного манифеста HLS.- Веб-страница ES6 для отправителя ExoAirPlayer
- Веб-страница ES5 для отправителя Chromecast
- в
WebView
на Android 4.x и старше:- функциональность видеоплеера не работает
- в
WebView
на Android 5.0 и новее:- функция видеоплеера работает
- Функция отправителя Chromecast не работает
Важные предостережения
некоторые URL-адреса видео могут воспроизводиться в WebCast и ExoAirPlayer, но не воспроизводятся в Chromecast или других внешних видеоплеерах.
- это может произойти, когда URL-адрес видео размещен на сервере, который использует заголовок HTTP-запроса
Referer
для ограничения доступа, что является распространенной стратегией.- WebCast и ExoAirPlayer имеют возможность настроить значение этого заголовка для каждого уникального URL-адреса видео.
- Приложения-приемники Chromecast не могут изменить значение этого заголовка, поскольку они ограничены стандартными политиками безопасности браузера.
- спецификации XHR и выборки запрещают изменение определенных заголовков HTTP-запросов, включая
Referer
- приложение-приемник WebCast Chromecast
- пытается изменить значение этого заголовка
- в консоли удаленного отладчика показывает, что эта попытка вызывает предупреждение:
- Отказался устанавливать небезопасный заголовок «referer».
- другим внешним видеоплеерам потребуется:
- прочитайте дополнительный
referUrl
в начальном намерении - настройте свою клиентскую библиотеку HTTP, чтобы изменить значение этого заголовка
- HLS-Proxy предоставляет удобный обходной путь общего назначения.
- настройка для интеграции с WebCast:
- установить HLS-прокси
-
npm install --global "@warren-bank/hls-proxy"
- установить WebMonkey
- приложение для открытия конфигурации HLS-прокси
- в Вебмонки
- установить пользовательский скрипт WebCast-Reloaded
- добавляет расширенные функциональные возможности на веб-страницу, совместимую с ES5, которая обеспечивает настройку HLS-прокси.
- включает кнопку с надписью: « Запустить приложение».
- при нажатии:
- запустить выбор действий с неявным намерением
- действие
-
android.intent.action.VIEW
- данные
- проксированный URL-адрес манифеста HLS
- тип
- в веб-трансляции
- Настройки > Видеоплеер > Конфигурация HLS-прокси.
- использование:
- запустить HLS-прокси
-
hlsd --port 8080 --req-insecure --useragent "Chrome/90"
- в веб-трансляции
- перейдите во внутренний
WebView
на страницу с желаемым видеопотоком HLS. - откройте ящик «Видео» (справа)
- щелкните URL-адрес нужного видеопотока HLS
- нажмите: Смотреть
- запустится выбор действий
- WebMonkey будет включен в список приложений, содержащих соответствующее действие.
- нажмите: WebMonkey
- в Вебмонки
- настройте местоположение вашего работающего экземпляра HLS-Proxy:
- нажмите: Запустить приложение
- запустится выбор действий
- Веб-трансляция будет включена в список приложений, содержащих соответствующее действие.
- нажмите: Видеопроигрыватель веб-трансляции
- в веб-трансляции
- нажмите кнопку Значок отправителя Chromecast для трансляции проксированного видеопотока HLS на устройство Chromecast.
компонент Android System WebView
полностью отвечает за работу веб-браузера.
- у этого компонента сложная история
- не вдаваясь в подробности:
- на версиях Android < 5.0
- компонент
WebView
встроен в прошивку- не может быть обновлено
- плохо загружает современные веб-страницы, поскольку язык JavaScript (ES6+) и спецификация HTML (HTML5) значительно изменились.
- на версиях Android >= 5.0
- компонент
WebView
— это автономное приложение
- на версиях Android >= 7.0
- компонент
WebView
заменяется компонентом веб-браузера Google Chrome, когда он установлен и включен.
Организация Git-репо
- залежавшиеся ветки
- 01-фундамент
- коллекция небольших приложений для разработки и тестирования экспериментальных функций
- 02-веб-трансляция-httpclient
- использовал внешнюю клиентскую библиотеку HTTP: Apache HttpClient
- использовал заголовок ответа
Content-Type
для обнаружения видеофайлов
- 03-webcast-okhttp
- использовал внешнюю клиентскую библиотеку HTTP: okhttp
- использовал заголовок ответа
Content-Type
для обнаружения видеофайлов
- 04-имя-файла-веб-трансляции
- использует
WebView
для загрузки всех HTTP-запросов - использует регулярные выражения для обнаружения расширений файлов, связанных с видеоформатами, в URL-запросах
- активные ветки
- 05-веб-трансляция-имя-файла-media3
- использует
WebView
для загрузки всех HTTP-запросов - использует регулярные выражения для обнаружения расширений файлов, связанных с видеоформатами, в URL-запросах
- основан на ветке 04-webcast-filename и мигрирует с ExoPlayer на AndroidX Media3.
- 00-chromecast-приложение-приемник
- Приложение-приемник WebCast Chromecast
- gh-страницы
- Приложение-приемник WebCast Chromecast
- HEAD этой ветки всегда должен ссылаться/псевдоним HEAD ветки 00-chromecast-receiver-app
- размещено на GitHub Pages
Основные моменты исходного кода
- идентификация URL-адресов видео в исходящих HTTP-запросах
-
BrowserWebViewClient
- регулярное выражение для обнаружения видеофайлов
- та же методология, что и реализованная расширением веб-браузера
- Расширение «WebCast-Reloaded» для Chromium
- регулярное выражение для обнаружения видеофайлов
Юридический
- авторское право: Уоррен Бэнк
- лицензия: GPL-2.0