Introduction en bref : je souhaite parler du lecteur en ligne YouTube pour Android avec des listes de lecture locales, des chaînes et des recommandations.

Introduction détaillée :
Il y a quelque temps, j'ai rencontré le même problème que l'auteur de cette merveilleuse application. , et j'ai eu exactement la même relation avec elle : je veux avoir la possibilité de donner de temps en temps à mon enfant une tablette ou un smartphone avec des dessins animés, mais je ne suis pas du tout satisfait de l'endroit où le groupe de recommandations dans les applications standard — clients YouTube — mène l'enfant après 2-3 clics.
Malheureusement, après l'installation de l'application Channel Whitelist, j'ai découvert un autre inconvénient, plus prosaïque, mais tout de même fatal : l'interface de l'application ne m'a pas (et surtout pas à mon fils) semblé très conviviale, surtout après avoir eu l'habitude d'utiliser le lecteur YouTube Kids.
En gros, après un certain temps, j'étais prêt à réaliser ma propre version. Après un certain temps, il est devenu possible de mettre une balise sur la première version.
Fonctionnalités principales :
- Ajoutez vos chaînes et playlists préférées — elles seront sauvegardées et indexées dans la base de données locale.
- À l'intérieur des playlists ajoutées, désactivez les vidéos inutiles si vous n'en avez pas besoin.
- La liste des recommandations est générée aléatoirement uniquement à partir des chaînes et playlists ajoutées à l'application.
Les sources sont ouvertes, licence GPLv3 :
Ensuite, un aperçu des principales fonctionnalités plus en détail, ainsi que quelques détails techniques sur la manière de lire des vidéos YouTube dans votre application Android sans utiliser l'API de Google et les web wrappers.
Sur l'écran principal et sur l'écran du lecteur : recommandations aléatoires issues de chaînes non aléatoires.
Recherche instantanée dans la base de données locale.
=>
Ajouter une nouvelle chaîne ou une nouvelle playlist.
Rechercher par nom en ligne ou insérer une adresse connue. La liste des vidéos de la chaîne ou de la playlist est sauvegardée dans la base locale, les icônes ne sont pas mises en cache.
Playlist dynamique — lire les résultats de la recherche.
=>
Dans les recommandations sous la vidéo, seules les vidéos correspondant à la requête de recherche seront affichées.
De même, si vous ouvrez une vidéo à partir des paramètres de la playlist, la liste des recommandations n'affichera que les vidéos de cette même playlist.
Les playlists et chaînes peuvent être temporairement désactivées et réactivées.
Veuillez noter : les vidéos d'une liste de lecture désactivée disparaîtront également des résultats de recherche, de l'historique des visionnages et de la liste des favoris. Mais ne vous inquiétez pas, elles réapparaîtront dès que la liste de lecture sera réactivée.
Ajouter la vidéo à la liste noire
Une vidéo bloquée ne s'affichera pas dans les recommandations, ne figurera pas dans les résultats de recherche, disparaîtra de la liste des favoris et de l'historique des visionnages. La vidéo restera visible dans les paramètres de la liste de lecture.
Consulter la liste noire et réactiver les éléments bloqués par erreur :
Paramètres > menu en haut > Liste noire
Vidéos favorites et historique des visionnages
Les vidéos favorites sur l'écran du lecteur sont marquées d'une étoile dans le coin supérieur droit.
Menus contextuels en haut de l'écran et par clic long dans les galeries et listes
Copier le nom ou l'adresse de la vidéo ou de la liste de lecture depuis l'écran de visionnage ou dans n'importe quelle liste.
Démarrer rapidement — ajouter des chaînes et listes de lecture recommandées
=>
L'application apparaîtra immédiatement comme sur les captures d'écran ci-dessus.
Les chaînes et listes de lecture inutiles peuvent être désactivées ou supprimées dans les paramètres.
Installation
Page du projet :
en anglais :
réleases :
- Il n'y a pas sur Google Play et il n'y en aura pas dans un avenir proche (Google bloque les applications qui contournent l'API pour extraire leur site, y compris le mentionné Channel Whitelist ou lecteur NewPipe)
- Construisez à partir du code source :
- Téléchargez le fichier apk depuis la section des versions :
- J'espère qu'il apparaîtra dans le catalogue dans quelque temps (, mais n'avance pas depuis presque un mois), mais pour l'instant non
Gardez à l'esprit qu'il n'est pas possible de passer d'une version à une autre à partir de sources différentes sur un même appareil en raison des signatures de fichiers apk différentes. Avant d'installer une version d'une nouvelle source, il faut d'abord supprimer la version installée avec ses données — cache des listes de lecture et historique des visionnages (ou trouver comment transférer ces données).
Détails techniques
Ne nécessite pas de compte Google/YouTube, juste une connexion Internet, utilise des bibliothèques :
- pour obtenir des données du service YouTube et
- pour lire les vidéos.
Code source ouvert, licence libre GPLv3.
question : Est-il légal de parser des sites sans l'autorisation (ou avec une interdiction explicite) des auteurs ? , qui n'utilisent pas leur API, mais qui extraient leurs sites, car ils violent leur accord d'utilisateur.
réponse : bien sûr, c'est légal, c'est à vous de choisir l'outil à utiliser pour lire les informations publiques. De plus : , mais Gula peut avoir un avis différent, personnellement, je n'ai pas encore envie de me rendre au tribunal américain pour les convaincre.
Un peu de code
Bibliothèque — un projet auxiliaire du lecteur , permet de télécharger la liste des vidéos d'une chaîne ou d'une playlist spécifiée, de télécharger des détails sur une vidéo connue (ce qui est visible sur la page web de la vidéo), d'obtenir l'URL de l'icône de la vidéo, ainsi que d'obtenir l'adresse du flux vidéo.
Le code pour télécharger la playlist est un peu encombrant, donc je ne vais pas le mettre ici, ceux qui sont intéressés peuvent jeter un œil aux sources, c'est principalement la classe .
Voyons comment obtenir l'adresse du flux vidéo à partir de l'URL de la page publique de la vidéo et le lire dans le lecteur.
Inclure la bibliothèque dans
dépendances {
...
// NewPipe : parseur Youtube
// https://github.com/TeamNewPipe/NewPipeExtractor
implémentation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Il est curieux que même après cela, il ne sera toujours pas possible de l'utiliser, car les exemples renverront une erreur en raison de la classe manquante Downloader. Vous pouvez la copier dans le projet depuis le répertoire des tests automatisés — fonctionne pour la version 0.17.4 (il semble que dans une version plus récente de la bibliothèque, cette partie ait été refaite, mais il faut encore vérifier).
Obtenez l'adresse du flux vidéo à partir de l'URL de la page vidéo sur Youtube :
public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
// https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
NewPipe.init(Downloader.getInstance(), new Localization("GB", "fr"));
final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
.getStreamExtractor(ytVidUrl);
extractor.fetchPage();
final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
// for (final VideoStream stream : extractor.getVideoStreams()) {
// stream.getUrl();
// }
return streamUrl;
}Comme URL de la vidéo, ytVidUrl peut être l'adresse publique de la page de n'importe quelle vidéo sur Youtube, par exemple
Le lecteur sera de Google. Ce n'est pas une simple interface web pour YouTube, mais un véritable lecteur intégré permettant de lire n'importe quelle vidéo, suffisamment flexible et personnalisable. Il peut également lire des flux vidéo de YouTube, à condition de lui fournir la bonne adresse. Nous avons obtenu l'adresse du flux tout à l'heure, voyons donc comment l'envoyer au lecteur.
Connecter la bibliothèque au projet :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Nous ne passerons pas en revue tous les détails de l'intégration du composant lecteur dans l'application (vous pouvez consulter les exemples sur le site du projet ou dans le code), nous allons seulement voir comment démarrer la lecture d'une vidéo YouTube dans le lecteur avec l'adresse fournie ci-dessus :
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// arrêter la lecture de la vidéo actuelle, si elle a été chargée
videoPlayerView.getPlayer().stop(true);
} else {
// https://exoplayer.dev/
// https://github.com/google/ExoPlayer
final Uri mp4VideoUri = Uri.parse(streamUrl);
final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
.createMediaSource(mp4VideoUri);
// Mettons l'ancienne vidéo en pause pendant que nous préparons la nouvelle
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// Si nous mettons en pause ici après que le lecteur s'est déjà mis en pause en terminant
// de lire la vidéo, nous obtiendrons ici un deuxième événement STATE_ENDED, donc nous avons besoin ici
// d'une vérification spéciale.
// De plus, la valeur de getPlayWhenReady() restera true, donc nous vérifions précisément l'état.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// Préparer le lecteur avec la source.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// Indiquons la position actuelle immédiatement lors du chargement de la vidéo
// (dans les commentaires, ils parlent de sources de données qui prennent en charge ou non
// les transitions de recherche lors du chargement, il semble que ce soit des futilités - faisons simplement une recherche immédiatement après le chargement)
// Exoplayer joue une nouvelle Playlist depuis le début au lieu de la position fournie
// https://github.com/google/ExoPlayer/issues/4375
// Comment charger le flux à la position désirée ? #2197
// https://github.com/google/ExoPlayer/issues/2197
// à cet endroit, la duration normale n'est pas encore disponible, donc nous ne la vérifions pas
//if(seekTo > 0 && seekTo 0) {
// 5 secondes plus tôt
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}Problèmes connus
- Ne jouera pas les vidéos avec des restrictions d'âge, nécessitant une connexion à un compte Google/YouTube
par exemple : ,
conseil : ajouter ces vidéos à la liste noire ou demander à l'auteur de la vidéo de supprimer la restriction qui a été définie par erreur.
- Ne jouera pas certaines vidéos en streaming, pour lesquelles le service retourne une durée nulle (pour ces vidéos, la durée dans les listes et galeries est indiquée comme «[dur undef]»)
par exemple : ,
conseil : ajouter de telles vidéos à la liste noire.
- Les vidéos accessibles uniquement par des liens directs peuvent ne pas apparaître dans la playlist locale, même si vous téléchargez toutes les vidéos de l'utilisateur.
par exemple :
Si vous rencontrez une vidéo publique qui ne nécessite pas de connexion, qui se lit dans le navigateur mais pas dans le lecteur, envoyez un rapport de bug (il est tout à fait possible que le problème ait déjà été corrigé dans une nouvelle version. NewPipeExtractor et qu'il ne faudra que mettre à jour avec cette version. ).
L'interface peut être lente avec une connexion Internet lente (mais pas coupée).
En fin de compte
Mon fils est passé d'une tablette à un smart TV Samsung, qui ne peut pas lancer d'applications Android. C'est pourquoi le meilleur contrôle parental reste personnel.
Mais l'application s'est révélée assez pratique pour que je commence à l'utiliser moi-même. Ma première impression des premières versions fonctionnelles - je suis tombé dans un autre monde. Tout le contenu est chargé depuis YouTube, mais ce n'est plus vraiment YouTube, mais quelque chose d'autre, sûr et contrôlé, comme si j'avais retiré une scolopendre de mon œil et que je l'avais mise dans un bocal. Et c'est précisément à cause des recommandations.
Source : habr.com
