Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Kort introduktion: Jag vill berÀtta om Youtube-spelaren för Android med lokala spellistor, kanaler och rekommendationer.

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Utvecklad introduktion:
För ett tag sedan stötte jag pÄ precis samma problem som författaren till den fantastiska appen Channel Whitelist, och jag hade samma instÀllning: jag vill kunna ge mitt barn en surfplatta eller smartphone med tecknat dÄ och dÄ, men jag Àr helt och hÄllet missnöjd med vart rekommendationslistan i de standard Youtube-apparna leder barnet efter 2-3 klick.

TyvĂ€rr, efter installationen av Channel Whitelist upptĂ€ckte jag en annan mer prosaisk men Ă€ndĂ„ fatal nackdel – NIH kĂ€ndes (och framför allt min son) inte sĂ„ bekvĂ€m, speciellt efter att ha vant mig vid att anvĂ€nda Youtube Kids-spelaren.

AlltsÄ, efter en tid kÀnde jag mig redo att göra min egen implementation. Lite senare blev det möjligt att sÀtta en tagg pÄ den första utgÄvan.

Key features:

  • LĂ€gg till dina favoritkanaler och spellistor – de kommer att sparas och indexeras i den lokala databasen
  • Inuti de tillagda spellistorna kan du stĂ€nga av onödiga videor om de inte behövs
  • Rekommendationslistan genereras slumpmĂ€ssigt endast frĂ„n de kanaler och spellistor som lagts till i appen

KÀllorna Àr öppna, licensen Àr GPLv3: https://github.com/sadr0b0t/yashlang/

HÀrnÀst en översikt av de viktigaste funktionerna mer i detalj, plus lite tekniska detaljer om hur man spelar video frÄn Youtube i din Android-app utan att anvÀnda Googles API och webbomslag.

PÄ huvudsidan och pÄ spelarsidan: slumpmÀssiga rekommendationer frÄn icke-slumptÀvlade kanaler

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Omedelbar sökning i den lokala databasen

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) => Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

LĂ€gg till ny kanal eller spellista

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Sök efter namn online eller klistra in en kÀnd adress. Videolistan för kanalen eller spellistan sparas i den lokala databasen, ikoner cachas inte.

Dynamisk spellista – spela resultaten frĂ„n din sökning

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) => Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

I rekommendationerna under videon kommer det endast finnas videor som uppfyller sökfrÄgan.

PÄ liknande sÀtt, om du öppnar en video frÄn spellistinstÀllningarna, kommer endast videor frÄn samma spellista att visas i rekommendationerna.

Spellistor och kanaler kan tillfÀlligt stÀngas av och slÄs pÄ igen

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Observera: videor frÄn den avstÀngda spellistan kommer Àven att försvinna frÄn sökresultaten, visningshistoriken och favoriter. Men oroa dig inte, de kommer att dyka upp dÀr igen sÄ fort spellistan slÄs pÄ igen.

LĂ€gg videon i svarta listan

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Den blockerade videon kommer inte att visas i rekommendationerna, sökresultaten, försvinner frÄn favoriter och visningshistoriken. Videon kommer fortfarande att vara synlig i spellistans instÀllningar.

Se över svarta listan och Äteraktivera objekt som blockerats av misstag:
InstÀllningar > meny i rubriken > Svart lista

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Favoritvideor och visningshistorik

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Favoritvideor pÄ spelarskÀrmen markeras med en stjÀrna i det övre högra hörnet.

Kontextmenyer i rubriken pÄ skÀrmen och vid lÄngt tryck i gallerier och listor

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Kopiera namn eller adress för video eller spellista frÄn visningsskÀrmen eller i vilken lista som helst.

Snabbstart – lĂ€gg till rekommenderade kanaler och spellistor

Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?) => Döden av Kosjey i rekommendationslistan (kan man göra Youtube mysigt och sÀkert?)

Appen kommer omedelbart att se ut som pÄ skÀrmbilderna ovan.

