Koshcheis Tod in der Liste der Empfehlungen (kannst du YouTube bequemer und sicherer machen?)

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



Die Einführung ist detailliert


Vor einiger Zeit hatte ich genau dasselbe Problem wie der Autor der wundervollen Anwendung " Channel Whitelist" und habe genau die gleiche Einstellung dazu festgestellt: Ich möchte meinem Kind von Zeit zu Zeit ein Tablet oder Smartphone mit Cartoons geben, aber ich bin völlig unglücklich. Wo in 2-3 Klicks das Kind eine Liste von Empfehlungen in Standardanwendungen bekommt - YouTube-Clients.


Leider entdeckte er nach der Installation der Anwendung "Channel Whitelist" bereits einen weiteren prosaischeren, aber immer noch schwerwiegenden Fehler: NIH (und vor allem sein Sohn) fanden die Benutzeroberfläche nicht besonders praktisch, insbesondere nachdem er den YouTube Kids-Player verwendet hatte.


Im Allgemeinen reifte ich nach einiger Zeit, um meine Implementierung zu machen. Nach einiger Zeit wurde es möglich, das Tag auf die erste Version zu setzen.


Hauptmerkmale:


  • Fügen Sie Ihre bevorzugten Kanäle und Wiedergabelisten hinzu - diese werden in der lokalen Datenbank gespeichert und indiziert
  • Deaktivieren Sie zusätzliche Videos in den hinzugefügten Wiedergabelisten, wenn Sie sie nicht benötigen
  • Die Liste der Empfehlungen wird zufällig nur aus Kanälen und Wiedergabelisten generiert, die der Anwendung hinzugefügt wurden.

Quellen sind offen, GPLv3-Lizenz: https://github.com/sadr0b0t/yashlang/


Außerdem erhalten Sie einen detaillierten Überblick über die wichtigsten Funktionen sowie einige technische Details zum Abspielen von YouTube-Videos in Ihrer Android-Anwendung ohne Verwendung von Google-APIs und Webwrappern.


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








Sofortige lokale Datenbanksuche


=>


Neuen Kanal oder neue Wiedergabeliste hinzufügen




Suchen Sie online nach Namen oder geben Sie eine bekannte Adresse ein. Die Liste der Kanal- oder Wiedergabelistenclips wird in der lokalen Datenbank gespeichert, Symbole werden nicht zwischengespeichert.


Dynamische Wiedergabeliste - Suchergebnisse abspielen


=>




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


Wenn Sie ein Video über die Einstellungen der Wiedergabeliste öffnen, werden nur Clips aus derselben Wiedergabeliste in die Liste der Empfehlungen aufgenommen.


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



Hinweis: Videos aus der deaktivierten Wiedergabeliste werden auch aus den Suchergebnissen, dem Browserverlauf und Ihrer Favoritenliste entfernt. Aber keine Sorge, sie werden sofort nach dem Wiedereinschalten der Wiedergabeliste wieder angezeigt.


Schwarze Liste



Ein blockierter Clip wird nicht in den Empfehlungen, in den Suchergebnissen, in Ihrer Favoritenliste und im Browserverlauf angezeigt. Das Video ist in den Einstellungen der Wiedergabeliste weiterhin sichtbar.


Sehen Sie sich die Blacklist an und aktivieren Sie versehentlich gesperrte Elemente erneut:
Einstellungen> Überschriftenmenü> Blacklist



Lieblingsvideos und Uhrengeschichte



Lieblingsvideos auf dem Bildschirm des Players sind mit einem Sternchen in der oberen rechten Ecke gekennzeichnet.


Kontextmenüs im Bildschirmtitel und Langklick in Galerien und Listen



Kopieren Sie den Namen oder die Adresse des Videos oder der Wiedergabeliste in den Anzeigebildschirm oder in eine beliebige Liste.


Schnellstart - Empfohlene Kanäle und Wiedergabelisten hinzufügen


=>


Die Anwendung sieht sofort wie in den obigen Screenshots aus.


Nicht benötigte Kanäle und Wiedergabelisten 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



Denken Sie daran, dass das Wechseln zwischen verschiedenen Versionen von 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 zuerst die installierte Version zusammen mit dem Daten-Playlist-Cache und dem Browserverlauf löschen (oder herausfinden, wie diese funktionieren) Daten übertragen).


Technische Details


Benötigt kein Google / YouTube-Konto, nur das Internet wird benötigt, verwendet Bibliotheken:



Open Source, kostenlose GPLv3-Lizenz.


Frage: Ist es legal, Websites ohne Erlaubnis (oder mit einem ausdrücklichen Verbot) der Autoren zu analysieren? Google entfernt Anwendungen von Google , die ihre APIs nicht verwenden, aber ihre Websites analysieren, weil Sie verstoßen gegen ihre Benutzervereinbarung.
Antwort: Natürlich liegt es rechtlich an Ihnen, mit welchem ​​Tool öffentlich zugängliche Informationen gelesen werden. Außerdem: Das US-Gericht hat das Scraping von Websites vollständig legalisiert und es verboten, technisch behindert zu werden , aber Gul ist möglicherweise anderer Meinung. Ich persönlich habe keine Lust, vor das amerikanische Gericht zu gehen, um sie zu überzeugen.


Ein bisschen Code


Die NewPipeExtractor- Bibliothek ist ein Hilfsprojekt des NewPipe- Players, mit dem Sie eine Liste von Clips für einen bestimmten Kanal oder eine Wiedergabeliste herunterladen, detaillierte Informationen zu einem bekannten Video herunterladen (was auf der Webseite des Videos zu sehen ist), die Adresse des Videosymbols und auch die Adresse des Videostreams erhalten können.


Der Code zum Herunterladen der Wiedergabeliste ist etwas umständlich. Daher werde ich ihn hier keinem Interessierten mitteilen . Schauen Sie sich den Quellcode an, im Grunde handelt es sich um die ContentLoader- Klasse.


Sehen wir uns an, wie Sie die Adresse des Videostreams auf der öffentlichen Seite des Videos abrufen und im Player abspielen können.


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 es danach immer noch nicht verwendet werden kann, weil Beispiele werden auf die fehlende Downloader-Klasse schwören. Es kann aus dem Katalog der automatischen Tests in das Projekt kopiert werden. NewPipeExtractor / extractor / src / test / java / org / schabi / newpipe / Downloader.java - funktioniert für Version 0.17.4 (es scheint, dass in der neueren Version der Bibliothek dieser Teil überarbeitet wurde, aber noch prüfen müssen).


Rufen Sie die Adresse des Videostreams unter der Adresse der Videoseite auf der YouTube-Website ab:


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 von ytVidUrl kann die öffentliche Adresse der Seite eines Videos auf der YouTube-Website sein, z. B. https://www.youtube.com/watch?v=pd2RlatmNRk


Der Player ist ExoPlayer von Google. Dies ist kein Web-Wrapper über YouTube, sondern ein echter eingebetteter Player zum Abspielen von Videos, der sehr flexibel und anpassbar ist. Einschließlich der Möglichkeit, Videostreams von YouTube abzuspielen, wenn Sie die richtige Adresse angeben. Wir haben gerade die Adresse des Streams erhalten und werden sehen, wie er an den Player gesendet wird.


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 des Platzierens der Player-Komponente auf dem Anwendungsbildschirm berücksichtigen (Sie können die Beispiele auf der Projektwebsite oder im Code nachlesen), sondern nur untersuchen, wie das Abspielen von YouTube-Videos im Player unter der oben angegebenen Adresse gestartet wird:


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


  • Spielt keine Videos mit Altersbeschränkungen ab, für die eine Anmeldung bei Ihrem Google / YouTube-Konto erforderlich ist

Zum Beispiel: Ilya Muromets, Mosfilm Film Concern , Ruslan und Lyudmila Filmreihe 1 / Ruslan und Lyudmila Film 1, Mosfilm Film Concern


tipp: füge solche videos der schwarzen liste hinzu oder fordere den autor des videos auf, die versehentlich festgelegte einschränkung zu entfernen.


  • Einige Broadcast-Videos, für die der Dienst die Länge Null zurückgibt, werden nicht wiedergegeben (für solche Videos ist die Dauer in den Listen und in der Galerie als "[dur undef]" markiert).

Zum Beispiel: Warten Sie eine Minute! Alle Ausgaben Soyuzmultfilm HD (Cartoons for Children), Cartoons Soyuzmultfilm Studios , Top Cartoons Soyuzmultfilm, Cartoons Studios Soyuzmultfilm


Tipp: Fügen Sie diese Videos der Blacklist hinzu.


  • Videos, auf die nur über direkte Links zugegriffen werden kann, werden möglicherweise nicht in die lokale Wiedergabeliste aufgenommen, selbst wenn Sie alle Videos des Benutzers herunterladen

Zum Beispiel: Taming of Fire 1-Serie, Mosfilm Film Concern


  • Wenn Sie ein öffentliches Video sehen, für das keine Anmeldung erforderlich ist, das im Browser abgespielt, aber nicht im Player abgespielt wird , senden Sie einen Fehlerbericht (möglicherweise wurde das Problem bereits in der neuen Version von NewPipeExtractor behoben, und Sie müssen beispielsweise nur die Assembly mit dieser Version aktualisieren).


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



Zusammenfassend


Der Sohn wechselte von einem Tablet zu einem Samsung Smart-TV, der nicht weiß, wie man Android-Anwendungen ausführt. Daher ist die beste elterliche Kontrolle immer noch persönlich.


Die Anwendung erwies sich jedoch als praktisch genug, um sie selbst zu verwenden. Der erste Eindruck von den frühen Arbeitsversionen - kam in eine andere Welt. Alle Inhalte werden von YouTube heruntergeladen, aber es ist nicht mehr YouTube, sondern etwas anderes, sicheres und kontrolliertes, als würde ein Scolopendra aus dem Auge genommen und in ein Glas gegeben. Und es steht in den Empfehlungen.

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


All Articles