Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Lühike sissejuhatus: tahan rääkida Androidi YouTube'i veebimängijast, mis toetab kohalikke esitusloendeid, kanaleid ja soovitusi.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Pikem sissejuhatus:
Mõni aeg tagasi seisin silmitsi sama probleemiga, millega oli kokku puutunud ka selle toreda rakenduse autor Channel Whitelist, ja mul oli sellele sama hoiak: tahan aeg-ajalt anda lapsele tahvelarvuti või nutitelefoni, et ta saaks vaadata jooniseid, kuid mind ei rahulda üldse, kuhu standardrakendustes — YouTube'i klientides — 2-3 klõpsuga last juhatatakse.

Kahjuks, pärast Channel Whitelist rakenduse installimist avastasin, et seal on veel üks igapäevasem, kuid siiski hävitav puudus — NIH tundus mulle (ja, mis peamine, pojale) mitte väga mugav oma kasutajaliides, eriti pärast YouTube Kids mängija kasutamise harjumust.

Kokkuvõttes olin mõne aja pärast valmis oma versiooni looma. Veel hiljem oli võimalik esialgse väljalaske jaoks sildiga tuleb.

Põhifunktsioonid:

  • Lisage oma lemmikkanalid ja esitusloendid — need salvestatakse ja indekseeritakse kohalikku andmebaasi.
  • Lisatud esitusloendites keelake tarbetud videod, kui need pole vajalikud.
  • Soovituste nimekiri genereeritakse juhuslikult ainult rakendusse lisatud kanalitest ja esitusloenditest.

Allikad on avatud, litsents GPLv3: https://github.com/sadr0b0t/yashlang/

Edasi on põhifunktsioonide ülevaade põhjalikumalt, pluss mõned tehnilised detailid selle kohta, kuidas mängida YouTube'i videosid teie Androidi rakenduses ilma Google'i API ja veebikatteta.

Peamesel ekraanil ja mängija ekraanil: juhuslikud soovitused mitte-juhuslikest kanalitest.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kohene otsing kohalikus andmebaasis.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) => Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Lisa uus kanal või esitusloend.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Otsi nime järgi veebis või kleepige tuntud aadress. Kanali või esitlusloendi videod salvestatakse kohalikku andmebaasi, ikoonid ei vahemälustata.

Dünaamiline esitlusloend — mängi otsingu tulemusi.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) => Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Videote soovitustes kuvatakse ainult videod, mis vastavad otsingupäringule.

Sarnasel viisil, kui avada video esitlusloendi seadistustest, kuvatakse soovituste nimekirjas ainult selle sama esitlusloendi videod.

Esitusloendeid ja kanaleid saab ajutiselt keelata ja taas aktiveerida.

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Pange tähele: välja lülitatud mänguplaadi videod kaovad samuti otsitulemustest, vaatamisloost ja lemmikute loendist. Kuid ärge muretsege, need ilmuvad kohe tagasi, kui mänguplaat taas sisse lülitatakse.

Lisa video musta nimekirja

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Blokeeritud video ei näidata soovitustes, otsingutulemustes, see kaob lemmikute loendist ja vaatamisloost. Video jääb siiski nähtavaks mänguplaani seadetes.

Vaata musta nimekirja ja lülita ekslikult blokeeritud elemendid uuesti sisse:
Seaded > menüü ülaosas > Musta nimekirja

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Lemmikvideod ja vaatamisajalugu

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Lemmikvideod mängija ekraanil on tähistatud tärniga paremas ülanurgas.

Kontekstimenüüd ekraani ülaosas ja pika vajutusega galeriides ja loendites

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Kopeeri video või mänguplaadi nimi või aadress vaatamisekraanilt või igast loendist.

Kiire algus — lisa soovitatud kanaleid ja mänguplaate

Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?) => Kossei surm soovituste nimekirjas (kas YouTube'i saab teha mugavaks ja turvaliseks?)

Rakendus näeb kohe välja nagu ülaltoodud ekraanipiltidel.

Ebavajalikke kanaleid ja mänguplaate saab seadetes välja lülitada või kustutada.

Installeerimine

Projekti leht: https://github.com/sadr0b0t/yashlang/
inglise keeles: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
väljaanded: https://github.com/sadr0b0t/yashlang/releases

Pange tähele, et erinevate versioonide vahel vahetamine erinevatelt allikatelt ühel seadmel ei õnnestu, kuna apk-failidel on erinevad allkirjad; enne uue allika versiooni installimist peate eelnevalt olemasoleva versiooni koos andmete — mänguloo ja vaatamise ajalooga — kustutama (või välja mõtlema, kuidas need andmed üle kanda).

Tehnilised üksikasjad

Ei nõua Google/YouTube'i kontot, vajalik on ainult internet, kasutab teeke:

Avaallikas, tasuta GPLv3 litsents.

küsimus: Kas on seaduslik saidid ilma autorite loata (või selge keeldumisega) skramada? Google eemaldab Google Play's rakendused, mis kasutavad nende API-d, vaid sirvivad nende veebisaite, kuna nad rikuvad nende kasutustingimusi.
vastus: muidugi, see on seaduslik, teie asi, millist tööriista kasutada avalike andmete lugemiseks. Veelgi enam: USA kohus on täielikult seadustanud veebilehtede kraapimise ja keelanud selle tehnilised takistused., kuid Google'il võib olla teine arvamus, isiklikult mul ei ole veel soovi minna Ameerika kohtusse neid ümber veenma.

Veidi koodi

Raamatukogu NewPipeExtractor — mängija tugiprojekt NewPipe, võimaldab laadida ülesannete loendi antud kanali või mängu loendi jaoks, alla laadida tuntud video üksikasjad (see, mis on nähtav video veebilehel), saada video ikooni aadress ja samuti saada video voo aadress.

Kood mängu loendi laadimiseks on veidi kohmakas, seega ei tohi ma seda siin tuua, kellel huvi — vaadake lähtekoodi, peamiselt on see klass ContentLoader.

Vaadakem, kuidas saada video voogude aadress avaliku video lehe aadressi kaudu ja mängida seda mängijas.

Ühendage teek failis
app/build.gradle

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

Huvitav on see, et pärast seda ei saa seda ikkagi kasutada, kuna näited kurdavad puuduva klassi Downloader'i üle. Selle saab kopeerida projekti automaatsete testide kataloogist. NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — töötab versiooniga 0.17.4 (tundub, et uuema versiooni raamatukogus on see osa ümber tehtud, kuid seda tuleb veel kontrollida).

Saada video voogesituse aadress video lehe aadressi kaudu veebilehel 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;
    }

Video aadressina võib ytVidUrl olla igasugune avalik aadress igasugusele videole veebilehel YouTube, näiteks https://www.youtube.com/watch?v=pd2RlatmNRk

Mängija on ExoPlayer Google'ilt endalt. See ei ole veebikatted YouTube'ist, vaid tõeline manustatav mängija, mis suudab mängida igasuguseid videoid, olles piisavalt paindlik ja kohandatav. See suudab ka mängida YouTube'i videoid, kui anda talle õige aadress. Aadressi saime just nüüd, seega vaatame, kuidas see mängijasse saata.

Lisa projektile teek app/build.gradle:

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

Keskendume ainult sellele, kuidas käivitada video esitamine YouTube'is mängijas saadud aadressi järgi, mitte ei käsitle kõiki mängijakomponendi ekraanile paigutamise nüansse (saate vaadata projekti saidi näidiseid või koodi).

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // peatama praeguse video esituse, kui see on laaditud
        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);

        // Paneme vana video pausile, kuni valmistame uut
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Kui paned siin pausile pärast seda, kui mängija ise pausile on jäänud, lõpetades
            // video esitamise, saame siin teise sündmuse STATE_ENDED, seega on meil siin
            // eriline kontroll vajalik.
            // Sel juhul jääb getPlayWhenReady() väärtus true, seega kontrollime just seisundit.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Valmistame mängija allika jaoks ette.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Määrame hetke positsiooni kohe video laadimise ajal
        // (kommentaarides öeldakse midagi allika toetamise kohta või mitte toetamise kohta
        // et laagmised, tundub, et see on vale - lihtsalt teeme seek kohe pärast laadimist)
        // Exoplayer mängib uut Playlist'i algusest peale, mitte antud positsioonist
        // https://github.com/google/ExoPlayer/issues/4375
        // Kuidas laadida voog soovitud positsioonil? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // sel hetkel normaalne kestus pole veel saadaval, seega ei kontrolli seda
        //if(seekTo > 0 && seekTo  0) {
            // 5 sekundit varem
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Tuntud probleemid

  • Ei mängi vanusepiiranguga videoid, mis nõuavad Google'i/YouTube'i kontole sisselogimist

näiteks: Ilja Muromets, Filmikompanii «Mosfilm», Ruslan ja Lyudmila 1. osa / Ruslan and Lyudmila film 1, Filmikompanii «Mosfilm»

soovitus: lisage sellised videod musta nimekirja või paluge video autori kanda piirang, mis on ekslikult seadistatud.

  • Ei mängi mõningaid voogedastuse videoid, mille puhul teenus tagastab nullpikkuse (selliste videote kestus nimekirjades ja galeriis on märgitud kui «[dur undef]»)

näiteks: Noh, oota! Kõik osad, Союзмультфильм HD (multikad lastele), Союзмультфильм stuudio multikad, Tippmultikad Союзмультфильм, Союзмультфильм stuudio multikad

soovitus: lisage sellised videod musta nimekirja.

  • Videod, mis on saadaval ainult otse linkide kaudu, ei pruugi sattuda kohalikku mängunimekirja, isegi kui laadite üles kõik kasutaja videod

näiteks: Tuleohjamine 1. osa, Filmikompanii «Mosfilm»

  • Kui leiate avaliku video, mis ei nõua sisselogimist, mängib brauseris, kuid ei mängi mängijas, saatke veateade (on täiesti võimalik, et probleem on juba uues versioonis parandatud) NewPipeExtractor ja peab lihtsalt värskendama ehitust selle versiooniga, näiteks).

  • Liides võib aeglustuda nõrgas (kuid mitte välja lülitatud) internetis

In conclusion,

Poeg kolis tahvelarvuti juurest Samsungi nutiteleri, mis ei suuda Androidi rakendusi käivitada. Seetõttu on parim vanemlik kontroll endiselt isiklik.

Kuid rakendus osutus piisavalt mugavaks, et hakkasin seda isegi kasutama. Varajastest tööversioonidest saadud esmamulje — tundsin end nagu teises maailmas. Kõik sisu laaditakse YouTube'ist, kuid see ei ole enam YouTube, vaid midagi muud, ohutumat ja kontrollitavat, nagu oleksin eemaldanud silmast skolopendri ja pannud selle klaaspurki. Ja asi on tõepoolest soovitustes.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster