Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Úvod stručně: Chci se podělit o online přehrávač YouTube pro Android s lokálními playlisty, kanály a doporučeními.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Úvod rozšířeně:
Nedávno jsem se setkal s přesně takovým problémem jako autor úžasné aplikace Whitelist kanálů, a vyjádřil jsem k němu právě takový vztah: chci mít možnost občas dát dítěti tablet nebo smartphone s pohádkami, ale vůbec mě neuspokojuje, kam dítě dostává seznam doporučení ve standardních aplikacích — klientech YouTube po 2-3 kliknutích.

Bohužel, po instalaci aplikace Whitelist kanálů byl odhalen další, prozaický, ale stále fatální nedostatek — NIH mi (a především synovi) přišel jako nepohodlné rozhraní, zejména po zvyku používat přehrávač YouTube Kids.

Celkově, po nějakém čase jsem dospěl k tomu, abych vytvořil svou implementaci. Po nějakém čase se podařilo postavit tag na první vydání.

Hlavní funkce:

  • Přidávejte oblíbené kanály a playlisty — budou uloženy a indexovány v lokální databázi.
  • Uvnitř přidaných playlistů vypněte nepotřebné videa, pokud je nepotřebujete.
  • Seznam doporučení se generuje náhodně pouze z přidaných kanálů a playlistů v aplikaci.

Zdrojové kódy jsou otevřené, licence GPLv3: https://github.com/sadr0b0t/yashlang/

Dále podrobnější přehled hlavních funkcí, plus trochu technických podrobností o tom, jak přehrávat videa z YouTube ve vaší aplikaci na Androidu bez použití Google API a webových wrapperů.

Na hlavní obrazovce a na obrazovce přehrávače: náhodná doporučení z nepříležitostných kanálů.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Okamžité vyhledávání v lokální databázi.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) => Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Přidat nový kanál nebo playlist.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Hledat podle názvu online nebo vložit známou adresu. Seznam videí kanálu nebo playlistu se ukládá do lokální databáze, ikony nejsou ukládány do cache.

Dynamický playlist — přehrávat výsledky vyhledávání.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) => Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

V doporučeních pod videem budou pouze videa, která splňují vyhledávací dotaz.

Podobným způsobem, pokud otevřete video z nastavení playlistu, v seznamu doporučení budou pouze videa z tohoto stejného playlistu.

Playlisty a kanály lze dočasně vypínat a znovu zapínat.

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Všimněte si, že videa z vypnutého playlistu zmizí také z výsledků vyhledávání, historie zhlédnutí a ze seznamu oblíbených. Ale nebojte se, znovu se tam objeví hned poté, co bude playlist opět zapnut.

Přidat video do černé listiny

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Blokované video se nebude zobrazovat v doporučeních, ve výsledcích vyhledávání, zmizí ze seznamu oblíbených a z historie zhlédnutí. Video stále bude viditelné v nastaveních playlistu.

Prohlédnout černou listinu a znovu aktivovat položky blokované omylem:
Nastavení > menu v záhlaví > Černá listina

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Oblíbená videa a historie zhlédnutí

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Oblíbená videa na obrazovce přehrávače jsou označena hvězdičkou v pravém horním rohu.

Kontextová menu v záhlaví obrazovky a po dlouhém kliknutí v galeriích a seznamech

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Kopírovat název nebo adresu videa či playlistu na obrazovce přehrávání nebo v jakémkoli seznamu.

Rychlý start — přidat doporučené kanály a playlisty

Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?) => Smrt Koštěje v seznamu doporučení (může být YouTube útulné a bezpečné?)

Aplikace se okamžitě začne vypadat tak, jak na screenech výše.

Nežádoucí kanály a playlisty lze vypnout nebo odstranit v nastaveních.

Instalace

Stránka projektu: https://github.com/sadr0b0t/yashlang/
v anglickém jazyce: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
vydání: https://github.com/sadr0b0t/yashlang/releases

Mějte na paměti, že přepínání mezi různými verzemi z různých zdrojů na jednom zařízení nebude možné kvůli různým podpisům souboru apk, před instalací verze z nového zdroje je nutné nejprve odstranit nainstalovanou verzi spolu s daty — keší playlistů a historií zhlédnutí (nebo vymyslet, jak tato data převést).

Technické detaily

Nevyžaduje účet Google/YouTube, potřebujete pouze internet, využívá knihovny:

Otevřený zdroj, svobodná licence GPLv3.

otázka: Je legální parsovat stránky bez povolení (nebo s jasným zákazem) autorů obecně? Google odstraňuje z Google Play aplikace, které nepoužívají jejich API, ale procházejí jejich stránky, protože porušují jejich uživatelskou smlouvu.
odpověď: samozřejmě, je to legální, je na vás, jaký nástroj použijete pro čtení veřejně dostupných informací. Navíc: Soud v USA plně legalizoval scraping stránek a zakázal technické bránění mu, ale Google může mít jiný názor, osobně zatím nemám chuť se odvážit do amerického soudu je přesvědčovat.