Onödiga kanaler och spellistor kan stÀngas av eller tas bort i instÀllningarna.

Installation

Projektets sida: https://github.com/sadr0b0t/yashlang/
pÄ engelska: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
utgÄvor: https://github.com/sadr0b0t/yashlang/releases

Ha i Ă„tanke att det inte gĂ„r att vĂ€xla mellan olika versioner frĂ„n olika kĂ€llor pĂ„ en och samma enhet pĂ„ grund av olika signaturer pĂ„ apk-filen. Innan du installerar en version frĂ„n en ny kĂ€lla mĂ„ste du först ta bort den installerade versionen tillsammans med data – cache för spellistor och visningshistorik (eller komma pĂ„ hur dessa data kan överföras).

Tekniska detaljer

KrÀver inget Google/YouTube-konto, endast internet, anvÀnder bibliotek:

Öppen kĂ€llkod, fri licens GPLv3.

FrĂ„ga: Är det lagligt att skrapa webbplatser utan tillstĂ„nd (eller med uttrycklig förbud) frĂ„n upphovsmĂ€nnen? Google tar bort appar frĂ„n Google Play, som inte anvĂ€nder deras API, utan hĂ€mtar deras webbplatser, eftersom de bryter mot deras anvĂ€ndarvillkor.
svaret: sjÀlvklart, det Àr lagligt, det Àr ditt beslut vilken verktyg du anvÀnder för att lÀsa offentlig information. Mer Àn sÄ: USA:s domstolar har helt legaliserat webbskrapning och förbjudit att tekniskt förhindra det, men Google kan ha en annan Äsikt, personligen har jag för nÀrvarande ingen lust att gÄ till amerikansk domstol för att övertyga dem.

Lite kod

Bibliotek NewPipeExtractor — ett hjĂ€lpprojekt för spelaren NewPipe, lĂ„ter dig ladda ner en lista med videor för en angiven kanal eller spellista, hĂ€mta detaljerad information om en kĂ€nd video (det som syns pĂ„ webbsidan för videon), fĂ„ adressen till videons ikon samt hĂ€mta adressen till videoströmmen.

Koden för att ladda ner spellistan Ă€r lite klumpig, sĂ„ jag kommer inte att ta med den hĂ€r, för den som Ă€r intresserad — kika i kĂ€llorna, det handlar i huvudsak om klassen ContentLoader.

LÄt oss se hur man fÄr adressen till videoströmmen via adressen till videons offentliga sida och spela upp den i spelaren.

Anslut biblioteket i
app/build.gradle

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

Det Ă€r intressant att efter detta kommer det fortfarande inte att gĂ„ att anvĂ€nda, eftersom exemplen kommer att klaga pĂ„ den saknade klassen Downloader. Den kan kopieras till projektet frĂ„n katalogen för automatiska tester NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — fungerar för version 0.17.4 (det verkar som om denna del har Ă€ndrats i en nyare version av biblioteket, men det behöver kontrolleras).

Att fÄ adressen till videoströmmen via adressen till videons sida pÄ 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;
    }

Som adress för videon kan ytVidUrl vara den publika adressen till sidan för vilken som helst video pÄ YouTube, till exempel https://www.youtube.com/watch?v=pd2RlatmNRk

Spelaren kommer att ExoPlayer frÄn Google. Detta Àr inte en webblÀsartillÀgg pÄ YouTube, utan en riktig inbÀddad spelare för att spela upp videoklipp, som Àr tillrÀckligt flexibel och anpassningsbar. Den kan ocksÄ spela videoströmmar frÄn YouTube om rÀtt adress anges. Adressen till strömmen fick vi just nu, sÄ lÄt oss se hur vi skickar den till spelaren.

Anslut biblioteket till projektet app/build.gradle:

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

Vi kommer inte att gÄ igenom alla detaljer kring placeringen av komponenten pÄ appens skÀrm (du kan titta pÄ exemplen pÄ projektets webbplats eller i koden), utan fokuserar bara pÄ hur man startar uppspelning av video frÄn YouTube i spelaren med den adress vi fick ovan:

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

privat void spelaVideoström(final String strömUrl, final long sökTill) {
    if (strömUrl == null) {
        // stoppa uppspelningen av den aktuella videon, om den har laddats
        videoPlayerView.getPlayer().stop(true);
    } else {
        // https://exoplayer.dev/
        // https://github.com/google/ExoPlayer

        final Uri mp4VideoUri = Uri.parse(strömUrl);
        final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
                .createMediaSource(mp4VideoUri);

        // SÀtt den gamla videon pÄ paus medan vi förbereder den nya
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Om vi pausar hÀr efter att spelaren har pausat sig sjÀlv, nÀr den avslutat
            // spela videon, fÄr vi hÀr ett andra hÀndelse STATE_ENDED, sÄ vi behöver hÀr
            // en sÀrskild kontroll.
            // Dessutom kommer vÀrdet för getPlayWhenReady() att förbli true, sÄ vi kontrollerar just tillstÄndet.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Förbered spelaren med kÀllan.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Ange den aktuella positionen omedelbart vid videoladdning
        // (i kommentarerna nÀmns nÄgot om datakÀllor som stöder eller inte stöder
        // sökningar vid laddning, verkar som att det Àr nonsens - vi gör bara sökning direkt efter laddning)
        // Exoplayer spelar nya spellistor frÄn början istÀllet för angiven position
        // https://github.com/google/ExoPlayer/issues/4375
        // Hur man laddar ström i önskad position? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // hÀr Àr den normala lÀngden Ànnu inte tillgÀnglig, sÄ vi kontrollerar den inte
        //if(sökTill > 0 && sökTill  0) {
            // 5 sekunder tidigare
            videoPlayerView.getPlayer().seekTo(sökTill - 5000 > 0 ? sökTill - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

KĂ€nda problem

  • Kommer inte att spela videor med Ă„ldersbegrĂ€nsningar som krĂ€ver inloggning pĂ„ Google/YouTube

till exempel: Ilja Muromets, Filmkoncern "Mosfilm", Ruslan och Ludmila del 1 / Ruslan and Lyudmila film 1, Filmkoncern "Mosfilm"

tips: lÀgg sÄdana videor pÄ svarta listan eller be videoförfattaren att ta bort begrÀnsningen som stÀllts in av misstag.

  • Kommer att spela vissa livevideor dĂ€r tjĂ€nsten returnerar noll lĂ€ngd (för sĂ„dana videor anges lĂ€ngden i listor och galleri som "[dur undef]")

till exempel: NÄvÀl VÀnta! Alla UtgÄvor Soyuzmultfilm HD (Tecknade filmer för barn), Tecknade filmer frÄn Soyuzmultfilm, Topp tecknade filmer frÄn Soyuzmultfilm, Tecknade filmer frÄn Soyuzmultfilm

Tips: Add such videos to the blacklist.

  • Videos that are only available via direct links may not appear in the local playlist, even if you upload all the user's videos.

till exempel: Taming of the Fire Episode 1, Mosfilm

  • If you encounter a public video that doesn't require a login, plays in the browser, but doesn't play in the player, please send a bug report (it’s quite possible that the issue has already been fixed in the new version, NewPipeExtractor and only updating to this version will be necessary. for example).

  • The interface may lag with slow (but not turned off) internet.

I slutÀndan

My son moved from a tablet to a Samsung smart TV, which cannot run Android applications. Therefore, the best parental control is still personal involvement.

But the app turned out to be convenient enough for me to start using it myself. My first impression from the early working versions was that I had entered another world. All content is loaded from YouTube, but it is no longer YouTube; it’s something else, safe and controlled, as if I removed a centipede from my eye and placed it in a glass jar. And it’s all about the recommendations.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster