Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Sissejuhatus on lühike: tahan rääkida Androidi jaoks mõeldud YouTube'i võrgupleierist koos kohalike esitusloendite, kanalite ja soovitustega.

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Laiendatud tutvustus:
Mõni aeg tagasi puutusin kokku täpselt sama probleemiga kui ühe imelise rakenduse autor Kanalite valge nimekiri, ja määrasin enda jaoks täpselt sama suhtumise sellesse: ma tahan, et saaksin oma lapsele aeg-ajalt kinkida multifilmidega tahvelarvuti või nutitelefoni, kuid ma pole sugugi rahul sellega, kus pärast 2-3 klõpsu loend soovituste standardrakendustes - YouTube'i kliendid - võtab lapse.

Kahjuks avastati pärast Channel Whitelist rakenduse installimist veel üks proosalisem, kuid siiski saatuslik viga - NIH I (ja mis kõige tähtsam, mu poeg) ei leidnud selle liidese jaoks eriti mugavat, eriti pärast YouTube Kidsi pleieri kasutamise harjumust.

Üldiselt olin mõne aja pärast valmis oma teostuse tegema. Mõne aja pärast sai võimalikuks esimesele väljalasele silt panna.

Põhijooned:

  • Lisage oma lemmikkanalid ja esitusloendid – need salvestatakse ja indekseeritakse kohalikku andmebaasi
  • Lisatud esitusloendites lülitage mittevajalikud videod välja, kui te neid ei vaja
  • Soovituste loend luuakse juhuslikult ainult rakendusse lisatud kanalitest ja esitusloenditest

Avatud lähtekoodiga, GPLv3 litsents: https://github.com/sadr0b0t/yashlang/

Allpool on põhifunktsioonide üksikasjalik ülevaade ja mõned tehnilised üksikasjad selle kohta, kuidas esitada YouTube'i videoid oma Androidi rakenduses ilma Google API-d ja veebimähiseid kasutamata.

Põhiekraanil ja pleieri ekraanil: juhuslikud soovitused mittejuhuslikelt kanalitelt

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Kiire otsing kohalikus andmebaasis

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) => Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Lisage uus kanal või esitusloend

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Otsige Internetist nime järgi või sisestage teadaolev aadress. Kanali või esitusloendi videote loend salvestatakse kohalikku andmebaasi, ikoone ei salvestata vahemällu.

Dünaamiline esitusloend – esita otsingutulemusi

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) => Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Videosoovitustes on ainult need videod, mis vastavad otsingupäringule.

Samamoodi, kui avate video esitusloendi seadetes, kuvatakse soovituste loendis ainult sama esitusloendi videod.

Esitusloendeid ja kanaleid saab ajutiselt välja ja uuesti sisse lülitada

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Pange tähele: keelatud esitusloendi videod kaovad ka otsingutulemustest, vaatamisajaloost ja lemmikute loendist. Kuid ärge muretsege, need ilmuvad sinna uuesti kohe pärast esitusloendi uuesti sisselülitamist.

Lisage video musta nimekirja

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Blokeeritud videot ei kuvata soovitustes ega otsingutulemustes ning see kaob lemmikute loendist ja vaatamisajaloost. Video on esitusloendi seadetes endiselt nähtav.

Vaadake musta nimekirja ja lubage uuesti kogemata blokeeritud üksused:
Seaded > päisemenüü > Must nimekiri

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Lemmikvideod ja vaatamisajalugu

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Lemmikvideod pleieri ekraanil on tähistatud tärniga paremas ülanurgas.

Kontekstimenüüd ekraani pealkirjas ja pikad klõpsud galeriides ja loendites

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

Kopeerige vaatamiskuval või mis tahes loendis oleva video või esitusloendi nimi või aadress.

Kiire algus – lisage soovitatud kanaleid ja esitusloendeid

Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?) => Koštšei surm on soovituste loendis (kas YouTube'i on võimalik hubaseks ja turvaliseks muuta?)

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

Mittevajalikud kanalid ja esitusloendid saab seadetes välja lülitada või kustutada.

Paigaldamine

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

Pidage meeles, et samas seadmes erinevatest allikatest pärit erinevate versioonide vahetamine ei toimi apk-faili erinevate signatuuride tõttu; enne uuest allikast versiooni installimist peate esmalt kustutama installitud versiooni koos andmetega - esitusloendi vahemälu ja sirvimisajalugu (või mõelge välja, kuidas andmeid edastada).

Tehnilised detailid

Ei vaja Google'i/YouTube'i kontot, vajate ainult Internetti, kasutab järgmisi teeke:

Avatud lähtekoodiga tasuta GPLv3 litsents.

küsimus: kas veebisaitide kraapimine ilma autorite loata (või selgesõnalise keeluga) on üldiselt seaduslik? Google eemaldab rakendused Google Playst, mis ei kasuta oma API-d, vaid sõeluvad oma saite, sest nad rikuvad oma kasutuslepingut.
vastus: loomulikult on see seaduslik, see on teie enda otsustada, millist tööriista kasutada avalikult kättesaadava teabe lugemiseks. Lisaks: USA kohus on täielikult legaliseerinud veebisaitide kraapimise ja keelanud sellesse tehnilise sekkumise., kuid Gulil võib olla teistsugune arvamus; isiklikult ei ole mul veel soovi Ameerika kohtusse pöörduda, et neid veenda.

Mingi kood

raamatukogu Uus PipeExtractor - mängijate tugiprojekt NewPipe, võimaldab teil alla laadida teatud kanali või esitusloendi videote loendi, alla laadida üksikasjalikku teavet kuulsa video kohta (mis on nähtav video veebilehel), hankida video ikooni aadress ja saada ka video aadress oja.

Esitusloendi laadimise kood on veidi tülikas, nii et ma seda siin ei anna, kel huvi, vaadake lähtekoodi, see on põhimõtteliselt klass ContentLoader.

Vaatame, kuidas saada avaliku videolehe aadressist videovoo aadress ja seda pleieris esitada.

Ühendage raamatukogu
app/build.gradle

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

On uudishimulik, et pärast seda ei saa te seda ikkagi kasutada, sest ... näited kaebavad puuduva Downloaderi klassi üle. Selle saab projekti kopeerida automatiseeritud testide kataloogist NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - töötab versiooni 0.17.4 jaoks (tundub, et see osa tehti uuesti teegi uuemas versioonis, kuid me peame siiski kontrollima).

Hankige videovoo aadress YouTube'i veebisaidi videolehe aadressi järgi:

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

Videoaadress ytVidUrl võib olla näiteks YouTube'i veebisaidi mis tahes video lehe avalik aadress https://www.youtube.com/watch?v=pd2RlatmNRk

Mängija saab olema eksomängija Google’ilt endalt. See ei ole YouTube'i veebiümbris, vaid tõeline manustatud pleier mis tahes videote esitamiseks, üsna paindlik ja kohandatav. See võib esitada ka YouTube'i videovooge, kui esitate sellele õige aadressi. Saime just voo aadressi, nii et vaatame, kuidas see mängijale saata.

Ühendage raamatukogu projektiga app/build.gradle:

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

Me ei võta arvesse kõiki pleieri komponendi rakenduse ekraanile paigutamise nüansse (näiteid saate vaadata projekti veebisaidilt või koodist), vaatame ainult seda, kuidas alustada YouTube'i video esitamist pleieris aadressil ülaltoodud aadress:

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

teadaolevad probleemid

  • Ei esita videoid vanusepiirangutega, mis nõuavad teie Google'i/YouTube'i kontole sisselogimist

näiteks: Ilja Muromets, Mosfilmi kinokontsern, Ruslani ja Ljudmilla film 1, Mosfilmi filmikontsern

nõuanne: lisage sellised videod musta nimekirja või paluge video autoril kogemata seatud piirang eemaldada.

  • Mõnda levivideot, mille teenus tagastab nulli pikkuse, ei esitata (selliste videote puhul on loendites ja galeriis kestuseks märgitud „[dur undef]”)

näiteks: Oota seda! Kõik Soyuzmultfilm HD numbrid (lastele mõeldud multikad), Sojuzmultfilmi stuudio multikad, Parimad multikad Sojuzmultfilm, Multikad Sojuzmultfilmi stuudiost

nõuanne: lisage sellised videod musta nimekirja.

  • Videoid, mis on saadaval ainult otselinkide kaudu, ei pruugita kohalikku esitusloendisse kaasata, isegi kui laadite alla kõik kasutaja videod

näiteks: Tule taltsutamine, 1. osa, Mosfilmi kinokontsern

  • Kui kohtate avalikku videot, mis ei vaja sisselogimist, mängib brauseris, kuid ei mängi pleieris, saatke veateade (täiesti võimalik, et probleem on uues versioonis juba parandatud Uus PipeExtractor ja teil on vaja ainult koostu selle versiooniga värskendada, näiteks).

  • Liides võib aeglustuda, kui Internet on aeglane (kuid mitte välja lülitatud)

Selle tulemusena

Mu poeg kolis tahvelarvutist Samsungi nutitelerisse, mis ei saa käivitada Androidi rakendusi. Seetõttu on parim vanemlik kontroll ikkagi isiklik.

Kuid rakendus osutus piisavalt mugavaks, et saaksin seda ise kasutama hakata. Varastest tööversioonidest jäi esmamulje, et viibin teises maailmas. Kogu sisu laaditakse alla YouTube’ist, aga see pole enam YouTube, vaid midagi muud, turvalist ja kontrollitud, nagu võtaksid sajajalgse silmast välja ja paneksid selle klaaspurki. Ja see kõik sõltub soovitustest.

Allikas: www.habr.com

Lisa kommentaar