ProHoster > Blog > Internetnachrichten > 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 Einführung ist kurz: Ich möchte über den YouTube-Onlineplayer für Android mit lokalen Playlists, Kanälen und Empfehlungen sprechen.
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
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
Sofortige Suche in der lokalen Datenbank
=>
Fügen Sie einen neuen Kanal oder eine neue Wiedergabeliste hinzu
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
=>
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
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
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
Lieblingsvideos und Anzeigeverlauf
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
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
=>
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.
Es ist nicht bei Google Play und wird es auch in naher Zukunft nicht sein (Google verbietet Anwendungen, die die API umgehen und ihre Website analysieren, einschließlich der erwähnten Channel Whitelist oder des NewPipe-Players).
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:
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.
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:
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.
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:
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
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).
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
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.