Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Die Einführung ist kurz: Ich möchte über den YouTube-Onlineplayer für Android mit lokalen Playlists, Kanälen und Empfehlungen sprechen.

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Erweiterte Einführung:
Vor einiger Zeit stand ich als Autor einer wunderbaren Anwendung vor genau dem gleichen Problem Kanal-Whitelist, und habe für mich genau die gleiche Einstellung dazu festgestellt: Ich möchte meinem Kind ab und zu ein Tablet oder Smartphone mit Cartoons schenken können, bin aber überhaupt nicht zufrieden damit, wo nach 2-3 Klicks die Liste ist von Empfehlungen in Standardanwendungen - YouTube-Clients - nimmt das Kind an.

Leider wurde nach der Installation der Anwendung „Channel Whitelist“ ein weiterer prosaischerer, aber dennoch schwerwiegender Fehler entdeckt: NIH Ich (und vor allem mein Sohn) empfand die Benutzeroberfläche als nicht sehr praktisch, insbesondere nachdem ich mir angewöhnt hatte, den YouTube Kids-Player zu verwenden.

Im Allgemeinen war ich nach einiger Zeit bereit, meine eigene Implementierung vorzunehmen. Nach einiger Zeit wurde es möglich, die erste Veröffentlichung mit einem Tag zu versehen.

Key Features:

  • Fügen Sie Ihre Lieblingskanäle und Playlists hinzu – sie werden in der lokalen Datenbank gespeichert und indiziert
  • Deaktivieren Sie in hinzugefügten Wiedergabelisten unnötige Videos, wenn Sie diese nicht benötigen
  • Die Empfehlungsliste wird zufällig nur aus der Anwendung hinzugefügten Kanälen und Wiedergabelisten generiert

Open Source, GPLv3-Lizenz: https://github.com/sadr0b0t/yashlang/

Nachfolgend finden Sie eine detailliertere Übersicht über die Hauptfunktionen sowie einige technische Details zum Abspielen von YouTube-Videos in Ihrer Android-Anwendung, ohne die Google-API und Web-Wrapper zu verwenden.

Auf dem Hauptbildschirm und auf dem Player-Bildschirm: zufällige Empfehlungen von nicht zufälligen Kanälen

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Sofortige Suche in der lokalen Datenbank

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) => Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Fügen Sie einen neuen Kanal oder eine neue Wiedergabeliste hinzu

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Suchen Sie online nach Namen oder geben Sie eine bekannte Adresse ein. Die Liste der Videos eines Kanals oder einer Playlist wird in der lokalen Datenbank gespeichert; Symbole werden nicht zwischengespeichert.

Dynamische Playlist – Suchergebnisse abspielen

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) => Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

In den Videoempfehlungen werden nur Videos angezeigt, die der Suchanfrage entsprechen.

Wenn Sie ein Video über die Playlist-Einstellungen öffnen, werden ebenfalls nur Videos aus derselben Playlist in der Empfehlungsliste angezeigt.

Playlists und Kanäle können vorübergehend aus- und wieder eingeschaltet werden

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Bitte beachten Sie: Videos aus einer deaktivierten Playlist verschwinden auch aus den Suchergebnissen, dem Anzeigeverlauf und der Favoritenliste. Aber keine Sorge, sie werden dort sofort wieder angezeigt, nachdem die Playlist wieder eingeschaltet wurde.

Fügen Sie der Blacklist ein Video hinzu

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Ein blockiertes Video wird nicht in Empfehlungen und Suchergebnissen angezeigt und verschwindet aus der Favoritenliste und dem Anzeigeverlauf. Das Video ist weiterhin in den Playlist-Einstellungen sichtbar.

Sehen Sie sich die Blacklist an und aktivieren Sie versehentlich blockierte Elemente wieder:
Einstellungen > Kopfmenü > Blacklist

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Lieblingsvideos und Anzeigeverlauf

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Lieblingsvideos auf dem Player-Bildschirm sind mit einem Sternchen in der oberen rechten Ecke gekennzeichnet.

Kontextmenüs im Bildschirmtitel und langes Klicken in Galerien und Listen

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Kopieren Sie den Namen oder die Adresse eines Videos oder einer Wiedergabeliste in den Browserbildschirm oder eine beliebige Liste.

Schnellstart – empfohlene Kanäle und Playlists hinzufügen

Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?) => Der Tod von Koshchei steht auf der Empfehlungsliste (ist es möglich, YouTube gemütlich und sicher zu machen?)

Die Anwendung wird sofort wie in den Screenshots oben aussehen.

Nicht benötigte Sender und Playlists können in den Einstellungen ausgeschaltet oder gelöscht werden.

Einstellung

Weitere Informationen: https://github.com/sadr0b0t/yashlang/
auf Englisch: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
Veröffentlichungen: https://github.com/sadr0b0t/yashlang/releases

Beachten Sie, dass der Wechsel zwischen verschiedenen Versionen aus verschiedenen Quellen auf demselben Gerät aufgrund unterschiedlicher Signaturen der APK-Datei nicht funktioniert. Bevor Sie die Version von einer neuen Quelle installieren, müssen Sie zunächst die installierte Version zusammen mit den Daten löschen. Sehen Sie sich den Playlist-Cache und den Browserverlauf an (oder finden Sie heraus, wie Sie Daten übertragen).

Technische Details

Erfordert kein Google/YouTube-Konto, Sie benötigen nur das Internet, verwendet die folgenden Bibliotheken:

Open Source, kostenlose GPLv3-Lizenz.

