Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Hyrja shkurt: dua të flas për lojtarin online YouTube për Android me lista lojarish lokale, kanale dhe rekomandime.

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Hyrja e zgjeruar:
Pak kohë më parë, u përballa me të njëjtin problem si autori i aplikacionit të mrekullueshëm Channel Whitelist, dhe e definova për veten time një qëndrim të ngjashëm: dua të kem mundësinë t'i jap fëmijës një tablet apo smartphone për të parë karikatura, por nuk jam aspak i kënaqur me atë ku e çon lista e rekomandimeve në aplikacionet standarde të YouTube pas 2-3 klikimesh.

Fatkeqësisht, pas instalimit të aplikacionit Channel Whitelist, u zbulua një tjetër, më prozatik, por përsëri fatal, disavantazh - NIH më duket (dhe, më e rëndësishmja, djalit tim) një ndërfaqe jo shumë e përshtatshme, sidomos pas zakonit për të përdorur lojtarin YouTube Kids.

Në përgjithësi, pas disa kohësh, u bëra gati të krijoja implementimin tim. Pas ca kohësh, u bë e mundur të vendosja etiketën në lëshimin e parë.

Funksionalitetet kryesore:

  • Shtoni kanalet dhe listat lojarish tĂ« preferuara - ato do tĂ« ruhen dhe indeksohen nĂ« bazĂ«n e dhĂ«nash lokale
  • Brenda listave tĂ« shtuar, çaktivizoni video tĂ« tepĂ«rta nĂ«se nuk i nevojiteni
  • Lista e rekomandimeve gjenerohet rastĂ«sisht vetĂ«m nga kanalĂ«t dhe listat e shtuar nĂ« aplikacion

Burimet janë të hapura, licenca GPLv3: https://github.com/sadr0b0t/yashlang/

Më pas, një përmbledhje më e detajuar e funksioneve kryesore, plus disa detaje teknike rreth mënyrës se si të luani video nga YouTube në aplikacionin tuaj për Android pa përdorur API-në e Google dhe mbështjelljet në web.

Në ekranin kryesor dhe në ekranin e lojtarit: rekomandime rastësore nga kanale jo-rastësore

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Kërkesa e menjëhershme në bazën e dhënash lokale

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) => Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Shto një kanal të ri ose listë lojarish

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Kërkoni me emër online ose ngjitni një adresë të njohur. Lista e videove të kanalit ose listës lojarish ruhet në bazën e dhënash lokale, ikonat nuk ruhen në cache.

Lista dinamike - luani rezultatet e kërkimit

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) => Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Në rekomandimet nën video do të jenë vetëm video që i përmbushin kërkesat e kërkimit.

Në mënyrë të ngjashme, nëse hapni një video nga cilësimet e listës lojarish, në listën e rekomandimeve do të ketë vetëm video nga kjo listë lojarish.

Listat lojarish dhe kanalet mund të deaktivizohen përkohësisht dhe të rinstalohen

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Kujdes: video nga lista e deaktivizuar do të zhduken gjithashtu nga rezultatet e kërkimit, historia e shikimeve dhe lista e preferuar. Por mos u shqetësoni, ato do të shfaqen përsëri menjëherë pas rinisjes së listës lojarish.

Shtoni një video në listën e zezë

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Video e bllokuar nuk do të shfaqet në rekomandime, në rezultatet e kërkimit, do të zhduket nga lista e preferuar dhe nga historia e shikimeve. Videoja ende do të jetë e dukshme në cilësimet e listës lojarish.

Shikoni listën e zezë dhe rindezni elementet e bllokuara gabimisht:
Cilësimet > menyja në krye > Lista e zezë

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Videot e preferuara dhe historia e shikimeve

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Videot e preferuara në ekranin e lojtarit shënohen me një yll në këndin e sipërm të djathtë.

Menytë kontekstuale në krye të ekranit dhe me një klikim të gjatë në galeritë dhe listat

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Kopjoni emrin ose adresën e videos ose listës së luajtjes në ekranin e shikimit ose në çdo listë.

Fillim i shpejtĂ« — shtoni kanalet dhe listat e rekomanduara

Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?) => Vdekja e Koshtehit në listën e rekomandimeve (a mund të bëhet YouTube i ngrohtë dhe i sigurt?)

Aplikacioni menjëherë do të duket si në pamjet e mësipërme.

Kanalet dhe listat e padëshiruara mund të fikën ose fshihen në cilësime.

Instalimi

