WebCast
Android-App zum Extrahieren von Video-URLs (Dateien/Streams) von Websites und zum Ansehen an anderer Stelle (interner/externer Videoplayer, Google Chromecast, ExoAirPlayer).
Screenshots..


















Tour
-
BrowserActivity
wird angezeigt, wenn die App gestartet wird, und umfasst:- ein sehr einfacher Webbrowser
- Aktionsleistensymbole:
- Lesezeichen umschalten
- Aktuelle Website-URL zur Liste dauerhaft gespeicherter Lesezeichen hinzufügen/entfernen
- Menüelemente der Aktionsleiste:
- Lesezeichen
- offene Schublade links: Lesezeichen
- Videos
- offene Schublade rechts: Videos
- Einstellungen
- Öffnen Sie
SettingsActivity
- Ausfahrt
- Schließen Sie die gesamte Benutzeroberfläche und beenden Sie die App
- Schublade links: Lesezeichen
- enthält eine dauerhafte Liste von:
- Website-URLs, die über das Lesezeichen -Umschaltsymbol gespeichert wurden
- Video-URLs, die über die Schublade „Videos“ gespeichert wurden
- Klicken Sie auf ein Listenelement, um:
- Öffnen Sie die Website-URL in WebView
- Video-URL ansehen
-
SettingsActivity
bestimmt die bestimmte Aktion, die ausgeführt werden soll
- Klicken Sie lange auf ein Listenelement, um:
- Schublade rechts: Videos
- enthält eine vorübergehende Liste von Video-URLs, die auf der aktuell in
WebView
geladenen Webseite gefunden wurden- Diese Liste wird jedes Mal gelöscht, wenn
WebView
zu einer neuen Webseite navigiert
- Klicken Sie auf ein Listenelement, um:
- Video-URL zur Liste dauerhaft gespeicherter Lesezeichen hinzufügen
- Video-URL ansehen
-
SettingsActivity
bestimmt die bestimmte Aktion, die ausgeführt werden soll
- Klicken Sie lange auf ein Listenelement, um:
-
SettingsActivity
wird über das Aktionsleistenmenü in BrowserActivity
gestartet und umfasst:- Videoplayer, um auszuwählen, ob Videos mit... angesehen werden sollen.
- intern mit Chromecast-Absender
- Starten Sie
VideoActivity
- extern
- Starten Sie die Aktivitätsauswahl mit einer impliziten Absicht
- Aktion
-
android.intent.action.VIEW
- Daten
- Typ
- Mime-Typ für das Videoformat
- Extras
-
referUrl
- (String) Referrer-URL
- Wird von ExoAirPlayer verwendet
- ExoAirPlayer-Absender
- Starten Sie
ExoAirPlayerSenderActivity
- HLS-Proxy-Konfiguration
- Starten Sie die Aktivitätsauswahl mit einer impliziten Absicht
- Aktion
-
android.intent.action.VIEW
- Daten
-
http://webcast-reloaded.surge.sh/proxy.html#/watch/${base64_video}/referer/${base64_referer}
- Typ
- Starten Sie
HlsProxyConfigurationActivity
- Nur wenn es keine Aktivität gibt, die über einen passenden Absichtsfilter verfügt
- Dies sollte niemals passieren, da jeder Standard-Webbrowser die Verarbeitung dieses Intents anbieten sollte
-
VideoActivity
wird gestartet, wenn eine Video-URL mit dem internen Videoplayer angesehen wird, und umfasst:- ExoPlayer
- Zeigt ein Symbol in der unteren rechten Ecke der Videosteuerungs-Symbolleiste an, um den Vollbildmodus ein-/auszuschalten
- Chromecast-Absender
- Zeigt ein Actionbar- Cast- Symbol an, wenn mindestens ein Google Chromecast im LAN erkannt wird
- bei Verbindung mit einem Chromecast
- Video-URLs werden an die Empfänger-App übermittelt, die im Chromecast ausgeführt wird
- Die Chromecast-Receiver-App lädt die Video-URL in einen eingebetteten HTML5-Videoplayer
- Die Übertragung von Videodaten erfolgt direkt zwischen Chromecast und dem Server, der die Video-URL hostet
- Die Übertragung würde durch keines der folgenden Ereignisse beeinträchtigt:
-
VideoActivity
wurde gestoppt -
BrowserActivity
wurde gestoppt - Die WebCast-App wurde beendet
- Android-Gerät ausgeschaltet
- Liste der Video-URLs
- Klicken Sie auf ein Listenelement, um:
- Video-URL abspielen
- bei Verbindung mit einem Chromecast:
- ansonsten:
- auf Android, im ExoPlayer
- Alle HTTP-Anfragen enthalten die Referrer-URL
-
ExoAirPlayerSenderActivity
wird gestartet, wenn eine Video-URL mit dem ExoAirPlayer-Absender angesehen wird, und umfasst:-
WebView
, das eine einzelne Webseite lädt- Die URL der Webseite hängt von der Android-Version ab
- Android 5.0 und neuer
- Version mit ES6+ modernem Javascript
- Android 4.x und älter
- Version mit ES5-kompatiblem Javascript
- URL-Hash enthält:
-
#/watch/${base64_video}/referer/${base64_referer}
- Die Webseite liest Daten aus dem URL-Hash und füllt Felder vorab aus:
- Die Webseite liest Daten aus Cookies und füllt Felder vorab aus:
- Bietet eine grundlegende Benutzeroberfläche zur Steuerung jeder ExoAirPlayer-Empfänger-App, die über das Netzwerk erreichbar ist
-
HlsProxyConfigurationActivity
wird gestartet, wenn eine Video-URL mithilfe der HLS-Proxy-Konfiguration auf einem Gerät ohne verfügbaren Webbrowser angesehen wird, und umfasst:-
WebView
, das eine ES5-kompatible Webseite lädt- URL-Hash enthält:
-
#/watch/${base64_video}/referer/${base64_referer}
- Die Webseite liest Daten aus dem URL-Hash und füllt Felder vorab aus:
- Die Webseite liest Daten aus Cookies und füllt Felder vorab aus:
- Durch Klicken auf die Schaltfläche „Player laden“ werden die folgenden Aufgaben ausgeführt:
- konfiguriert eine neue Video-URL, die das HLS-Manifest über den HLS-Proxy umleitet
- Leitet
WebView
auf eine andere ES5-kompatible Webseite um, die optionale Endpunktziele für das Proxy-HLS-Manifest bereitstellt- ES6-Webseite für ExoAirPlayer-Absender
- ES5-Webseite für Chromecast-Absender
- in
WebView
auf Android 4.x und älter:- Die Videoplayer-Funktionalität funktioniert nicht
- in
WebView
auf Android 5.0 und neuer:- Die Videoplayer-Funktionalität funktioniert
- Die Chromecast- Senderfunktion funktioniert nicht
Wichtige Vorbehalte
Einige Video-URLs können möglicherweise in WebCast und ExoAirPlayer abgespielt werden, können jedoch nicht auf Chromecast oder anderen externen Videoplayern abgespielt werden
- Dies kann auftreten, wenn eine Video-URL von einem Server gehostet wird, der den
Referer
-HTTP-Anforderungsheader verwendet, um den Zugriff einzuschränken, was eine gängige Strategie ist- WebCast und ExoAirPlayer verfügen über die Funktionalität, den Wert dieses Headers für jede eindeutige Video-URL zu konfigurieren
- Chromecast-Empfänger-Apps können den Wert dieses Headers nicht ändern, da sie durch standardmäßige Browser-Sicherheitsrichtlinien eingeschränkt werden
- Die Spezifikationen für XHR und Fetch verbieten das Ändern bestimmter HTTP-Anfrageheader, einschließlich
Referer
- die WebCast Chromecast-Receiver-App
- versucht, den Wert dieses Headers zu ändern
- zeigt in der Remote-Debugger-Konsole an, dass dieser Versuch die Warnung auslöst:
- Es wurde abgelehnt, den unsicheren Header „Referer“ zu setzen.
- Andere externe Videoplayer müssten:
- Lesen Sie die zusätzliche
referUrl
im Start-Intent - Konfigurieren Sie seine HTTP-Client-Bibliothek, um den Wert dieses Headers zu ändern
- HLS-Proxy bietet eine praktische, allgemeine Problemumgehung
- Setup für die Integration mit WebCast:
- HLS-Proxy installieren
-
npm install --global "@warren-bank/hls-proxy"
- Installieren Sie WebMonkey
- App zum Öffnen der HLS-Proxy-Konfiguration
- in WebMonkey
- Installieren Sie das WebCast-Reloaded-Benutzerskript
- Fügt der ES5-kompatiblen Webseite, die die HLS-Proxy-Konfiguration bereitstellt, erweiterte Funktionalität hinzu
- aktiviert eine Schaltfläche mit der Bezeichnung: App starten
- beim Anklicken:
- Starten Sie die Aktivitätsauswahl mit einer impliziten Absicht
- Aktion
-
android.intent.action.VIEW
- Daten
- Typ
- im WebCast
- Einstellungen > Videoplayer > HLS-Proxy-Konfiguration
- Verwendung:
- Führen Sie den HLS-Proxy aus
-
hlsd --port 8080 --req-insecure --useragent "Chrome/90"
- im WebCast
- Navigieren Sie im internen
WebView
zu einer Seite mit dem gewünschten HLS-Videostream - Öffnen Sie die Videoschublade (rechts).
- Klicken Sie auf die URL für den gewünschten HLS-Videostream
- Klicken Sie auf: Ansehen
- Eine Aktivitätsauswahl wird gestartet
- WebMonkey wird in die Liste der Apps aufgenommen, die eine passende Aktivität enthalten
- Klicken Sie auf: WebMonkey
- in WebMonkey
- Konfigurieren Sie den Standort Ihrer laufenden Instanz von HLS-Proxy:
- Klicken Sie auf: App starten
- Eine Aktivitätsauswahl wird gestartet
- WebCast wird in die Liste der Apps aufgenommen, die eine entsprechende Aktivität enthalten
- Klicken Sie auf: WebCast Video Player
- im WebCast
- Klicken Sie auf
Chromecast-Absendersymbol zum Übertragen des Proxy-HLS-Videostreams an ein Chromecast-Gerät
Die Android System WebView
Komponente ist vollständig für das Webbrowser-Erlebnis verantwortlich
- Diese Komponente hat eine komplizierte Geschichte
- ohne ins Detail zu gehen:
- auf Android-Versionen < 5.0
- Die
WebView
Komponente ist in die Firmware integriert- kann nicht aktualisiert werden
- lädt moderne Webseiten schlecht, da sich die Javascript-Sprache (ES6+) und die HTML-Spezifikation (HTML5) erheblich geändert haben
- auf Android-Versionen >= 5.0
- Die
WebView
Komponente ist eine eigenständige Anwendung
- auf Android-Versionen >= 7.0
- Die
WebView
-Komponente wird durch eine Komponente des Google Chrome-Webbrowsers ersetzt, wenn dieser installiert und aktiviert wird
Organisation von Git Repo
- abgestandene Zweige
- 01-Stiftung
- Sammlung kleiner Apps zum Entwickeln und Testen experimenteller Funktionen
- 02-Webcast-httpclient
- verwendete eine externe HTTP-Client-Bibliothek: Apache HttpClient
- hat den
Content-Type
-Antwortheader verwendet, um Videodateien zu erkennen
- 03-webcast-okhttp
- verwendete eine externe HTTP-Client-Bibliothek: okhttp
- hat den
Content-Type
-Antwortheader verwendet, um Videodateien zu erkennen
- 04-Webcast-Dateiname
- verwendet
WebView
um alle HTTP-Anfragen herunterzuladen - verwendet reguläre Ausdrücke, um Dateierweiterungen zu erkennen, die mit Videoformaten in URL-Anfragen verknüpft sind
- aktive Filialen
- 05-Webcast-Dateiname-Medium3
- verwendet
WebView
um alle HTTP-Anfragen herunterzuladen - verwendet reguläre Ausdrücke, um Dateierweiterungen zu erkennen, die mit Videoformaten in URL-Anfragen verknüpft sind
- baut auf dem Zweig 04-webcast-filename auf und migriert von ExoPlayer zu AndroidX Media3
- 00-Chromecast-Receiver-App
- WebCast Chromecast-Receiver-App
- gh-Seiten
- WebCast Chromecast-Receiver-App
- Der HEAD dieses Zweigs sollte immer auf den HEAD des Zweigs 00-chromecast-receiver-app verweisen/einen Alias verwenden
- gehostet von GitHub Pages
Highlights des Quellcodes
- Identifizierung von Video-URLs in ausgehenden HTTP-Anfragen
-
BrowserWebViewClient
- Regex zum Erkennen von Videodateien
- Dieselbe Methodik, die von einer Webbrowser-Erweiterung implementiert wird
- „WebCast-Reloaded“ Chromium-Erweiterung
- Regex zum Erkennen von Videodateien
Legal
- Urheberrecht: Warren Bank
- Lizenz: GPL-2.0