Frage: Ist es generell legal, Websites ohne Erlaubnis (oder mit ausdrücklichem Verbot) der Autoren zu scrappen? Google entfernt Apps aus Google Play, die ihre API nicht verwenden, sondern ihre Websites analysieren, weil Sie verstoßen gegen ihre Nutzungsvereinbarung.
Antwort: Natürlich ist es legal, es liegt an Ihnen, welches Tool Sie zum Lesen öffentlich zugänglicher Informationen verwenden. Außerdem: Ein US-Gericht hat Website-Scraping vollständig legalisiert und technische Eingriffe darin verboten., aber Gul ist vielleicht anderer Meinung; ich persönlich habe noch nicht den Wunsch, vor ein amerikanisches Gericht zu gehen, um sie zu überzeugen.

Etwas Code

Bibliothek NewPipeExtractor - Spielerunterstützungsprojekt NewPipeMit dieser Funktion können Sie eine Liste von Videos für einen bestimmten Kanal oder eine bestimmte Wiedergabeliste herunterladen, detaillierte Informationen zu einem berühmten Video herunterladen (was auf der Webseite des Videos sichtbar ist), die Adresse des Videosymbols und auch die Adresse des Videos abrufen Strom.

Der Code zum Laden der Playlist ist etwas umständlich, daher werde ich ihn hier nicht weitergeben. Wer Interesse hat, schaut sich den Quellcode an, im Grunde handelt es sich um eine Klasse ContentLoader.

Sehen wir uns an, wie man die Adresse eines Videostreams aus der Adresse der öffentlichen Videoseite erhält und ihn im Player abspielt.

Verbinden Sie die Bibliothek mit
app / build.gradle

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

Es ist merkwürdig, dass Sie es danach immer noch nicht verwenden können, denn... Beispiele werden sich über die fehlende Downloader-Klasse beschweren. Es kann aus dem Verzeichnis der automatisierten Tests in das Projekt kopiert werden NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - Funktioniert für Version 0.17.4 (anscheinend wurde dieser Teil in einer neueren Version der Bibliothek überarbeitet, aber wir müssen dies noch überprüfen).

Ermitteln Sie die Adresse des Videostreams anhand der Adresse der Videoseite auf der YouTube-Website:

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

Die Videoadresse ytVidUrl kann beispielsweise die öffentliche Adresse der Seite eines beliebigen Videos auf der YouTube-Website sein https://www.youtube.com/watch?v=pd2RlatmNRk

Der Spieler wird es tun ExoPlayer von Google selbst. Dies ist kein Web-Wrapper über YouTube, sondern ein echter eingebetteter Player zum Abspielen beliebiger Videos, recht flexibel und anpassbar. Es kann auch Videostreams von YouTube abspielen, wenn Sie die richtige Adresse angeben. Wir haben gerade die Stream-Adresse erhalten. Sehen wir uns also an, wie wir sie an den Player senden.

Verbinden Sie die Bibliothek mit dem Projekt app / build.gradle:

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

Wir werden nicht alle Nuancen der Platzierung der Player-Komponente auf dem Anwendungsbildschirm berücksichtigen (Sie können sich die Beispiele auf der Projektwebsite oder im Code ansehen), sondern nur untersuchen, wie Sie die Wiedergabe eines Videos von YouTube im Player starten die oben erhaltene Adresse:

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

Bekannte Probleme

  • Videos mit Altersbeschränkungen, die eine Anmeldung bei Ihrem Google-/YouTube-Konto erfordern, werden nicht abgespielt

zB Ilya Muromets, Mosfilm Cinema Concern, Ruslan und Lyudmila Film 1, Mosfilm Film Concern

Tipp: Fügen Sie solche Videos zur Blacklist hinzu oder bitten Sie den Autor des Videos, die versehentlich festgelegte Einschränkung aufzuheben.

  • Einige ausgestrahlte Videos, für die der Dienst eine Länge von Null zurückgibt, werden nicht abgespielt (für solche Videos ist die Dauer in den Listen und in der Galerie mit „[dur undef]“ gekennzeichnet).

zB Na warte! Alle Ausgaben von Sojusmultfilm HD (Zeichentrickfilme für Kinder), Zeichentrickfilme aus dem Sojusmultfilm-Studio, Top-Cartoons Sojusmultfilm, Cartoons aus dem Sojusmultfilm-Studio

Tipp: Fügen Sie solche Videos zur Blacklist hinzu.

  • Videos, die nur über direkte Links verfügbar sind, werden möglicherweise nicht in die lokale Playlist aufgenommen, selbst wenn Sie alle Videos des Benutzers herunterladen

zB Taming of Fire Episode 1, Mosfilm Cinema Concern

  • Wenn Sie auf ein öffentliches Video stoßen, für das keine Anmeldung erforderlich ist, das im Browser, aber nicht im Player abgespielt wird, senden Sie einen Fehlerbericht (es ist gut möglich, dass das Problem bereits in der neuen Version behoben wurde). NewPipeExtractor und Sie müssen die Baugruppe nur mit dieser Version aktualisieren, beispielsweise).

  • Die Schnittstelle kann langsamer werden, wenn das Internet langsam (aber nicht ausgeschaltet) ist.

Infolgedessen

Mein Sohn ist von einem Tablet auf einen Samsung-Smart-TV umgestiegen, auf dem keine Android-Anwendungen ausgeführt werden können. Daher ist die beste elterliche Kontrolle immer noch eine persönliche.

Aber die Anwendung erwies sich als praktisch genug, dass ich sie selbst verwenden konnte. Der erste Eindruck aus den frühen Arbeitsversionen war, dass ich mich in einer anderen Welt befand. Alle Inhalte werden von YouTube heruntergeladen, aber das ist nicht mehr YouTube, sondern etwas anderes, sicheres und kontrolliertes, als hätte man einen Tausendfüßler aus dem Auge genommen und in ein Glas gesteckt. Und es kommt auf die Empfehlungen an.

Source: habr.com

Kommentar hinzufügen