Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Inledningen är kort: Jag vill prata om YouTubes onlinespelare för Android med lokala spellistor, kanaler och rekommendationer.

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Utökad introduktion:
För en tid sedan stötte jag på exakt samma problem som författaren till en underbar ansökan Kanalvitlista, och bestämde för mig själv exakt samma inställning till det: jag vill kunna ge mitt barn en surfplatta eller smartphone med tecknade filmer då och då, men jag är inte alls nöjd med var, efter 2-3 klick, listan av rekommendationer i standardapplikationer - YouTube-klienter - tar barnet.

Tyvärr, efter att ha installerat applikationen Channel Whitelist, upptäcktes en annan mer prosaisk, men fortfarande ödesdiger brist - NIH Jag (och, viktigast av allt, min son) fann dess gränssnitt inte särskilt bekvämt, särskilt efter vanan att använda YouTube Kids-spelaren.

I allmänhet var jag efter en tid redo att göra min egen implementering. Efter en tid blev det möjligt att sätta en tag på den första releasen.

Viktiga funktioner:

  • Lägg till dina favoritkanaler och spellistor - de kommer att sparas och indexeras i den lokala databasen
  • Inom tillagda spellistor, stäng av onödiga videor om du inte behöver dem
  • Listan med rekommendationer genereras endast slumpmässigt från kanaler och spellistor som lagts till i applikationen

Öppen källkod, GPLv3-licens: https://github.com/sadr0b0t/yashlang/

Nedan finns en mer detaljerad översikt över huvudfunktionerna, plus några tekniska detaljer om hur du spelar upp YouTube-videor i din Android-applikation utan att använda Googles API och webbomslag.

På huvudskärmen och på spelarskärmen: slumpmässiga rekommendationer från icke-slumpmässiga kanaler

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Omedelbar sökning i lokal databas

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) => Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Lägg till en ny kanal eller spellista

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Sök på namn online eller ange en känd adress. Listan över videor för en kanal eller spellista sparas i den lokala databasen, ikoner cachelagras inte.

Dynamisk spellista - spela upp sökresultat

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) => Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

I videorekommendationerna kommer det bara att finnas videor som uppfyller sökfrågan.

På samma sätt, om du öppnar en video från spellistans inställningar, visas bara videor från samma spellista i listan med rekommendationer.

Spellistor och kanaler kan tillfälligt stängas av och slås på igen

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Observera: videor från en inaktiverad spellista kommer också att försvinna från sökresultat, visningshistorik och från favoritlistan. Men oroa dig inte, de kommer att dyka upp där igen direkt efter att spellistan har slagits på igen.

Lägg till en video till den svarta listan

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

En blockerad video kommer inte att visas i rekommendationer, i sökresultat och försvinner från listan över favoriter och från visningshistoriken. Videon kommer fortfarande att vara synlig i spellistans inställningar.

Visa svartlistan och återaktivera objekt som blockerats av misstag:
Inställningar > rubrikmeny > Svartlista

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Favoritvideor och visningshistorik

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Favoritvideor på spelarskärmen är markerade med en asterisk i det övre högra hörnet.

Snabbmenyer i skärmtiteln och långklicka i gallerier och listor

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Kopiera namnet eller adressen till en video eller spellista på visningsskärmen eller i valfri lista.

Snabbstart – lägg till rekommenderade kanaler och spellistor

Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?) => Koshcheis död finns på listan över rekommendationer (är det möjligt att göra YouTube mysigt och säkert?)

Applikationen kommer omedelbart att se ut som skärmdumparna ovan.

Onödiga kanaler och spellistor kan stängas av eller raderas i inställningarna.

Installation

Projektsida: https://github.com/sadr0b0t/yashlang/
på engelska: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
släpper: https://github.com/sadr0b0t/yashlang/releases

Tänk på att byte mellan olika versioner från olika källor på samma enhet inte kommer att fungera på grund av olika signaturer av apk-filen; innan du installerar versionen från en ny källa måste du först radera den installerade versionen tillsammans med data - spellistans cache och webbhistorik (eller ta reda på hur man överför data).

Tekniska detaljer

Kräver inget Google/YouTube-konto, du behöver bara internet, använder följande bibliotek:

Öppen källkod, gratis GPLv3-licens.

fråga: Är det generellt lagligt att skrapa hemsidor utan tillstånd (eller med ett uttryckligt förbud) från författarna? Google tar bort appar från Google Play, som inte använder sitt API, utan analyserar sina webbplatser, eftersom de bryter mot sitt användaravtal.
svar: självklart är det lagligt, det är upp till dig vilket verktyg du ska använda för att läsa allmänt tillgänglig information. Dessutom: En amerikansk domstol har fullständigt legaliserat skrapning av webbplatser och förbjudit teknisk störning av den., men Gul kan ha en annan åsikt; personligen har jag ännu inte lusten att gå till en amerikansk domstol för att övertyga dem.

Någon kod

Bibliotek NewPipeExtractor - spelarstödsprojekt NewPipe, låter dig ladda ner en lista med videor för en angiven kanal eller spellista, ladda ner detaljerad information om en känd video (vad som är synligt på videons webbsida), få ​​adressen till videoikonen och även adressen till videon ström.

Koden för att ladda spellistan är lite besvärlig, så jag kommer inte att ge den här, för de som är intresserade, ta en titt på källkoden, det är i grunden en klass ContentLoader.

Låt oss se hur du får adressen till en videoström från adressen till den offentliga videosidan och spelar upp den i spelaren.

Anslut biblioteket till
app/build.gradle

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

Det är konstigt att du efter detta fortfarande inte kommer att kunna använda den, eftersom... exempel kommer att klaga på den saknade Downloader-klassen. Det kan kopieras till projektet från den automatiska testkatalogen NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - fungerar för version 0.17.4 (det verkar som om den här delen gjordes om i en nyare version av biblioteket, men vi måste fortfarande kontrollera).

Få adressen till videoströmmen genom adressen till videosidan på YouTubes webbplats:

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

Videoadressen ytVidUrl kan vara den offentliga adressen till sidan för vilken video som helst på YouTubes webbplats, till exempel https://www.youtube.com/watch?v=pd2RlatmNRk

Spelaren kommer att vara exospelare från Google själv. Detta är inte ett webbinslag över YouTube, utan en riktig inbäddad spelare för att spela upp alla videor, ganska flexibel och anpassningsbar. Den kan också spela upp videoströmmar från YouTube om du ger den rätt adress. Vi har precis fått streamadressen, 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 överväga alla nyanser av att placera spelarkomponenten på applikationsskärmen (du kan titta på exemplen på projektets webbplats eller i koden), vi kommer bara att titta på hur man börjar spela en video från YouTube i spelaren på adressen som du fått ovan:

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

kända problem

  • Kommer inte att spela upp videor med åldersbegränsningar som kräver inloggning på ditt Google/YouTube-konto

till exempel: Ilya Muromets, Mosfilm Cinema Concern, Ruslan och Lyudmila film 1, Mosfilm Film Concern

råd: lägg till sådana videor på den svarta listan eller be författaren till videon att ta bort begränsningen som ställts in av misstag.

  • Vissa sändningsvideor för vilka tjänsten returnerar noll längd kommer inte att spelas upp (för sådana videor är längden i listorna och galleriet markerad som "[dur undef]").

till exempel: Vänta på det! Alla nummer av Soyuzmultfilm HD (Tecknade filmer för barn), Tecknade filmer från Soyuzmultfilm studio, Bästa tecknade filmerna Soyuzmultfilm, Tecknade filmer från Soyuzmultfilms studio

råd: lägg till sådana videor på svartlistan.

  • Videor som bara är tillgängliga via direktlänkar kanske inte inkluderas i den lokala spellistan, även om du laddar ner alla användarens videor

till exempel: Taming of Fire Avsnitt 1, Mosfilm Cinema Concern

  • Om du stöter på en offentlig video som inte kräver inloggning, som spelas i webbläsaren, men inte spelas i spelaren, skicka en felrapport (det är mycket möjligt att problemet redan har åtgärdats i den nya versionen NewPipeExtractor och du behöver bara uppdatera sammansättningen med den här versionen, exempelvis).

  • Gränssnittet kan sakta ner om internet är långsamt (men inte avstängt)

Som ett resultat,

Min son flyttade från en surfplatta till en Samsung smart TV, som inte kan köra Android-applikationer. Därför är den bästa föräldrakontrollen fortfarande personlig.

Men applikationen visade sig vara tillräckligt bekväm för att jag skulle börja använda den själv. Det första intrycket från de tidiga fungerande versionerna var att jag var i en annan värld. Allt innehåll laddas ner från YouTube, men det här är inte längre YouTube, utan något annat, säkert och kontrollerat, som om du tog en tusenfoting ur ögat och stoppade den i en glasburk. Och allt handlar om rekommendationerna.

Källa: will.com

Lägg en kommentar