Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Kurze Einführung: Ich möchte über den Online-Player YouTube für Android mit lokalen Playlists, Kanälen und Empfehlungen sprechen.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Ein ausführliches Vorwort:
Vor einiger Zeit hatte ich genau das gleiche Problem wie der Autor dieser großartigen Anwendung. Channel Whitelist, und ich habe zu diesem Problem genau die gleiche Einstellung: Ich möchte meinem Kind ab und zu ein Tablet oder Smartphone mit Zeichentrickfilmen geben, aber es stört mich sehr, wohin das Kind in den Standard-YouTube-Anwendungen nach 2-3 Klicks zu den Empfehlungen geleitet wird.

Leider wurde nach der Installation der Anwendung Channel Whitelist ein anderer, banaler, aber dennoch fataler Nachteil festgestellt – die Benutzeroberfläche von NIH erschien mir (und vor allem meinem Sohn) nicht sehr benutzerfreundlich, insbesondere nach der Gewöhnung an den YouTube Kids Player.

Allgemein reifte ich nach einiger Zeit, um meine eigene Implementierung zu erstellen. Nach einiger Zeit wurde es möglich, ein Tag für die erste Veröffentlichung zu setzen.

Hauptfunktionen:

  • Fügen Sie Ihre Lieblingskanäle und -playlists hinzu – sie werden in der lokalen Datenbank gespeichert und indexiert.
  • In den hinzugefügten Playlists können Sie nicht benötigte Videos deaktivieren.
  • Die Liste der Empfehlungen wird zufällig aus den in der Anwendung hinzugefügten Kanälen und Playlists generiert.

Die Quellcodes sind offen, Lizenz GPLv3: https://github.com/sadr0b0t/yashlang/

Im Folgenden eine detaillierte Übersicht über die Hauptfunktionen und einige technische Details, wie Sie Videos von YouTube in Ihrer Android-Anwendung ohne Verwendung der Google-API und Webwrapper abspielen können.

Auf dem Hauptbildschirm und im Player-Bildschirm: zufällige Empfehlungen aus nicht-zufälligen Kanälen.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Sofortige Suche in der lokalen Datenbank.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) => Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Einen neuen Kanal oder eine Playlist hinzufügen.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Online nach Namen suchen oder eine bekannte Adresse einfügen. Die Liste der Videos des Kanals oder der Playlist wird in die lokale Datenbank gespeichert, Icons werden nicht zwischengespeichert.

Dynamische Playlist – Suchergebnisse abspielen.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) => Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

In den Empfehlungen unter dem Video werden nur Videos angezeigt, die dem Suchbegriff entsprechen.

Ähnlich, wenn Sie ein Video aus den Playlist-Einstellungen öffnen, werden in der Liste der Empfehlungen nur Videos aus derselben Playlist angezeigt.

Playlists und Kanäle können vorübergehend deaktiviert und wieder aktiviert werden.

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Bitte beachten Sie: Videos aus einer deaktivierten Playlist verschwinden auch aus den Suchergebnissen, dem Verlauf und der Favoritenliste. Aber keine Sorge, sie erscheinen sofort wieder, sobald die Playlist wieder aktiviert ist.

Video auf die schwarze Liste setzen

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Das blockierte Video wird nicht in Empfehlungen, Suchergebnissen angezeigt und verschwindet aus der Liste der Favoriten sowie der观看历史. Das Video wird jedoch noch in den Einstellungen der Playlist sichtbar sein.

Schwarze Liste einsehen und fälschlicherweise blockierte Elemente wieder aktivieren:
Einstellungen > Menü in der Kopfzeile > Schwarze Liste

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Favoriten und Verlauf

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Favoriten im Player-Bildschirm sind in der oberen rechten Ecke mit einem Sternchen gekennzeichnet.

Kontextmenüs in der Kopfzeile und durch langes Drücken in Galerien und Listen

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Kopiere den Namen oder die Adresse des Videos oder der Playlist im Anzeigebereich oder in einer beliebigen Liste.

Schneller Einstieg – empfohlene Kanäle und Playlists hinzufügen

Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?) => Der Tod von Koshchei in den Empfehlungen (kann YouTube gemütlich und sicher gemacht werden?)

Die App wird sofort so aussehen, wie auf den obigen Screenshots.

Unbenötigte Kanäle und Playlists können in den Einstellungen deaktiviert oder gelöscht werden.

Installation

Projektseite: https://github.com/sadr0b0t/yashlang/
in englischer Sprache: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
Veröffentlichungen: https://github.com/sadr0b0t/yashlang/releases

Beachte, dass das Wechseln zwischen verschiedenen Versionen aus verschiedenen Quellen auf demselben Gerät aufgrund unterschiedlicher APK-Signaturen nicht möglich ist. Vor der Installation einer neuen Version aus einer anderen Quelle muss die installierte Version zuerst zusammen mit den Daten - dem Cache von Playlists und dem Verlauf - entfernt werden (oder überlegt werden, wie diese Daten übertragen werden können).

Technische Details

Benötigt kein Google-/YouTube-Konto, nur Internet, verwendet die Bibliotheken:

Open Source, freie GPLv3-Lizenz.

Frage: Ist das Scraping von Webseiten ohne Genehmigung (oder mit ausdrücklichem Verbot) der Autoren überhaupt legal? Google entfernt aus dem Google Play Anwendungen, die nicht ihre API benutzen und deren Websites scrapen, weil sie gegen ihre Nutzungsbedingungen verstoßen.
Antwort: Natürlich ist es legal, es ist deine Entscheidung, welches Werkzeug du verwendest, um öffentliche Informationen zu lesen. Mehr noch: Das US-Gericht hat das Scraping von Webseiten vollständig legalisiert und es technisch verboten, dies zu verhindern., aber Gula könnte eine andere Meinung haben, ich persönlich habe momentan kein Verlangen, sie vor dem amerikanischen Gericht zu überzeugen.

Ein wenig Code

Bibliothek NewPipeExtractor — ein unterstützendes Projekt des Players NewPipe, ermöglicht das Herunterladen einer Liste von Videos für einen bestimmten Kanal oder eine Playlist, das Abrufen detaillierter Informationen zu einem bekannten Video (was auf der Webseite des Videos sichtbar ist), das Erhalten der Adresse des Video-Icons sowie das Abrufen der Adresse des Video-Streams.

Der Code zum Herunterladen der Playlist ist etwas umfangreich, daher werde ich ihn hier nicht anführen, wer interessiert ist — schaut in die Quellcodes, im Wesentlichen handelt es sich um die Klasse ContentLoader.

Lassen Sie uns sehen, wie man die URL des Video-Streams anhand der Adresse der öffentlichen Videoseite erhält und sie im Player abspielt.

Die Bibliothek in
app/build.gradle

dependencies {
...
    // NewPipe: YouTube-Parser
    // https://github.com/TeamNewPipe/NewPipeExtractor
    implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}

Es ist interessant, dass man sie danach trotzdem nicht verwenden kann, da die Beispiele sich über die fehlende Klasse Downloader beschweren. Diese kann man aus dem Verzeichnis der automatischen Tests ins Projekt kopieren. NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funktioniert für die Version 0.17.4 (es scheint, dass dieser Teil in einer neueren Version der Bibliothek überarbeitet wurde, muss aber noch überprüft werden).

Um die URL des Video-Streams anhand der Adresse der Videoseite auf YouTube zu erhalten:

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;
    }

Als Video-Adresse kann ytVidUrl die öffentliche Adresse der Seite eines beliebigen Videos auf YouTube sein, zum Beispiel https://www.youtube.com/watch?v=pd2RlatmNRk

Der Player wird ExoPlayer von Google selbst. Es handelt sich nicht um eine Web-Oberfläche für YouTube, sondern um einen echten eingebetteten Player zum Abspielen beliebiger Videos, der ausreichend flexibel und anpassbar ist. Er kann auch YouTube-Video-Streams abspielen, wenn die richtige Adresse angegeben wird. Die Adresse des Streams haben wir gerade erhalten, daher sehen wir uns an, wie wir sie an den Player übergeben.

Binden Sie die Bibliothek ins Projekt ein app/build.gradle:

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

Wir werden die Details zur Platzierung des Player-Komponenten auf dem Bildschirm der Anwendung nicht betrachten (Sie können sich die Beispiele auf der Projektwebsite oder im Code ansehen), sondern nur darauf eingehen, wie man das Abspielen von Videos von YouTube im Player mit der oben genannten Adresse startet:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // Beende die Wiedergabe des aktuellen Videos, falls es geladen wurde
        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);

        // Pausieren wir das alte Video, während wir das neue vorbereiten
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Wenn wir hier pausieren, nachdem der Player das Video von selbst pausiert hat,
            // erhalten wir hier ein weiteres Ereignis STATE_ENDED, daher benötigen wir hier
            // eine spezielle Überprüfung.
            // Das bedeutet, dass der Wert von getPlayWhenReady() true bleiben wird, also prüfen wir genau den Status.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Bereite den Player mit der Quelle vor.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Geben wir die aktuelle Position sofort beim Laden des Videos an
        // (in den Kommentaren steht etwas über Datenquellen, die Unterstützungen oder nicht unterstützen
        // für seek bei Ladevorgängen, es scheint, dass das Quatsch ist - einfach direkt nach dem Laden seeken)
        // Exoplayer spielt die neue Playlist von Anfang an statt von der angegebenen Position
        // https://github.com/google/ExoPlayer/issues/4375
        // Wie lädt man den Stream an der gewünschten Position? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // An dieser Stelle ist die normale Dauer noch nicht verfügbar, daher überprüfen wir das nicht
        //if(seekTo > 0 && seekTo  0) {
            // fünf Sekunden früher
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Bekannte Probleme

  • Es wird keine Videos mit Altersbeschränkungen abspielen, die eine Anmeldung in einem Google/YouTube-Konto erfordern.

zum Beispiel: Ilja Muromez, Kinokonzern „Mosfilm“, Russlan und Ludmila 1. Folge / Ruslan and Lyudmila Film 1, Kinokonzern „Mosfilm“

Tipp: Solche Videos in die schwarze Liste hinzufügen oder den Autor des Videos bitten, das irrtümlich gesetzte Limit aufzuheben.

  • Einige Videoübertragungen werden nicht abgespielt, wenn der Dienst eine Null-Länge zurückgibt (für solche Videos wird die Dauer in Listen und Galerien als „[dur undef]“ angezeigt).

zum Beispiel: Na, Pogo! Alle Ausgaben von Soyuzmultfilm HD (Cartoons für Kinder), Cartoons des Soyuzmultfilm-Studios., Top-Cartoons von Soyuzmultfilm, Cartoons des Soyuzmultfilm-Studios.

Tipp: Solche Videos in die schwarze Liste hinzufügen.

  • Videos, die nur über direkte Links zugänglich sind, können möglicherweise nicht in die lokale Wiedergabeliste gelangen, selbst wenn Sie alle Benutzer-Videos hochladen.

zum Beispiel: Das Zähmen des Feuers, Folge 1, Filmkonzern „Mosfilm“.

  • Wenn Sie auf ein öffentliches Video stoßen, das kein Login benötigt, im Browser abgespielt wird, aber nicht im Player, senden Sie einen Bug-Report (es ist ziemlich möglich, dass das Problem bereits in einer neuen Version behoben wurde, NewPipeExtractor und es notwendig sein wird, nur die Sammlung mit dieser Version zu aktualisieren, zum Beispiel).

  • Die Benutzeroberfläche kann bei langsamen (aber nicht abgeschalteten) Internetverbindungen ruckeln.

Insgesamt

Der Sohn ist von einem Tablet auf einen Smart-TV von Samsung umgestiegen, der keine Android-Apps starten kann. Daher bleibt die beste Elternkontrolle persönliche Präsenz.

Aber die Anwendung ist ausreichend benutzerfreundlich geworden, sodass ich begann, sie selbst zu nutzen. Der erste Eindruck aus den frühen funktionierenden Versionen — ich bin in eine andere Welt gelangt. Alle Inhalte werden von YouTube geladen, aber es ist nun nicht mehr YouTube, sondern etwas anderes, sicheres und kontrollierbares, als hätte ich eine Skolopender aus dem Auge entfernt und in ein Glasgefäß gesetzt. Und es liegt tatsächlich an den Empfehlungen.

Quelle: habr.com

60GB SSD 8Gb DDR4