Webdiffusion
Application Android pour extraire les URL de vidéos (fichiers/flux) de sites Web et les regarder ailleurs (lecteur vidéo interne/externe, Google Chromecast, ExoAirPlayer).
Captures d'écran..
Tournée
-
BrowserActivity
s'affiche au démarrage de l'application et comprend :- un navigateur Web très basique
- icônes de la barre d'action :
- basculer le signet
- ajouter/supprimer l'URL du site Web actuel vers/de la liste des signets enregistrés de manière persistante
- Éléments du menu de la barre d'action :
- Signets
- tiroir ouvert à gauche : signets
- Vidéos
- tiroir ouvert à droite : Vidéos
- Paramètres
- Sortie
- fermez toute l'interface utilisateur et quittez l'application
- tiroir de gauche : signets
- contient une liste persistante de :
- URL de sites Web qui ont été enregistrées via l'icône de bascule de signet
- URL de vidéos enregistrées via le tiroir Vidéos
- cliquez sur un élément de la liste pour :
- ouvrir l'URL du site Web dans WebView
- regarder l'URL de la vidéo
-
SettingsActivity
détermine l'action particulière à effectuer
- cliquez longuement sur un élément de la liste pour :
- tiroir à droite : Vidéos
- contient une liste transitoire d'URL de vidéos trouvées sur la page Web actuellement chargée dans
WebView
- cette liste est effacée chaque fois que
WebView
accède à une nouvelle page Web
- cliquez sur un élément de la liste pour :
- ajouter l'URL de la vidéo à la liste des signets enregistrés de manière persistante
- regarder l'URL de la vidéo
-
SettingsActivity
détermine l'action particulière à effectuer
- cliquez longuement sur un élément de la liste pour :
-
SettingsActivity
est démarré à partir du menu de la barre d'action dans BrowserActivity
et comprend :- Lecteur vidéo pour sélectionner s'il faut regarder des vidéos en utilisant.
- interne avec expéditeur Chromecast
- externe
- démarrer le sélecteur d'activité avec une intention implicite
- action
-
android.intent.action.VIEW
- données
- taper
- type MIME pour le format de la vidéo
- extras
-
referUrl
- (Chaîne) URL de référence
- utilisé par ExoAirPlayer
- Expéditeur ExoAirPlayer
- démarrer
ExoAirPlayerSenderActivity
- Configuration du proxy HLS
- démarrer le sélecteur d'activité avec une intention implicite
- action
-
android.intent.action.VIEW
- données
-
http://webcast-reloaded.surge.sh/proxy.html#/watch/${base64_video}/referer/${base64_referer}
- taper
- démarrer
HlsProxyConfigurationActivity
- uniquement lorsqu'il n'y a aucune activité ayant un filtre d'intention correspondant
- ce qui ne devrait jamais arriver, puisque n'importe quel navigateur Web standard devrait proposer de gérer cette intention
-
VideoActivity
est démarré lorsqu'une URL vidéo est visionnée à l'aide du lecteur vidéo interne et comprend :- ExoJoueur
- affiche une icône dans le coin inférieur droit de la barre d'outils des commandes vidéo pour activer/désactiver le mode plein écran
- Expéditeur Chromecast
- affiche une icône de diffusion dans la barre d'action lorsqu'au moins un Google Chromecast est détecté sur le réseau local
- lorsqu'il est connecté à un Chromecast
- les URL des vidéos sont communiquées à l'application réceptrice exécutée dans le Chromecast
- l'application du récepteur Chromecast charge l'URL de la vidéo dans un lecteur vidéo HTML5 intégré
- le transfert des données vidéo s'effectue directement entre le Chromecast et le serveur qui héberge l'URL de la vidéo
- le transfert ne serait effectué par aucun des événements suivants :
-
VideoActivity
arrêtée -
BrowserActivity
arrêté - Application WebCast fermée
- Appareil Android éteint
- liste des URL de vidéos
- cliquez sur un élément de la liste pour :
- lire l'URL de la vidéo
- si vous êtes connecté à un Chromecast :
- sinon:
- sur Android, dans ExoPlayer
- toutes les requêtes HTTP incluent l'URL du référent
-
ExoAirPlayerSenderActivity
est démarré lorsqu'une URL vidéo est visionnée à l'aide de l'expéditeur ExoAirPlayer et comprend :-
WebView
qui charge une seule page Web- L'URL de la page Web dépend de la version d'Android
- Android 5.0 et plus récent
- version utilisant ES6+ javascript moderne
- Android 4.x et versions antérieures
- version utilisant javascript compatible ES5
- Le hachage d'URL contient :
-
#/watch/${base64_video}/referer/${base64_referer}
- la page Web lit les données du hachage d'URL et pré-remplit les champs :
- URL de la vidéo
- URL de référence
- la page Web lit les données des cookies et pré-remplit les champs :
- fournit une interface utilisateur de base pour contrôler toute application de récepteur ExoAirPlayer accessible via le réseau
-
HlsProxyConfigurationActivity
est démarré lorsqu'une URL vidéo est visionnée à l'aide de la configuration HLS-Proxy sur un appareil sans navigateur Web disponible et comprend :-
WebView
qui charge une page Web compatible ES5- Le hachage d'URL contient :
-
#/watch/${base64_video}/referer/${base64_referer}
- la page Web lit les données du hachage d'URL et pré-remplit les champs :
- URL de la vidéo
- URL de référence
- la page Web lit les données des cookies et pré-remplit les champs :
- cliquer sur le bouton Charger le lecteur effectue les tâches suivantes :
- configure une nouvelle URL vidéo qui redirige le manifeste HLS via HLS-Proxy
- redirige
WebView
vers une autre page Web compatible ES5 qui fournit des destinations de point de terminaison facultatives pour le manifeste HLS mandaté- Page Web ES6 pour l'expéditeur ExoAirPlayer
- Page Web ES5 pour l'expéditeur Chromecast
- dans
WebView
sur Android 4.x et versions antérieures :- la fonctionnalité du lecteur vidéo ne fonctionne pas
- dans
WebView
sur Android 5.0 et versions ultérieures :- la fonctionnalité du lecteur vidéo fonctionne
- La fonctionnalité de l'expéditeur Chromecast ne fonctionne pas
Mises en garde importantes
certaines URL de vidéos peuvent être lues dans WebCast et ExoAirPlayer, mais ne peuvent pas être lues sur Chromecast ou d'autres lecteurs vidéo externes
- cela peut se produire lorsqu'une URL de vidéo est hébergée par un serveur qui utilise l'en-tête de requête HTTP
Referer
pour restreindre l'accès, ce qui est une stratégie courante.- WebCast et ExoAirPlayer ont la fonctionnalité permettant de configurer la valeur de cet en-tête pour chaque URL vidéo unique
- Les applications réceptrices Chromecast ne peuvent pas modifier la valeur de cet en-tête, car elles sont limitées par les politiques de sécurité standard du navigateur.
- les spécifications pour XHR et fetch interdisent de modifier certains en-têtes de requête HTTP, y compris
Referer
- l'application de réception WebCast Chromecast
- tente de changer la valeur de cet en-tête
- révèle dans la console du débogueur distant que cette tentative déclenche l'avertissement :
- Refus de définir l'en-tête dangereux "référent"
- les autres lecteurs vidéo externes devraient :
- lire le
referUrl
supplémentaire dans l'intention de départ - configurer sa bibliothèque client HTTP pour changer la valeur de cet en-tête
- HLS-Proxy fournit une solution de contournement pratique à usage général
- configuration pour l'intégration avec WebCast :
- installer le proxy HLS
-
npm install --global "@warren-bank/hls-proxy"
- installer WebMonkey
- application pour ouvrir la configuration du proxy HLS
- dans WebMonkey
- installer le script utilisateur WebCast-Reloaded
- ajoute des fonctionnalités améliorées à la page Web compatible ES5 qui fournit la configuration du proxy HLS
- active un bouton intitulé : Démarrer l'application
- lorsque l'on clique dessus :
- démarrer le sélecteur d'activité avec une intention implicite
- action
-
android.intent.action.VIEW
- données
- URL du manifeste HLS mandaté
- taper
- dans WebCast
- Paramètres > Lecteur vidéo > Configuration du proxy HLS
- usage:
- exécuter le proxy HLS
-
hlsd --port 8080 --req-insecure --useragent "Chrome/90"
- dans WebCast
- naviguer dans
WebView
interne vers une page contenant le flux vidéo HLS souhaité - ouvrez le tiroir Vidéos (à droite)
- cliquez sur l'URL du flux vidéo HLS souhaité
- cliquez : Regarder
- un sélecteur d'activité démarrera
- WebMonkey sera inclus dans la liste des applications contenant une activité correspondante
- cliquez sur : WebMonkey
- dans WebMonkey
- configurez l'emplacement de votre instance en cours d'exécution de HLS-Proxy :
- cliquez sur : Démarrer l'application
- un sélecteur d'activité démarrera
- WebCast sera inclus dans la liste des applications contenant une activité correspondante
- cliquez sur : Lecteur vidéo WebCast
- dans WebCast
- cliquez sur le Icône de l'expéditeur Chromecast pour diffuser le flux vidéo HLS proxy sur un appareil Chromecast
le composant Android System WebView
est entièrement responsable de l'expérience du navigateur Web
- ce composant a une histoire compliquée
- sans entrer dans les détails :
- sur les versions d'Android < 5.0
- le composant
WebView
est intégré au micrologiciel- ne peut pas être mis à jour
- fait un mauvais travail en chargeant des pages Web modernes, car le langage javascript (ES6+) et les spécifications HTML (HTML5) ont considérablement changé
- sur les versions d'Android >= 5.0
- le composant
WebView
est une application autonome
- sur les versions d'Android >= 7.0
- le composant
WebView
est remplacé par un composant du navigateur Web Google Chrome, lorsqu'il est installé et activé
Organisation du dépôt Git
- branches rassis
- 01-fondation
- collection de petites applications pour développer et tester des fonctionnalités expérimentales
- 02-webcast-httpclient
- utilisé une bibliothèque client HTTP externe : Apache HttpClient
- utilisé l'en-tête de réponse
Content-Type
pour détecter les fichiers vidéo
- 03-webcast-okhttp
- utilisé une bibliothèque client HTTP externe : okhttp
- utilisé l'en-tête de réponse
Content-Type
pour détecter les fichiers vidéo
- 04-nom-fichier-webcast
- utilise
WebView
pour télécharger toutes les requêtes HTTP - utilise des expressions régulières pour détecter les extensions de fichiers associées aux formats vidéo dans les requêtes URL
- succursales actives
- 05-webcast-nom-fichier-media3
- utilise
WebView
pour télécharger toutes les requêtes HTTP - utilise des expressions régulières pour détecter les extensions de fichiers associées aux formats vidéo dans les requêtes URL
- s'appuie sur la branche 04-webcast-filename et migre d'ExoPlayer vers AndroidX Media3
- 00-application-récepteur-chromecast
- Application de réception WebCast Chromecast
- pages gh
- Application de réception WebCast Chromecast
- le HEAD de cette branche doit toujours référencer/alias le HEAD de la branche 00-chromecast-receiver-app
- hébergé par GitHub Pages
Points forts du code source
- identification des URL de vidéos dans les requêtes HTTP sortantes
-
BrowserWebViewClient
- regex pour détecter les fichiers vidéo
- même méthodologie que celle mise en œuvre par une extension de navigateur Web
- Extension Chromium "WebCast-Reloaded"
- regex pour détecter les fichiers vidéo
Légal
- droit d'auteur : Banque Warren
- licence : GPL-2.0