La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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

Malheureusement, après avoir installé l'application Channel Whitelist, un autre défaut plus prosaïque, mais toujours fatal, a été découvert - NIH moi (et, surtout, mon fils) avons trouvé son interface pas très pratique, surtout après avoir pris l'habitude d'utiliser le lecteur YouTube Kids.

En général, après un certain temps, j'étais prêt à réaliser ma propre implémentation. Après un certain temps, il est devenu possible de mettre un tag sur la première version.

Principales caractéristiques:

  • 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
  • Dans les listes de lecture ajoutées, désactivez les vidéos inutiles si vous n'en avez pas besoin
  • La liste des recommandations est générée de manière aléatoire uniquement à partir des chaînes et playlists ajoutées à l'application

Open source, licence GPLv3 : https://github.com/sadr0b0t/yashlang/

Vous trouverez ci-dessous un aperçu plus détaillé des 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 l'API Google ni les wrappers Web.

Sur l'écran principal et sur l'écran du joueur : recommandations aléatoires provenant de chaînes non aléatoires

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Recherche instantanée dans la base de données locale

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) => La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Ajouter une nouvelle chaîne ou playlist

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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

Liste de lecture dynamique - lire les résultats de la recherche

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) => La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Dans les recommandations vidéo, seules les vidéos répondant à la requête de recherche seront présentes.

De même, si vous ouvrez une vidéo depuis les paramètres de la playlist, seules les vidéos de la même playlist apparaîtront dans la liste des recommandations.

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

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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

Ajouter une vidéo à la liste noire

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Une vidéo bloquée ne sera pas affichée dans les recommandations, dans les résultats de recherche, et disparaîtra de la liste des favoris et de l'historique de visionnage. La vidéo sera toujours visible dans les paramètres de la playlist.

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

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Vidéos préférées et historique de visionnage

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

Les vidéos préférées 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

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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

Démarrage rapide : ajoutez des chaînes et des listes de lecture recommandées

La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?) => La mort de Koshchei figure sur la liste des recommandations (est-il possible de rendre YouTube confortable et sûr ?)

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.

Installation

траница роекта : https://github.com/sadr0b0t/yashlang/
En anglais: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
sorties : https://github.com/sadr0b0t/yashlang/releases

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

Détails techniques

Ne nécessite pas de compte Google/YouTube, vous n'avez besoin que d'Internet, utilise les bibliothèques suivantes :

Licence GPLv3 open source et gratuite.

question : est-il généralement légal de supprimer des sites Web sans autorisation (ou avec une interdiction explicite) de la part des auteurs ? Google supprime des applications de Google Play, qui n'utilisent pas leur API, mais analysent leurs sites, car ils violent leur contrat d'utilisation.
réponse : bien sûr, c'est légal, c'est à vous de décider quel outil utiliser pour lire les informations accessibles au public. En outre: Un tribunal américain a complètement légalisé le scraping de sites Web et interdit toute interférence technique avec celui-ci., mais Gul a peut-être un avis différent ; personnellement, je n’ai pas encore envie d’aller devant un tribunal américain pour les convaincre.

Du code

bibliothèque NouveauPipeExtractor - projet d'accompagnement des joueurs NewPipe, vous permet de télécharger une liste de vidéos 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 célèbre (ce qui est visible sur la page Web de la vidéo), d'obtenir l'adresse de l'icône de la vidéo, ainsi que l'adresse de la vidéo. flux.

Le code pour charger la playlist est un peu lourd, donc je ne le donnerai pas ici, pour ceux que ça intéresse, jetez un oeil au code source, c'est en gros une classe Chargeur de contenu.

Voyons comment obtenir l'adresse d'un flux vidéo à partir de l'adresse de la page vidéo publique 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, vous ne puissiez toujours pas l'utiliser, car... les exemples se plaindront de la classe Downloader manquante. Il peut être copié dans le projet depuis le répertoire des tests automatisés NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - fonctionne pour la version 0.17.4 (il semble que cette partie ait été refaite dans une version plus récente de la bibliothèque, mais il reste encore à vérifier).

Obtenez l'adresse du flux vidéo par 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 ytVidUrl peut être l'adresse publique de la page de n'importe quelle vidéo du site YouTube, par exemple https://www.youtube.com/watch?v=pd2RlatmNRk

Le joueur va ExoPlayer de Google lui-même. Il ne s'agit pas d'un wrapper Web sur YouTube, mais d'un véritable lecteur intégré permettant de lire n'importe quelle vidéo, assez flexible et personnalisable. Il peut également lire des flux vidéo de YouTube si vous lui fournissez la bonne adresse. Nous venons de recevoir l'adresse du stream, voyons donc comment l'envoyer au joueur.

Connecter 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 considérerons pas 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 démarrer la lecture d'une vidéo de YouTube dans le lecteur à l'adresse reçue 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 lit pas les vidéos avec des restrictions d'âge qui nécessitent une connexion à votre compte Google/YouTube

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

conseil : ajoutez ces 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 longueur nulle ne seront pas lues (pour de telles vidéos, la durée dans les listes et la galerie est marquée comme « [dur undef] »)

par exemple: Attendez! Tous les numéros de Soyuzmultfilm HD (Dessins animés pour enfants), Dessins animés du studio Soyuzmultfilm, Top des dessins animés Soyuzmultfilm, Dessins animés du studio Soyuzmultfilm

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

  • Les vidéos disponibles uniquement via des liens directs peuvent ne pas être incluses dans la playlist locale, même si vous téléchargez toutes les vidéos de l'utilisateur.

par exemple: Taming of Fire Épisode 1, Mosfilm Cinema Concern

  • Si vous tombez sur une vidéo publique qui ne nécessite pas de connexion, qui est lue dans le navigateur, mais qui n'est pas lue dans le lecteur, envoyez un rapport de bug (il est fort possible que le problème ait déjà été résolu dans la nouvelle version NouveauPipeExtractor et il vous suffira de mettre à jour l'assembly avec cette version, par exemple).

  • L'interface peut ralentir si Internet est lent (mais pas éteint)

En conséquence,

Mon fils est passé d'une tablette à un téléviseur intelligent Samsung, qui ne peut pas exécuter d'applications Android. Le meilleur contrôle parental reste donc personnel.

Mais l’application s’est avérée suffisamment pratique pour que je puisse commencer à l’utiliser moi-même. La première impression des premières versions de travail était que j'étais 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 si vous retiriez un mille-pattes de votre œil et le mettiez dans un bocal en verre. Et tout dépend des recommandations.

Source: habr.com

Ajouter un commentaire