Faqja e projektit: https://github.com/sadr0b0t/yashlang/
në gjuhën angleze: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
daljet: https://github.com/sadr0b0t/yashlang/releases

Kujdes: nuk do tĂ« mund tĂ« kaloni ndĂ«rmjet versione tĂ« ndryshme nga burime tĂ« ndryshme nĂ« njĂ« pajisje tĂ« vetme pĂ«r shkak tĂ« nĂ«nshkrimeve tĂ« ndryshme tĂ« skedarit apk, para se tĂ« instaloni njĂ« version nga njĂ« burim tĂ« ri, duhet tĂ« fshini versionin e instaluar sĂ« pari, bashkĂ« me tĂ« dhĂ«nat — cache tĂ« listave tĂ« luajtjes dhe historinĂ« e shikimeve (ose tĂ« mendojeni se si tĂ« transferoni kĂ«to tĂ« dhĂ«na).

Detaje teknike

Nuk kërkon llogari Google/YouTube, vetëm internet, përdor bibliotekat:

Kodi burimor i hapur, licencë e lirë GPLv3.

pyetje: A është e ligjshme të përshkruash faqet pa leje (ose me ndalim të qartë) nga autorët? Google fshin nga Google Play aplikacionet, që nuk përdorin API-në e tyre, por përshpejtojnë faqet e tyre, sepse shkelin marrëveshjen e përdorimit.
përgjigje: natyrisht, është e ligjshme, është puna juaj se cilin mjet të përdorni për të lexuar informacione të hapura. Më shumë se kaq: Gjyqet e SHBA-ve e kanë legalizuar plotësisht skrapimin e faqeve të internetit dhe e kanë ndaluar atë teknikisht., por Gula mund të ketë një mendim tjetër, personalisht nuk kam dëshirë të shkoj në gjykatën amerikane për ta bindur atë.

Disa kod

Biblioteka NewPipeExtractor — njĂ« projekt ndihmĂ«s i lojtarit NewPipe, lejon shkarkimin e listĂ«s sĂ« videove pĂ«r njĂ« kanal ose playlist tĂ« caktuar, tĂ« shkarkojĂ« informacion tĂ« detajuar pĂ«r njĂ« video tĂ« njohur (ato qĂ« duken nĂ« faqen e internetit tĂ« videos), tĂ« marrĂ« adresĂ«n e ikonĂ«s sĂ« videos, si dhe tĂ« marrĂ« adresĂ«n e rrjedhĂ«s sĂ« videos.

Kodi pĂ«r shkarkimin e playlist-it Ă«shtĂ« pak i komplikuar, prandaj nuk do ta sjell kĂ«tu, atyre qĂ« janĂ« tĂ« interesuar — hidhni njĂ« sy nĂ« burimet, kryesisht Ă«shtĂ« klasa ContentLoader.

Le të shohim si të marrim adresën e rrjedhës së videos nga adresa publike e faqes së videos dhe si ta luajmë atë në lojtar.

Për të lidhur bibliotekën në
app/build.gradle

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

ËshtĂ« interesant qĂ« pasi kjo, ajo nuk do tĂ« funksionojĂ« akoma, sepse shembujt do tĂ« ankojnĂ« pĂ«r klasĂ«n e munguar Downloader. Ajo mund tĂ« kopjohet nĂ« projekt nga katalogu i testeve automatike NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funksionon pĂ«r versionin 0.17.4 (duket se nĂ« njĂ« version mĂ« tĂ« ri tĂ« bibliotekĂ«s kjo pjesĂ« Ă«shtĂ« rregulluar, por duhet ta verifikohet akoma).

Merrni adresën e rrjedhës së videos nga faqja e videos në 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;
    }

Si adresë video ytVidUrl mund të jetë adresa publike e faqes së çdo videoje në YouTube, për shembull https://www.youtube.com/watch?v=pd2RlatmNRk

Lojtari do të ExoPlayer nga Google vetë. Kjo nuk është një mbulese web mbi YouTube, por një lojtar i vërtetë për të luajtur çdo video, mjafton të ketë adresën e duhur për rrjedhën e videos. Adresa e rrjedhës që sapo e morëm, prandaj le të shohim si ta dërgojmë atë në lojtar.

Për të lidhur bibliotekën në projekt app/build.gradle:

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

Nuk do të shqyrtojmë të gjitha nuancat e vendosjes së komponentit të lojtarit në ekranin e aplikacionit (mund të shihni në shembujt në faqen e projektit ose në kod), do të shohim vetëm se si të fillojmë Luaj videon nga YouTube me adresën që morëm më lart:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // ndaloi luajtjen e videos aktuale, nëse ishte shkarkuar
        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);

        // Do ta pauzojmë videon e vjetër, derisa të përgatisim të re;
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Nëse e vendosim në pauzë këtu, pasi lojtarit të ndalojë vetë, përfundimin e videos, do të kemi një ngjarje të dytë STATE_ENDED këtu, kështu që na nevojitet një kontroll i veçantë.
            // Në të njëjtën kohë, vlera e getPlayWhenReady() do të mbetet true, prandaj kontrollojmë saktësisht gjendjen.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Përgatit lojtarin me burimin.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // U tregojmë pozitat aktuale menjëherë teksa shkarkojmë videon
        // (në komente flasin diçka për burimat që mbështesin ose nuk mbështesin
        // kalimet e kërkesës dhe duket se kjo është një gjë - thjesht bëjmë kërkesën menjëherë pas shkarkimit)
        // Exoplayer luan playlist të re nga fillimi për vendin që u dha
        // https://github.com/google/ExoPlayer/issues/4375
        // Si të ngarkohet rrjedha në pozitën e dëshiruar? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // në këtë moment, normalisht, koha e duhur nuk është akoma e disponueshme, prandaj nuk e kontrollojmë
        //if(seekTo > 0 && seekTo  0) {
            // 5 sekonda më herët
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Problemet e njohura

  • Nuk do tĂ« luajĂ« video me kufizime moshe, qĂ« kĂ«rkojnĂ« hyrje nĂ« llogarinĂ« Google/YouTube

për shembull: Ilia Muromets, Kinematografia "Mosfilm", Ruslan dhe Lyudmila pjesa 1 / Ruslan and Lyudmila film 1, Kinematografia "Mosfilm"

këshillë: shtoni këto video në listën e zezë ose kërkoni nga autori i videos të heqë kufizimin e vendosur gabimisht.

  • Nuk do tĂ« luajĂ« disa video-transmetime pĂ«r tĂ« cilat shĂ«rbimi kthen gjatĂ«si zero (pĂ«r kĂ«to video, gjatĂ«si e listave dhe galerisĂ« shĂ«nohet si «[dur undef]»)

për shembull: Përgatitu! Të gjitha Episodet e Soyuzmultfilm HD (Kartoon të fëmijëve), Kartoonet e studios Soyuzmultfilm, Top kartoonet Soyuzmultfilm, Kartoonet e studios Soyuzmultfilm

këshillë: shtoni këto video në listën e zezë.

  • Videot qĂ« janĂ« tĂ« aksesueshme vetĂ«m me lidhje tĂ« drejtpĂ«rdrejta mund tĂ« mos futen nĂ« listĂ«n lokale tĂ« luajtjes, edhe nĂ«se po ngarkoni tĂ« gjitha videot e pĂ«rdoruesit.

për shembull: Sfidimi i flakës 1 episod, Kinematografia «Mosfilm»

  • NĂ«se hasni njĂ« video publike qĂ« nuk kĂ«rkon identifikim, luan nĂ« shfletues, por nuk luan nĂ« lojtar, dĂ«rgoni njĂ« raport pĂ«r gabime (Ă«shtĂ« e mundur qĂ« problemi Ă«shtĂ« ndrequr tashmĂ« nĂ« versionin e ri, NewPipeExtractor dhe vetĂ«m duhet tĂ« pĂ«rditĂ«soni ndĂ«rtimin me kĂ«tĂ« version, pĂ«r shembull).

  • Interfeisi mund tĂ« ngadalĂ«sohet nĂ« internet tĂ« ngadaltĂ« (por jo tĂ« fikur).

Si rezultat

Djali kaloi nga tableti në smart-tv Samsung, i cili nuk di të ekzekutojë aplikacione Android. Prandaj, kontrolli më i mirë i prindit është gjithmonë personal.

Por aplikacioni doli mjaft i përshtatshëm për sa kam filluar ta përdor edhe vetë. Një përshtypje e parë nga versionet e hershme të funksionimit - si të hysh në një botë tjetër. Të gjithë përmbajtja përmblidhet nga YouTube, por nuk është më YouTube, por diçka tjetër, e sigurt dhe e kontrolluar, si të kishte hequr një skëterë nga syri dhe ta kishe vendosur në një shishe prej xhami. Dhe problemi qëndron pikërisht në rekomandime.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster