Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kort introduktion: Jeg vil fortĂŚlle om YouTube-online-afspilleren til Android med lokale playlister, kanaler og anbefalinger.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Udførlig introduktion:
For et stykke tid siden stødte jeg pü nøjagtig det samme problem som forfatteren til den fremragende applikation. Channel Whitelist, og jeg har prÌcis den samme holdning til det: jeg vil have muligheden for at give mit barn en tablet eller smartphone med tegnefilm, men jeg kan simpelthen ikke acceptere, hvor hurtigt barnet ledes hen af anbefalingslisten i de standard YouTube-klienter med bare 2-3 klik.

Desværre, efter installationen af Channel Whitelist, blev der allerede opdaget en anden mere prosaisk, men stadig fatalt problem — NIH virkede (og vigtigst af alt, for min søn) ikke særlig praktisk i sit interface, især efter at have været vant til YouTube Kids-afspilleren.

Generelt set, efter et stykke tid gik jeg i gang med at lave min egen implementering. Endnu senere blev det muligt at sÌtte tag pü den første udgivelse.

Hovedfunktioner:

  • Tilføj dine yndlingskanaler og playlister — de vil blive gemt og indekseret i den lokale database.
  • Inden for de tilføjede playlister kan du deaktivere unødvendige videoer, hvis du ikke har brug for dem.
  • Anbefalingslisten genereres tilfĂŚldigt kun fra de kanaler og playlister, der er tilføjet til appen.

Kildekoderne er ĂĽbne, licens GPLv3: https://github.com/sadr0b0t/yashlang/

Her er en mere detaljeret oversigt over de vigtigste funktioner, plus lidt tekniske detaljer om, hvordan man spiller videoer fra YouTube i din Android-app uden at bruge Googles API og web-wraps.

PĂĽ hovedskĂŚrmen og pĂĽ afspillerens skĂŚrm: tilfĂŚldige anbefalinger fra ikke-tilfĂŚldige kanaler.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Øjeblikkelig søgning i den lokale database.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) => Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Tilføj en ny kanal eller playliste.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Søg efter navn online eller indsÌt en kendt adresse. Liste over videoer fra kanalen eller playlisten gemmes i den lokale database, ikoner cachelagres ikke.

Dynamisk playliste — afspil søgeresultater.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) => Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

I anbefalingerne under videoen vil der kun vÌre videoer, der opfylder søgeforespørgslen.

Tilsvarende, hvis du ĂĽbner en video fra playlistens indstillinger, vil anbefalingslisten kun vise videoer fra den samme playliste.

Playlister og kanaler kan midlertidigt deaktiveres og genaktiveres.

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

BemÌrk: videoer fra en deaktiveret afspilningsliste forsvinder ogsü fra søgeresultater, visningshistorik og favoritter. Men frygt ikke, de vil igen dukke op der straks efter, at afspilningslisten er tÌndt igen.

SĂŚt video pĂĽ sortliste

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

En blokeret video vil ikke blive vist i anbefalinger, i søgeresultater, forsvinde fra favoritter og fra visningshistorik. Videoen vil stadig vÌre synlig i indstillingerne for afspilningslisten.

Se sortlisten og genaktiver elementer, der blev blokeret ved en fejl:
Indstillinger > Menu i hovedvinduet > Sortliste

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Favoritvideoer og visningshistorik

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Favoritvideoer pü afspillerens skÌrm er markeret med en stjerne i øverste højre hjørne.

Kontekstmenuer i hovedvinduet og ved lang tryk i gallerier og lister

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Kopier navnet eller adressen til videoen eller afspilningslisten fra visningsvinduet eller fra enhver liste.

Hurtig start - tilføj anbefalede kanaler og afspilningslister

Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?) => Kosses død pü anbefalingslisten (kan man gøre YouTube hyggelig og sikker?)

Appen vil straks se sĂĽdan ud, som pĂĽ skĂŚrmbillederne ovenfor.

Uønskede kanaler og afspilningslister kan slukkes eller fjernes i indstillingerne.

Installation

Projektets side: https://github.com/sadr0b0t/yashlang/
pĂĽ engelsk: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
udgivelser: https://github.com/sadr0b0t/yashlang/releases

VÌr opmÌrksom pü, at det ikke er muligt at skifte mellem forskellige versioner fra forskellige kilder pü Ên enhed pü grund af forskellige apk-filer, før du installerer en version fra en ny kilde, skal den installerede version først fjernes sammen med dataene - cache afspilningslister og visningshistorik (eller finde ud af, hvordan man kan overføre disse data).

Tekniske detaljer

Krav til Google/Youtube-konto er ikke nødvendige, kun internet, bruger biblioteker:

Åben kildekode, fri GPLv3-licens.

spørgsmül: Er det overhovedet lovligt at scrape websteder uden tilladelse (eller med tydelig forbud) fra forfatterne? Google fjerner apps fra Google Play, der ikke bruger deres API, men parser deres websteder, da de overtrÌder deres brugervenlighedsaftale.
Svar: Selvfølgelig er det lovligt, det er op til dig, hvilket vÌrktøj du vil bruge til at lÌse offentligt tilgÌngelig information. Desuden: Den amerikanske domstol har helt legaliseret web scraping og forbudt tekniske forhindringer imod det., men Google kan have en anden mening, personligt har jeg ikke lyst til at tage til en amerikansk domstol for at overbevise dem.

Lidt kode

Bibliotek NewPipeExtractor — et hjælpeprojekt til medieafspilleren NewPipe, giver mulighed for at hente en liste over videoer til en angiven kanal eller playliste, hente detaljerede oplysninger om et kendt video (det der ses på websidens video), få adressen på videoikonet samt få adressen til videostrømmen.

Koden til at downloade en playliste er lidt omfangsrig, sĂĽ jeg vil ikke inkludere den her, dem, der er interesseret, kan tjekke kildekoden, det er hovedsageligt klassen ContentLoader.

Lad os se, hvordan man für adressen til videostrømmen fra adressen til den offentlige videoside og spiller den i medieafspilleren.

Tilslut biblioteket i
app/build.gradle

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

Det er interessant, at det stadig ikke kan bruges efter dette, da eksemplerne vil klage over den manglende klasse Downloader. Den kan kopieres ind i projektet fra kataloget for automatiserede tests. NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — fungerer for version 0.17.4 (det ser ud til, at denne del er blevet ændret i en nyere version af biblioteket, men det skal stadig kontrolleres).

For at fü adressen til videostrømmen fra adressen til videosiden 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 adresse til video kan ytVidUrl vĂŚre den offentlige adresse til en hvilken som helst video pĂĽ YouTube, for eksempel https://www.youtube.com/watch?v=pd2RlatmNRk

Medieafspilleren vil vĂŚre ExoPlayer fra Google. Det er ikke en web-omslag omkring YouTube, men en ĂŚgte indbygget afspiller til afspilning af enhver video, der er fleksibel og tilpasningsdygtig. Den kan ogsĂĽ spille video streams fra YouTube, hvis den fĂĽr den rigtige adresse. Vi har netop fĂĽet adressen pĂĽ streamen, sĂĽ lad os se, hvordan vi sender den til afspilleren.

Tilslut biblioteket i 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 vil ikke behandle alle nuancer ved at placere afspillerkomponenten pĂĽ appens skĂŚrm (du kan se eksemplerne pĂĽ projektets hjemmeside eller i koden), vi ser kun pĂĽ, hvordan vi starter afspilning af video fra YouTube i afspilleren med den adresse, vi fik ovenfor:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // stop playing the current video if one has been loaded
        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);

        // Pause the old video while preparing the new one
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // If we pause here after the player itself has paused due to finishing
            // the video, we will get a second STATE_ENDED event here, so we need a
            // special check.
            // At this time, the value of getPlayWhenReady() will remain true, so we check the state.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Prepare the player with the source.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Set the current position immediately after loading the video
        // (in the comments, someone mentioned something about data sources that support or don’t support
        // seeking upon loading, it seems this is nonsense - we just do seek immediately after loading)
        // 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
        // At this point, the normal duration is not yet available, so we don't check it
        // if(seekTo > 0 && seekTo  0) {
            // 5 seconds earlier
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Kendte problemer

  • Vil ikke spille videoer med aldersbegrĂŚnsninger, der krĂŚver login pĂĽ Google/Youtube-konto.

for eksempel: Ilya Muromets, Mosfilm, Ruslan og Ludmila afsnit 1 / Ruslan and Lyudmila film 1, Mosfilm

tip: tilføj südanne videoer til den sorte liste eller bed videoproducenten om at fjerne begrÌnsningen, der er blevet pülagt ved en fejl.

  • Vil ikke spille nogle live-transmissionsvideoer, for hvilke tjenesten returnerer nul lĂŚngde (for disse videoer er lĂŚngden i lister og gallerier angivet som "[dur undef]")

for eksempel: Nü, vent! Alle Udgivelser fra Soyuzmultfilm HD (Tegnefilm for Børn), Tegnefilm fra Soyuzmultfilm-studiet, Top tegnefilm fra Soyuzmultfilm, Tegnefilm fra Soyuzmultfilm-studiet

Tip: add such videos to the blacklist.

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

for eksempel: Taming the Fire Episode 1, Mosfilm Studio

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

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

In the end,

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.

However, the app turned out to be convenient enough for me to start using it myself. My first impression from the early working versions was like entering another world. All content loads from YouTube, but it's no longer YouTube—it's something different, safe and controlled, like taking a centipede out of your eye and putting it in a glass jar. And it's all about the recommendations.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster