Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Uvod je kratek: želim govoriti o spletnem predvajalniku YouTube za Android z lokalnimi seznami predvajanja, kanali in priporočili.

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Razširjen uvod:
Pred časom sem naletel na popolnoma enako težavo kot avtor čudovite aplikacije Seznam dovoljenih kanalov, in zase določil popolnoma enak odnos do tega: svojemu otroku želim občasno dati tablico ali pametni telefon z risankami, vendar nisem prav nič zadovoljen s tem, kje se po 2-3 klikih prikaže seznam priporočil v standardnih aplikacijah - odjemalcih YouTube - prevzame otroka.

Na žalost je bila po namestitvi aplikacije Channel Whitelist odkrita še ena bolj prozaična, a še vedno usodna napaka - NIH sem (in, kar je najpomembneje, moj sin) ugotovil, da njen vmesnik ni zelo priročen, zlasti po navadi uporabe predvajalnika YouTube Kids.

Na splošno sem bil čez nekaj časa pripravljen na lastno izvedbo. Čez nekaj časa je postalo mogoče postaviti oznako na prvo izdajo.

Ključne značilnosti:

  • Dodajte svoje najljubše kanale in sezname predvajanja – shranjeni bodo in indeksirani v lokalni bazi podatkov
  • Znotraj dodanih seznamov predvajanja izklopite nepotrebne videoposnetke, če jih ne potrebujete
  • Seznam priporočil se ustvari naključno samo iz kanalov in seznamov predvajanja, dodanih aplikaciji

Odprtokodna licenca GPLv3: https://github.com/sadr0b0t/yashlang/

Spodaj je podroben pregled glavnih funkcij in nekaj tehničnih podrobnosti o tem, kako predvajati videoposnetke YouTube v vaši aplikaciji za Android brez uporabe Googlovega API-ja in spletnih ovojev.

Na glavnem zaslonu in na zaslonu predvajalnika: naključna priporočila iz nenaključnih kanalov

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Takojšnje iskanje v lokalni bazi podatkov

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) => Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Dodajte nov kanal ali seznam predvajanja

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Iščite po imenu na spletu ali vstavite znan naslov. Seznam videoposnetkov kanala ali seznama predvajanja se shrani v lokalno bazo podatkov; ikone se ne shranijo v predpomnilnik.

Dinamični seznam predvajanja - predvajajte rezultate iskanja

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) => Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

V priporočilih videoposnetkov bodo samo videoposnetki, ki ustrezajo iskalni poizvedbi.

Podobno, če odprete video iz nastavitev seznama predvajanja, bodo na seznamu priporočil prikazani samo videoposnetki z istega seznama predvajanja.

Sezname predvajanja in kanale lahko začasno izklopite in znova vklopite

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Upoštevajte: videoposnetki z onemogočenega seznama predvajanja bodo prav tako izginili iz rezultatov iskanja, zgodovine ogledov in s seznama priljubljenih. Vendar ne skrbite, tam se bodo spet pojavili takoj, ko bo seznam predvajanja znova vklopljen.

Dodajte video na črni seznam

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Blokiran video ne bo prikazan v priporočilih, v rezultatih iskanja in bo izginil s seznama priljubljenih in iz zgodovine ogledov. Video bo še vedno viden v nastavitvah seznama predvajanja.

Oglejte si črni seznam in znova omogočite pomotoma blokirane elemente:
Nastavitve > glavni meni > Črni seznam

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Priljubljeni videoposnetki in zgodovina ogledov

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Priljubljeni videoposnetki na zaslonu predvajalnika so označeni z zvezdico v zgornjem desnem kotu.

Kontekstni meniji v naslovu zaslona in dolg klik v galerijah in seznamih

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Kopirajte ime ali naslov videoposnetka ali seznama predvajanja na zaslonu za ogled ali na katerem koli seznamu.

Hiter začetek - dodajte priporočene kanale in sezname predvajanja

Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?) => Smrt Koshcheija je na seznamu priporočil (ali je mogoče YouTube narediti prijeten in varen?)

Aplikacija bo takoj videti kot na zgornjih posnetkih zaslona.

Nepotrebne kanale in sezname predvajanja lahko izklopite ali izbrišete v nastavitvah.

Namestitev

Stran projekta: https://github.com/sadr0b0t/yashlang/
v angleščini: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
izdaje: https://github.com/sadr0b0t/yashlang/releases

Ne pozabite, da preklapljanje med različnimi različicami iz različnih virov na isti napravi ne bo delovalo zaradi različnih podpisov apk datoteke; preden namestite različico iz novega vira, boste morali najprej izbrisati nameščeno različico skupaj s podatki - predpomnilnik seznama predvajanja in zgodovino brskanja (ali ugotovite, kako prenesti podatke).

Tehnične podrobnosti

Ne zahteva računa Google/YouTube, potrebujete le internet, uporablja naslednje knjižnice:

Odprtokodna, brezplačna licenca GPLv3.

vprašanje: Ali je na splošno zakonito strgati spletne strani brez dovoljenja (ali z izrecno prepovedjo) avtorjev? Google odstrani aplikacije iz Googla Play, ki ne uporabljajo njihovega API-ja, ampak razčlenjujejo svoja spletna mesta, ker kršijo svojo uporabniško pogodbo.
odgovor: seveda je zakonito, na vas je, s katerim orodjem boste brali javno dostopne informacije. Nadalje: Ameriško sodišče je popolnoma legaliziralo strganje spletnih strani in prepovedalo tehnične posege vanje., ampak Gul ima morda drugačno mnenje, osebno še nimam želje iti na ameriško sodišče, da bi jih prepričal.

Nekaj ​​kode

Knjižnica NewPipeExtractor - projekt podpore igralcem NewPipe, omogoča prenos seznama videoposnetkov za določen kanal ali seznam predvajanja, prenos podrobnih informacij o znanem videoposnetku (kar je vidno na spletni strani videoposnetka), pridobitev naslova ikone videoposnetka in pridobitev tudi naslova videoposnetka tok.

Koda za nalaganje seznama predvajanja je malo okorna, zato je ne bom navajal tukaj, kogar zanima, si oglejte izvorno kodo, v bistvu je razred ContentLoader.

Poglejmo, kako pridobiti naslov videotoka iz naslova javne video strani in ga predvajati v predvajalniku.

Povežite knjižnico z
app/build.gradle

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

Zanimivo je, da ga po tem še vedno ne boste mogli uporabljati, ker ... primeri se bodo pritoževali zaradi manjkajočega razreda Downloader. V projekt ga je mogoče kopirati iz imenika avtomatiziranih testov NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - deluje za različico 0.17.4 (izgleda, da je bil ta del predelan v novejši različici knjižnice, vendar moramo še preveriti).

Pridobite naslov video toka z naslovom video strani na spletnem mestu 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;
    }

Naslov videa ytVidUrl je lahko javni naslov strani katerega koli videoposnetka na spletnem mestu YouTube, npr. https://www.youtube.com/watch?v=pd2RlatmNRk

Igralec bo eksoplayer od samega Googla. To ni spletni ovoj nad YouTubom, ampak pravi vgrajen predvajalnik za predvajanje poljubnih videoposnetkov, precej prilagodljiv in prilagodljiv. Predvaja lahko tudi video tokove iz YouTuba, če mu posredujete pravilen naslov. Pravkar smo prejeli naslov toka, zato poglejmo, kako ga poslati predvajalniku.

Povežite knjižnico s projektom app/build.gradle:

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

Ne bomo upoštevali vseh odtenkov postavitve komponente predvajalnika na zaslon aplikacije (primere si lahko ogledate na spletnem mestu projekta ali v kodi), pogledali bomo le, kako začeti predvajati video iz YouTuba v predvajalniku na zgoraj prejeti naslov:

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

Znane težave

  • Ne bo predvajal videoposnetkov s starostnimi omejitvami, ki zahtevajo prijavo v vaš Google/YouTube račun

na primer: Ilya Muromets, Mosfilm Cinema Concern, Ruslan in Ljudmila film 1, filmski koncern Mosfilm

nasvet: takšne videoposnetke dodajte na črno listo ali prosite avtorja videoposnetka, da odstrani pomotoma nastavljeno omejitev.

  • Nekateri predvajani videoposnetki, za katere storitev vrne ničelno dolžino, se ne bodo predvajali (pri takih videoposnetkih je trajanje na seznamih in v galeriji označeno kot »[dur undef]«)

na primer: Počakaj! Vse številke Soyuzmultfilm HD (risanke za otroke), risanke studia Soyuzmultfilm, Vrhunske risanke Soyuzmultfilm, Risanke iz studia Soyuzmultfilm

nasvet: takšne videe dodajte na črni seznam.

  • Videoposnetki, ki so na voljo samo prek neposrednih povezav, morda ne bodo vključeni v lokalni seznam predvajanja, tudi če prenesete vse videoposnetke uporabnika

na primer: Krotenje ognja Epizoda 1, Mosfilm Cinema Concern

  • Če naletite na javni videoposnetek, ki ne zahteva prijave, se predvaja v brskalniku, vendar se ne predvaja v predvajalniku, pošljite poročilo o napaki (povsem možno je, da je bila težava že odpravljena v novi različici NewPipeExtractor in s to različico boste morali samo posodobiti sklop, na primer).

  • Vmesnik se lahko upočasni, če je internet počasen (vendar ni izklopljen)

Kot rezultat,

Moj sin je s tablice presedlal na Samsung Smart TV, ki ne more poganjati Android aplikacij. Zato je najboljši starševski nadzor še vedno osebni.

A aplikacija se je izkazala za dovolj priročno, da sem jo začel uporabljati tudi sam. Prvi vtis iz zgodnjih delovnih različic je bil, da sem v drugem svetu. Vse vsebine se prenašajo z YouTuba, vendar to ni več YouTube, ampak nekaj drugega, varnega in nadzorovanega, kot da bi stonogo vzeli iz očesa in jo dali v steklen kozarec. In vse se vrti okoli priporočil.

Vir: www.habr.com

Dodaj komentar