La mort de Koshchei dans la liste des recommandations (pouvez-vous rendre YouTube confortable et sûr?)

L'introduction est courte: je veux parler du lecteur en ligne YouTube pour Android avec des listes de lecture, des chaînes et des recommandations locales.



L'introduction est détaillée


Il y a quelque temps, j'ai rencontré exactement le même problème que l'auteur de la merveilleuse application Channel Whitelist , et j'ai déterminé exactement la même attitude à son égard: je veux pouvoir donner à mon enfant une tablette ou un smartphone avec des dessins animés de temps en temps, mais je ne suis pas du tout content, où en 2-3 clics, l'enfant obtient une liste de recommandations dans les applications standard - clients YouTube.


Malheureusement, après avoir installé l'application Channel Whitelist, il a déjà découvert une autre faille plus prosaïque, mais toujours fatale - NIH (et, surtout, son fils) n'a pas trouvé son interface très pratique, surtout après avoir l'habitude d'utiliser le lecteur YouTube Kids.


En général, après un certain temps, j'ai mûri pour faire ma mise en œuvre. Après un certain temps, il est devenu possible de mettre le tag sur la première version.


Caractéristiques clés:


  • Ajoutez vos chaînes et listes de lecture préférées - elles seront enregistrées et indexées dans la base de données locale
  • Désactivez les vidéos supplémentaires dans les listes de lecture ajoutées si vous n'en avez pas besoin
  • La liste des recommandations est générée aléatoirement uniquement à partir des chaînes et des listes de lecture ajoutées à l'application.

Les sources sont ouvertes, licence GPLv3: https://github.com/sadr0b0t/yashlang/


Découvrez plus en détail les principales fonctionnalités, ainsi que quelques détails techniques sur la façon de lire des vidéos YouTube dans votre application Android sans utiliser les API Google et les wrappers Web.


Sur l'écran principal et sur l'écran du lecteur: recommandations aléatoires de canaux non aléatoires








Recherche de base de données locale instantanée


=>


Ajouter une nouvelle chaîne ou liste de lecture




Recherchez par nom en ligne ou insérez une adresse connue. La liste des clips de chaîne ou de playlist est enregistrée dans la base de données locale, les icônes ne sont pas mises en cache.


Liste de lecture dynamique - lecture des résultats de recherche


=>




Dans les recommandations ci-dessous, la vidéo ne contiendra que des vidéos répondant à la requête de recherche.


De même, si vous ouvrez une vidéo à partir des paramètres de la liste de lecture, seuls les clips de la même liste de lecture seront dans la liste des recommandations.


Les listes de lecture et les chaînes peuvent être temporairement désactivées puis réactivées



Remarque: les vidéos de la liste de lecture désactivée disparaîtront également des résultats de recherche, de l'historique de navigation et de votre liste de favoris. Mais ne vous inquiétez pas, ils réapparaîtront immédiatement après la réactivation de la liste de lecture.


Liste noire



Un clip bloqué n'apparaîtra pas dans les recommandations, dans les résultats de recherche, disparaîtra de votre liste de favoris et de votre historique de navigation. La vidéo sera toujours visible dans les paramètres de la playlist.


Affichez la liste noire et réactivez les éléments bloqués par erreur:
Paramètres> menu d'en-tête> Liste noire



Vidéos favorites et historique des vidéos regardées



Les vidéos favorites sur l'écran du lecteur sont marquées d'un astérisque dans le coin supérieur droit.


Menus contextuels dans le titre de l'écran et clic long dans les galeries et les listes



Copiez le nom ou l'adresse de la vidéo ou de la liste de lecture sur l'écran de visualisation ou dans n'importe quelle liste.


Démarrage rapide - Ajouter des chaînes et des listes de lecture recommandées


=>


L'application ressemblera immédiatement aux 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.


L'installation


Page du projet: https://github.com/sadr0b0t/yashlang/
en anglais: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
versions: https://github.com/sadr0b0t/yashlang/releases



Gardez à l'esprit que le basculement entre différentes versions de différentes sources sur le même appareil ne fonctionnera pas en raison de signatures différentes du fichier apk, avant d'installer la version à partir d'une nouvelle source, vous devrez d'abord supprimer la version installée avec les données - cache de playlist et historique de navigation (ou comprendre comment ceux-ci transfert de données).


Détails techniques


Ne nécessite pas de compte Google / YouTube, seul Internet est nécessaire, utilise des bibliothèques:



Open source, licence GPLv3 gratuite.


Question: Est-il légal d'analyser des sites sans la permission (ou avec une interdiction explicite) des auteurs? Google supprime les applications de Google qui n'utilisent pas leurs API, mais analysent leurs sites, car ils violent leur accord d'utilisation.
réponse: bien sûr, légalement, c'est à vous de décider quel outil utiliser pour lire les informations accessibles au public. De plus: le tribunal américain a complètement légalisé le grattage de sites Web et a interdit qu'il soit techniquement gêné , mais Gul peut avoir une opinion différente, je n'ai personnellement pas envie d'aller devant le tribunal américain pour les convaincre.


Du code


La bibliothèque NewPipeExtractor est un projet auxiliaire du lecteur NewPipe qui vous permet de télécharger une liste de clips pour une chaîne ou une liste de lecture spécifiée, de télécharger des informations détaillées sur une vidéo connue (ce qui est visible sur la page Web de la vidéo), de recevoir l'adresse de l'icône vidéo et également de recevoir l'adresse du flux vidéo.


Le code pour télécharger la playlist est un peu lourd, donc je ne le donnerai pas ici, à quiconque est intéressé - regardez la source, en gros c'est la classe ContentLoader .


Voyons comment obtenir l'adresse du flux vidéo à l'adresse de la page publique de la vidéo et la lire dans le lecteur.


Connectez la bibliothèque à
app / build.gradle


dependencies { ... // NewPipe: youtube parser // https://github.com/TeamNewPipe/NewPipeExtractor implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4" ... } 

Il est curieux qu’après cela, il ne puisse plus être utilisé, car les exemples ne jurent que par la classe Downloader manquante. Il peut être copié dans le projet à partir du catalogue de tests automatiques NewPipeExtractor / extractor / src / test / java / org / schabi / newpipe / Downloader.java - fonctionne pour la version 0.17.4 (il semble que dans la nouvelle version de la bibliothèque, cette partie a été refaite, mais encore besoin de vérifier).


Obtenez l'adresse du flux vidéo à l'adresse de la page vidéo sur le site YouTube:


app / src / main / java / su / sadrobot / yashlang / controller / ContentLoader.java


  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", "en")); 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; } 

L'adresse vidéo de ytVidUrl peut être l'adresse publique de la page de n'importe quelle vidéo sur le site Web YouTube, par exemple https://www.youtube.com/watch?v=pd2RlatmNRk


Le joueur sera ExoPlayer de Google lui-même. Ce n'est pas un wrapper Web sur YouTube, mais un véritable lecteur intégré pour lire toutes les vidéos, assez flexible et personnalisable. Y compris la possibilité de lire des flux vidéo à partir de YouTube, si vous spécifiez l'adresse correcte. Nous venons de recevoir l'adresse du flux, nous allons donc voir comment l'envoyer au lecteur.


Connectez la bibliothèque au projet app / build.gradle :


 dependencies { ... // google Exoplayer // https://github.com/google/ExoPlayer // https://exoplayer.dev/ implementation 'com.google.android.exoplayer:exoplayer:2.10.8' ... } 

Nous ne prendrons pas en compte toutes les nuances du placement du composant lecteur sur l'écran de l'application (vous pouvez consulter les exemples sur le site Web du projet ou dans le code), nous verrons uniquement comment commencer à lire des vidéos à partir de YouTube dans le lecteur à l'adresse ci-dessus:


app / src / main / java / su / sadrobot / yashlang / WatchVideoActivity.java


 private void playVideoStream(final String streamUrl, final long seekTo) { if (streamUrl == null) { //    ,    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); //     ,    if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) { //       ,      ,  //  ,     STATE_ENDED,     //  . //    getPlayWhenReady()  true,    . // https://github.com/google/ExoPlayer/issues/2272 videoPlayerView.getPlayer().setPlayWhenReady(false); } // Prepare the player with the source. ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource); //        // (  -  -  ,      //  seek  , ,    -   seek   ) // Exoplayer plays new Playlist from the beginning instead of provided position // https://github.com/google/ExoPlayer/issues/4375 // How to load stream in the desired position? #2197 // https://github.com/google/ExoPlayer/issues/2197 //     duration   ,     //if(seekTo > 0 && seekTo < videoPlayerView.getPlayer().getDuration()) { if (seekTo > 0) { //  5   videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0); } videoPlayerView.getPlayer().setPlayWhenReady(true); } } 

Problèmes connus


  • Ne lira pas les vidéos avec des restrictions d'âge qui nécessitent une connexion à votre compte Google / YouTube

par exemple: Ilya Muromets, Mosfilm Film Concern , Ruslan et Lyudmila film series 1 / Ruslan et Lyudmila film 1, Mosfilm Film Concern


astuce: ajoutez de telles vidéos à la liste noire ou demandez à l'auteur de la vidéo de supprimer la restriction définie par erreur.


  • Certaines vidéos diffusées pour lesquelles le service renvoie une durée nulle ne seront pas lues (pour ces vidéos, la durée dans les listes et la galerie est marquée comme "[dur undef]")

Par exemple: attendez une minute! Tous les numéros Soyuzmultfilm HD (Dessins animés pour enfants), Dessins animés Soyuzmultfilm Studios , Meilleurs dessins animés Soyuzmultfilm, Dessins animés Studios Soyuzmultfilm


Astuce: ajoutez ces vidéos à la liste noire.


  • Les vidéos accessibles uniquement via des liens directs peuvent ne pas entrer dans la liste de lecture locale, même si vous téléchargez toutes les vidéos de l'utilisateur

par exemple: Taming of Fire 1 series, Mosfilm Film Concern


  • Si vous voyez une vidéo publique qui ne nécessite pas de connexion, joue dans le navigateur, mais ne joue pas dans le lecteur, envoyez un rapport de bogue (il est fort possible que le problème ait déjà été corrigé dans la nouvelle version de NewPipeExtractor et vous avez seulement besoin de mettre à jour l'assembly avec cette version, par exemple ).


  • L'interface peut ralentir lorsque Internet est lent (mais pas désactivé)



En fin de compte


Le fils est passé d'une tablette à un téléviseur intelligent Samsung, qui ne sait pas comment exécuter les applications Android. Par conséquent, le meilleur contrôle parental est toujours personnel.


Mais l'application s'est avérée assez pratique pour que je puisse commencer à l'utiliser moi-même. La première impression des premières versions de travail - est entrée dans un autre monde. Tout le contenu est téléchargé depuis YouTube, mais ce n'est plus YouTube, mais quelque chose d'autre, sûr et contrôlé, comme s'il enlevait un scolopendre de l'œil et le mettait dans un bocal en verre. Et c'est dans les recommandations.

Source: https://habr.com/ru/post/fr482874/


All Articles