Trochu kódu

Knihovna NewPipeExtractor — pomocný projekt přehrávače NewPipe, umožňuje stahovat seznam videí pro zvolený kanál nebo playlist, stahovat podrobné informace o známém videu (to, co je vidět na webové stránce videa), získávat adresu ikony videa, a také získávat adresu streamu videa.

Kód pro stahování playlistu je poněkud nezbedný, takže ho zde nebudu uvádět, kdo má zájem — podívejte se do zdrojáků, většinou je to třída ContentLoader.

Podívejme se, jak získat adresu streamu videa podle adresy veřejné stránky videa a přehrát ho v přehrávači.

Připojte knihovnu v
app/build.gradle

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

Zajímavé je, že i po tomto ji stejně nebude možné použít, protože příklady budou hlásit chybějící třídu Downloader. Tu lze zkopírovat do projektu z katalogu automatických testů NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funguje pro verzi 0.17.4 (vypadá to, že v novější verzi knihovny byla tato část přepracována, ale je třeba to ještě zkontrolovat).

Získejte adresu streamu videa podle adresy stránky videa na 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;
    }

Jako adresu videa ytVidUrl může být veřejná adresa stránky jakéhokoli videa na YouTube, například https://www.youtube.com/watch?v=pd2RlatmNRk

Přehrávač bude ExoPlayer od samotného Google. Nejmenuje se to webový wrapper nad YouTube, ale skutečně se jedná o vestavěný přehrávač pro přehrávání jakýchkoli videí, který je dost flexibilní a přizpůsobitelný. Může také přehrávat video streamy z YouTube, pokud mu poskytnete správnou adresu. Adresu streamu jsme právě získali, a tak se podíváme, jak ji poslat do přehrávače.

Připojit knihovnu do projektu app/build.gradle:

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

Nevěnujeme se všem nuancím umístění komponenty přehrávače na obrazovce aplikace (můžete se podívat na příklady na webu projektu nebo v kódu), podíváme se pouze na to, jak spustit přehrávání videa z YouTube v přehrávači podle výše uvedené adresy:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // zastavit přehrávání aktuálního videa, pokud bylo načteno
        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);

        // Pozastavíme staré video, zatímco připravujeme nové
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Pokud pozastavíme zde po tom, co se přehrávač sám pozastavil, skončiv
            // hrát video, obdržíme zde druhou událost STATE_ENDED, proto potřebujeme zde
            // speciální kontrolu.
            // Přitom hodnota getPlayWhenReady() zůstane true, proto kontrolujeme právě stav.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Připravíme přehrávač s obsahem.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Určíme aktuální pozici hned při načítání videa
        // (v komentářích něco píší o datových zdrojích, které podporují nebo nepodporují
        // přechody seek při načítání, vypadá to, že to je nesmysl - prostě děláme seek hned po načtení)
        // Exoplayer přehrává nové playlisty od začátku místo zadané pozice
        // https://github.com/google/ExoPlayer/issues/4375
        // Jak načíst stream na požadované pozici? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // na tomto místě normální duration ještě není dostupná, proto ji neprocházíme
        //if(seekTo > 0 && seekTo  0) {
            // o 5 sekund dříve
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Známé problémy

  • Nebudou přehrávána videa s věkovým omezením, která vyžadují přihlášení do účtu Google/YouTube

například: Ilya Muromets, Filmový koncert 'Mosfilm', Ruslan a Lyudmila 1. série / Ruslan and Lyudmila film 1, Filmový koncert 'Mosfilm'

rada: přidávat taková videa na černou listinu nebo požádat autora videa, aby zrušil omezení, které bylo nastaveno omylem.

  • Nebudou přehrávána některá videa v přenosu, pro která služba vrací nulovou délku (pro taková videa je délka v seznamech a galerii označena jako '[dur undef]')

například: No Pogoď! Všechny epizody Soyuzmultfilm HD (Kreslené filmy pro děti), Kreslené filmy studia Soyuzmultfilm, Top kreslených filmů Soyuzmultfilm, Kreslené filmy studia Soyuzmultfilm

Tip: add such videos to the blacklist.

  • Videos available only through direct links may not appear in the local playlist, even if you upload all the user's videos.

například: Taming of the Fire Episode 1, Movie Concern 'Mosfilm'

  • If you encounter a public video that does not require a login, plays in the browser but not in the player, please send a bug report (it's quite possible that the issue has already been fixed in a newer version. NewPipeExtractor and you will only need to update to that version, například).

  • The interface may lag with slow (but not off) internet.

Nakonec

My son moved from a tablet to a Samsung smart TV, which cannot run Android applications. Therefore, the best parental control remains personal supervision.

But the app turned out to be convenient enough that I started using it myself. First impressions from the early working versions - I entered another world. All content is loaded from YouTube, but it's no longer YouTube; it's something else, safe and controlled, as if I had removed a centipede from my eye and placed it in a glass jar. And it all comes down to recommendations.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster