Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Uvod kratak: želim pričati o online YouTube playeru za Android s lokalnim playlistama, kanalima i preporukama.

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Uvod detaljno:
Prije nekog vremena suočio sam se s istim problemom kao i autor divne aplikacije Channel Whitelist, i odredio sam prema njemu upravo takav stav: želim imati mogućnost s vremena na vrijeme dati djetetu tablet ili pametni telefon s crtićima, ali me potpuno ne zadovoljava kamo kroz 2-3 klika vodi dijete popis preporuka u standardnim aplikacijama - klijentima YouTube.

Nažalost, nakon instalacije aplikacije Channel Whitelist otkriven je drugi, banalniji, ali svejedno fatalni nedostatak - NIH mi (i, što je najvažnije, mom sinu) se nije činila previše praktičnom, osobito nakon navike korištenja YouTube Kids playera.

Uglavnom, nakon nekog vremena postao sam spreman napraviti svoju verziju. Još nakon nekog vremena postalo je moguće staviti oznaku na prvo izdanje.

Glavne mogućnosti:

  • Dodajte omiljene kanale i playliste - bit će sačuvane i indeksirane u lokalnoj bazi
  • Unutar dodanih playlista isključite suvišne videozapise ako vam nisu potrebni
  • Popis preporuka generira se nasumično samo iz kanala i playlista dodanih u aplikaciju

Izvori su otvoreni, licenca GPLv3: https://github.com/sadr0b0t/yashlang/

Dalje pregled osnovnih mogućnosti detaljno, plus malo tehničkih pojedinosti o tome kako reproducirati video na YouTubeu u vašoj aplikaciji na Androidu bez korištenja Google API-ja i web omotača.

Na glavnom ekranu i na ekranu playera: nasumične preporuke iz ne-nasumičnih kanala

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Trenutna pretraga po lokalnoj bazi

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) => Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Dodajte novi kanal ili playlistu

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Pretražujte po imenu online ili umetnite poznatu adresu. Popis videozapisa kanala ili playliste se sprema u lokalnu bazu, ikone se ne keširaju.

Dinamička playlista - reproducirati rezultate pretraživanja

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) => Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

U preporukama ispod videa bit će samo videozapisi koji zadovoljavaju pretraživački upit.

Na sličan način, ako otvorite video iz postavki playliste, u popisu preporuka bit će samo videozapisi iz te iste playliste.

Playliste i kanale možete privremeno isključivati i ponovo uključivati

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Napomena: videozapisi iz isključenog plejlista također će nestati iz rezultata pretraživanja, povijesti gledanja i s popisa omiljenih. No, ne brinite, ponovno će se pojaviti čim se plejlist ponovno uključi.

Staviti videozapis na crnu listu

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Blokirani videozapis neće se prikazivati u preporukama, u rezultatima pretraživanja, nestat će s popisa omiljenih i iz povijesti gledanja. Videozapis će i dalje biti vidljiv u postavkama plejlista.

Pregledajte crnu listu i ponovo uključite stavke blokirane greškom:
Postavke > meni u zaglavlju > Crna lista

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Omiljeni videozapisi i povijest gledanja

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Omiljeni videozapisi na ekranu plejera označeni su zvjezdicom u gornjem desnom kutu.

Kontekstni meniji u zaglavlju ekrana i dugim pritiskom u galerijama i popisima

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Kopirajte ime ili adresu videozapisa ili plejlista na ekranu pregledavanja ili u bilo kojem popisu.

Brzi početak — dodajte preporučene kanale i plejliste

Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) Smrt Koste u preporukama (može li YouTube biti udoban i siguran?) => Smrt Koste u preporukama (može li YouTube biti udoban i siguran?)

Aplikacija će odmah izgledati kao na prethodnim snimcima zaslona.

Neželjene kanale i plejliste možete isključiti ili ukloniti u postavkama.

Instalacija

Stranica projekta: https://github.com/sadr0b0t/yashlang/
na engleskom jeziku: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
izdanje: https://github.com/sadr0b0t/yashlang/releases

Imajte na umu da prebacivanje između različitih verzija iz različitih izvora na jednom uređaju neće biti moguće zbog različitih potpisa apk datoteka, prije nego što instalirate verziju iz novog izvora, prvo ćete morati deinstalirati instaliranu verziju zajedno s podacima — predmemorijom plejlista i poviješću gledanja (ili smisliti kako te podatke prenijeti).

Tehnički detalji

Ne zahtijeva Google/Youtube račun, potrebna je samo internetska veza, koristi biblioteke:

Otvoreni izvor, slobodna licenca GPLv3.

pitanje: Je li legalno parsirati stranice bez dopuštenja (ili s izričitim zabranama) autora? Google uklanja aplikacije iz Google Playa, koji ne koriste njihovu API, već parsiraju njihove web stranice, jer krše njihovu korisničku suglasnost.
Odgovor: naravno, to je legalno, vaša je stvar koji alat koristiti za čitanje javno dostupnih informacija. Štoviše: Američki sud potpuno je legalizirao skrining web stranica i zabranio im tehničke smetnje, ali Gool može imati drugačije mišljenje, osobno nemam želju ići u američki sud i uvjeravati ih.

Malo koda

Biblioteka NewPipeExtractor — pomoćni projekt playera NewPipe, omogućava preuzimanje popisa video zapisa za određeni kanal ili playlistu, preuzimanje detaljnih informacija o poznatom videu (ono što je vidljivo na web stranici video zapisa), dobivanje adrese ikone video zapisa, kao i dobivanje adrese video streama.

Kod za preuzimanje playliste malo je neuredan, pa ga ovdje neću navoditi, tko je zainteresiran — neka pogleda u izvorne kodove, uglavnom je to klasa ContentLoader.

Pogledajmo kako dobiti adresu video streama po adresi javne stranice videa i reproducirati ga u playeru.

Uključite biblioteku u
app/build.gradle

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

Zanimljivo je da je nakon toga još uvijek nećete moći koristiti, jer će primjeri prijavljivati nedostajući razred Downloader. Može se kopirati u projekt iz direktorija automatskog testiranja NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — radi za verziju 0.17.4 (izgleda da je u novijoj verziji biblioteke taj dio prepravljen, ali to još treba provjeriti).

Dobiti adresu video streama po adresi stranice videa na YouTubeu:

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

Kao adresu videa, ytVidUrl može biti javna adresa stranice bilo kojeg videa na YouTubeu, na primjer https://www.youtube.com/watch?v=pd2RlatmNRk

Player će biti ExoPlayer najnovije od Googlea. To nije web-wrapper za YouTube, već pravi uimateljski plejer za reprodukciju bilo kojeg videa, dovoljno fleksibilan i prilagodljiv. Također može reproducirati video streamove s YouTubea, ako mu date ispravnu adresu. Adresu strema smo upravo dobili, pa ćemo vidjeti kako je poslati u plejer.

Priključite biblioteku u projekt app/build.gradle:

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

Nećemo se zadržavati na svim nijansama postavljanja komponente plejera na ekran aplikacije (možete to pogledati u primjerima na web stranici projekta ili u kodu), već ćemo se fokusirati na to kako pokrenuti reprodukciju videa s YouTubea u plejeru koristeći adresu koju smo dobili gore:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // zaustaviti reprodukciju trenutnog videa, ako je učitan
        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);

        // Pauziramo staru video dok pripremamo novu
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Ako stavimo na pauzu ovdje nakon što je player automatski stao na pauzu, završivši
            // reprodukciju videa, dobit ćemo ovdje drugi događaj STATE_ENDED, stoga nam je potrebna
            // posebna provjera.
            // Prilikom toga, vrijednost getPlayWhenReady() ostaje true, stoga provjeravamo upravo stanje.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Pripremite player s izvorom.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Postavimo trenutnu poziciju odmah prilikom učitavanja videa
        // (u komentarima se spominju datasources koje podržavaju ili ne podržavaju
        // prelazak seek prilikom učitavanja, izgleda da je to besmislica - jednostavno radimo seek odmah nakon učitavanja)
        // Exoplayer reproducira novu Playlistu s početka umjesto s pružene pozicije
        // https://github.com/google/ExoPlayer/issues/4375
        // Kako učitati stream u željenoj poziciji? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // ovdje normalna dužina još nije dostupna, tako da je ne provjeravamo
        //if(seekTo > 0 && seekTo  0) {
            // 5 sekundi ranije
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Poznati problemi

  • Neće reproducirati video s dobnom granicom, koji zahtijevaju prijavu na Google/Youtube račun.

na primjer: Ilja Muromec, Filmska kompanija „Mosfilm“, Ruslan i Ljudmila 1. epizoda / Ruslan and Lyudmila film 1, Filmska kompanija „Mosfilm“

savjet: dodavati takve videe na crnu listu ili zatražiti od autora videa da ukloni pogrešno postavljenu granicu.

  • Neće reproducirati neke video prijenose za koje usluga vraća nultu dužinu (za takve video dužinu u popisima i galeriji označena je kao „[dur undef]“)

na primjer: Pa, čekaj! Svi epizode Soyuzmultfilm HD (Crtići za djecu), Crtići studija Soyuzmultfilm, Top crtića Soyuzmultfilm, Crtići studija Soyuzmultfilm

savjet: dodavanje takvih videozapisa na crnu listu.

  • Videozapisi dostupni samo putem izravnih linkova možda neće biti uključeni u lokalnu playlistu, čak i ako preuzimate sve videozapise korisnika.

na primjer: Ukroćenje vatre 1. epizoda, Filmski konzorcij «Mosfilm»

  • Ako naiđete na javni video koji ne zahtijeva prijavu, igra se u pregledniku, ali ne u playeru, pošaljite prijavu pogreške (moguće je da je problem već ispravljen u novoj verziji, NewPipeExtractor i da će biti potrebno samo ažurirati verziju s tom verzijom, na primjer).

  • Sučelje može usporiti pri sporoj (ali ne isključenoj) internetu.

U konačnici

Sin se preselio s tableta na Samsung pametni TV, koji ne podržava pokretanje Android aplikacija. Stoga je najbolja roditeljska kontrola – ipak osobna.

Ali aplikacija ispalo dovoljno praktična da je počnem koristiti i sam. Prvi dojam iz ranih funkcionalnih verzija – kao da sam ušao u drugi svijet. Sav sadržaj se učitava s YouTubea, ali to više nije YouTube, već nešto drugo, sigurno i kontrolirano, kao da ste iz oka izvadili skakavca i stavili ga u staklenku. I to je stvarno u preporukama.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster