Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Úvod je krátký: Chci mluvit o online přehrávači YouTube pro Android s místními seznamy skladeb, kanály a doporučeními.

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Rozšířený úvod:
Před časem jsem čelil úplně stejnému problému jako autor úžasné aplikace Seznam povolených kanálů, a určil si k ní úplně stejný postoj: Chci mít možnost dát dítěti čas od času tablet nebo smartphone s kreslenými filmy, ale nejsem vůbec spokojen s tím, kam po 2-3 kliknutích seznam doporučení vede dítě ve standardních aplikacích - klientech YouTube.

Bohužel po instalaci aplikace Channel Whitelist už měla další prozaičtější, ale stále fatální nedostatek - NIH se mi (a hlavně synovi) zdálo nepříliš pohodlné, zvláště po zvyku používat přehrávač YouTube Kids.

Obecně jsem po nějaké době dospěl k vlastní implementaci. Po nějaké době bylo možné umístit značku na první vydání.

Základní možnosti:

  • Přidejte své oblíbené kanály a seznamy skladeb – budou uloženy a indexovány v místní databázi
  • Vypněte další videa v přidaných seznamech videí, pokud je nepotřebujete
  • Seznam doporučení je náhodně generován pouze z kanálů a seznamů skladeb přidaných do aplikace

Zdroje jsou otevřené, licence GPLv3: https://github.com/sadr0b0t/yashlang/

Následuje podrobnější přehled hlavních funkcí a několik technických podrobností o tom, jak přehrávat videa YouTube v aplikaci pro Android bez použití rozhraní Google API a webových obalů.

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

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Okamžité vyhledávání v místní databázi

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) => Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Přidejte nový kanál nebo seznam videí

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Hledejte podle jména online nebo zadejte známou adresu. Seznam videí kanálu nebo playlistu se uloží do místní databáze, ikony se neukládají do mezipaměti.

Dynamický seznam skladeb – přehrávání výsledků vyhledávání

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) => Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

V doporučeních pod videem budou pouze videa, která vyhovují vyhledávacímu dotazu.

Podobně, pokud otevřete video z nastavení seznamu videí, v seznamu doporučení se zobrazí pouze videa ze stejného seznamu videí.

Playlisty a kanály lze dočasně vypnout a znovu zapnout

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Poznámka: videa ze zakázaného seznamu videí zmizí také z výsledků vyhledávání, historie procházení a ze seznamu oblíbených. Ale nebojte se, objeví se tam znovu ihned po opětovném zapnutí playlistu.

Video na černé listině

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Zablokované video se nezobrazí v doporučeních, ve výsledcích vyhledávání, zmizí ze seznamu oblíbených a z historie sledování. Video bude stále viditelné v nastavení seznamu videí.

Zobrazit černou listinu a znovu povolit omylem zablokované položky:
Nastavení > nabídka záhlaví > Černá listina

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Oblíbená videa a historie sledování

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl 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é nabídky v názvu obrazovky a při dlouhém kliknutí v galeriích a seznamech

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Zkopírujte název nebo adresu videa nebo seznamu videí na obrazovce sledování nebo v libovolném seznamu.

Rychlý start – přidejte doporučené kanály a seznamy skladeb

Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?) => Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)

Aplikace bude okamžitě vypadat jako na snímcích výše.

Nepotřebné kanály a seznamy stop lze v nastavení vypnout nebo smazat.

Instalace

Ukázka hry: https://github.com/sadr0b0t/yashlang/
v angličtině: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
vydává: 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 stejném zařízení nebude fungovat kvůli různým signaturám souboru apk, před instalací verze z nového zdroje budete muset nejprve smazat nainstalovanou verzi spolu s daty - mezipaměť seznamu skladeb a historii procházení (nebo zjistit, jak tyto údaje přenášejí).

Technické údaje

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

Open source, bezplatná licence GPLv3.

Otázka: Je škrábání stránek bez svolení (nebo s výslovným zákazem) autorů obecně legální? Google odstraňuje aplikace z Google Play, které nepoužívají jejich API, ale analyzují své stránky, protože. porušují svou uživatelskou smlouvu.
Odpověď: Jistě, legální, je jen na vás, jaký nástroj použijete ke čtení veřejných informací. dále: Americký soud zcela legalizoval scrapování webových stránek a zakázal mu technické překážky, ale Gul může mít jiný názor, osobně nemám chuť je přesvědčovat k americkému soudu.

Nějaký kód

knihovna Nový PipeExtractor - projekt pomocníka hráče NewPipe, umožňuje stáhnout seznam videí pro zadaný kanál nebo seznam videí, stáhnout podrobné informace o slavném videu (co je vidět na webové stránce videa), získat adresu ikony videa a také získat adresu video stream.

Kód pro načítání playlistu je trochu těžkopádný, takže ho sem nebudu uvádět, pro ty, které to zajímá - podívejte se na zdroj, je to v podstatě třída ContentLoader.

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

Připojte knihovnu k
app/build.gradle

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

Je zvláštní, že poté to stále nelze použít, protože. příklady si budou stěžovat na chybějící třídu Downloader. Lze jej zkopírovat do projektu z adresáře automatických testů NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funguje pro verzi 0.17.4 (zdá se, že tato část byla přepracována v novější verzi knihovny, ale stále je třeba ji zkontrolovat).

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

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

Hráč bude explayer od samotného Googlu. Nejedná se o webový obal přes YouTube, ale o skutečný vložitelný přehrávač pro přehrávání jakýchkoli videí, poměrně flexibilní a přizpůsobitelný. Včetně ví, jak přehrávat video streamy z YouTube, pokud pro něj zadáte správnou adresu. Právě jsme obdrželi adresu streamu, takže se podívejme, jak ji odeslat do přehrávače.

Připojte knihovnu k projektu app/build.gradle:

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

Nebudeme zvažovat všechny nuance umístění komponenty přehrávače na obrazovku aplikace (můžete to vidět v příkladech na webu projektu nebo v kódu), podíváme se pouze na to, jak začít přehrávat videa z YouTube v přehrávači na výše získaná adresa:

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

Známé problémy

  • Nepřehraje videa s věkovým omezením, která vyžadují přihlášení k účtu Google/YouTube

např. Ilya Muromets, Mosfilm Cinema Concern, Ruslan a Ludmila 1. série / Ruslan a Ludmila film 1, Mosfilm Cinema Concern

rada: přidejte taková videa na černou listinu nebo požádejte autora videa, aby omylem nastavené omezení odstranil.

  • Některá vysílaná videa, u kterých služba vrací nulovou délku, se nepřehrají (u takových videí je délka v seznamech a galerii označena jako „[dur undef]“).

např. Počkat na to! All Issues Soyuzmultfilm HD (karikatury pro děti), Cartoons of Soyuzmultfilm studio, Nejlepší karikatury Soyuzmultfilm, Cartoons studio Soyuzmultfilm

tip: přidejte taková videa na černou listinu.

  • Videa, která jsou dostupná pouze prostřednictvím přímých odkazů, nemusí být zahrnuta do místního seznamu videí, i když si stáhnete všechna videa uživatele

např. Zkrocení ohně Epizoda 1, Mosfilm Cinema Concern

  • Pokud narazíte na veřejné video, které nevyžaduje přihlášení, přehrává se v prohlížeči, ale nepřehrává se v přehrávači, pošlete hlášení o chybě (je to docela možné, problém je již v nové verzi opraven Nový PipeExtractor a budete muset aktualizovat sestavu pouze touto verzí, například).

  • Rozhraní může zpomalit pomalý (ale nevypnutý) internet

V důsledku toho,

Syn přešel z tabletu na chytrou televizi Samsung, na které neumí spustit aplikace pro Android. Proto je nejlepší rodičovská kontrola stále osobní.

Ale aplikace se ukázala jako dostatečně pohodlná na to, abych ji začal používat sám. První dojem z raných pracovních verzí byl, že jsem se dostal do jiného světa. Veškerý obsah se stahuje z YouTube, ale tohle už není YouTube, ale něco jiného, ​​bezpečného a kontrolovaného, ​​jako byste si z oka vyndali stonožku a vložili ji do skleněné nádoby. A vše je o doporučeních.

Zdroj: www.habr.com

Přidat komentář