Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Introducere pe scurt: vreau să vorbesc despre playerul online YouTube pentru Android cu liste de redare locale, canale și recomandări.

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Introducere detaliată:
Cu ceva timp în urmă, m-am confruntat exact cu aceeași problemă ca autorul acestei aplicații minunate Channel Whitelist, și am ajuns să am exact aceeași părere: vreau să pot oferi din când în când copilului meu o tabletă sau un smartphone cu desene animate, dar nu îmi convine deloc unde ajunge copilul după 2-3 clicuri în lista de recomandări din aplicațiile standard — clienții YouTube.

Din păcate, după instalarea aplicației Channel Whitelist, am descoperit deja o altă deficiență, mai prozaică dar totuși fatală — NIH mi s-a părut (și, cel mai important, fiului meu) destul de incomod, mai ales după obișnuința de a folosi playerul YouTube Kids.

În general, după un timp, am decis să fac propria mea implementare. După un alt timp, a devenit posibil să pun eticheta pe prima versiune.

Funcționalități principale:

  • Adăugați canalele și listele de redare preferate — acestea vor fi salvate și indexate în baza de date locală
  • În interiorul listelor de redare adăugate, dezactivați videoclipurile nedorite, dacă nu vă sunt necesare
  • Lista de recomandări este generată aleatoriu doar din canalele și listele de redare adăugate în aplicație

Codul sursă este deschis, licența GPLv3: https://github.com/sadr0b0t/yashlang/

Mai departe, o prezentare detaliată a funcționalităților principale, plus câteva detalii tehnice despre cum să redați videoclipuri de pe YouTube în aplicația dumneavoastră pe Android fără a folosi API-ul Google și web wrappers.

Pe ecranul principal și pe ecranul playerului: recomandări aleatorii din canale non-aleatorii

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Căutare instantanee în baza de date locală

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) => Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Adăugați un nou canal sau listă de redare

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Căutați după nume online sau inserați adresa bine cunoscută. Lista videoclipurilor canalului sau listei de redare este salvată în baza de date locală, icoanele nu sunt stocate în cache.

Listă de redare dinamică — redați rezultatele căutării

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) => Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

În recomandările de sub videoclip vor apărea doar videoclipuri care satisfac cerința de căutare.

În mod similar, dacă deschideți un videoclip din setările listei de redare, în lista de recomandări vor apărea doar videoclipuri din aceeași listă de redare.

Listelor de redare și canalelor li se poate dezactiva temporar vizibilitatea și pot fi activate din nou

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Atenție: videoclipurile dintr-un playlist dezactivat vor dispărea și din rezultatele căutării, istoria vizionărilor și din lista favoritilor. Dar nu trebuie să-ți faci griji, vor apărea din nou imediat ce playlistul va fi reactivat.

Adaugă videoclipul în lista neagră

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Un videoclip blocat nu va apărea în recomandări, în rezultatele căutării, va dispărea din lista favoritelor și din istoria vizionărilor. Videoclipul va rămâne totuși vizibil în setările playlistului.

Vizualizează lista neagră și reactivează elementele blocate din greșeală:
Setări > meniul din antet > Lista neagră

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Videoclipuri favorite și istoria vizionărilor

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Videoclipurile favorite de pe ecranul playerului sunt marcate cu o stea în colțul din dreapta sus.

Meniuri contextuale în antetul ecranului și printr-un clic lung în galerii și liste

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Copiază numele sau adresa videoclipului sau a playlistului din ecranul de vizualizare sau din orice listă.

Începe rapid — adaugă canale și playlisturi recomandate

Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?) => Moartea lui Koșcei în lista de recomandări (este posibil să facem YouTube-ul confortabil și sigur?)

Aplicația va arăta imediat ca în screenshot-urile de mai sus.

Canalele și playlisturile inutile pot fi dezactivate sau șterse în setări.

Instalare

Pagina proiectului: https://github.com/sadr0b0t/yashlang/
în limba engleză: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
versiuni: https://github.com/sadr0b0t/yashlang/releases

Reține că nu se poate comuta între diferitele versiuni din surse diferite pe același dispozitiv din cauza semnăturilor diferite ale fișierului apk; înainte de a instala o versiune dintr-o sursă nouă, trebuie să dezinstalezi versiunea instalată, inclusiv datele — memoria cache a playlisturilor și istoria vizionărilor (sau să găsești o modalitate de a transfera aceste date).

Detalii tehnice

Nu necesită un cont Google/YouTube, are nevoie doar de internet, folosește biblioteci:

Cod sursă deschis, licență liberă GPLv3.

întrebare: Este legal să parsezi site-uri fără permisiunea (sau cu interdicția explicită) autorilor? Google șterge din Google Play aplicațiile, care nu folosesc API-ul lor, ci parsează site-urile acestora, deoarece încalcă termenii și condițiile lor de utilizare.
răspuns: desigur, este legal, este alegerea dumneavoastră ce instrument să folosiți pentru a citi informațiile publice. Mai mult: Curtea din SUA a legalizat complet scraping-ul site-urilor și a interzis împiedicarea acestuia tehnic., dar Google ar putea avea o părere diferită, personal, încă nu am intenția de a merge în instanță în SUA să îi conving.

Puțin cod

Biblioteca NewPipeExtractor — un proiect auxiliar al player-ului NewPipe, permite descărcarea listei de videoclipuri pentru canalul sau lista de redare specificată, descărcarea informațiilor detaliate despre un videoclip cunoscut (ceea ce este vizibil pe pagina web a videoclipului), obținerea adresei pictogramei videoclipului, precum și obținerea adresei fluxului video.

Codul pentru descărcarea listei de redare este puțin voluminos, așa că nu îl voi include aici, cei interesați — să se uite în surse, în principal este vorba despre clasa ContentLoader.

Să vedem cum obținem adresa fluxului video de la adresa paginii publice a videoclipului și să îl redăm în player.

Conectați biblioteca în
app/build.gradle

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

Curios este că, după aceasta, tot nu va funcționa, deoarece exemplele vor da eroare din cauza lipsei clasei Downloader. Aceasta poate fi copiată în proiect din catalogul testelor automate NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funcționează pentru versiunea 0.17.4 (se pare că în versiunea mai nouă a bibliotecii această parte a fost refăcută, dar trebuie să verific încă).

Obțineți adresa fluxului video de la adresa paginii videoclipului pe site-ul 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;
    }

Ca adresă a videoclipului ytVidUrl poate fi o adresă publică a paginii oricărui videoclip de pe YouTube, de exemplu https://www.youtube.com/watch?v=pd2RlatmNRk

Player-ul va fi ExoPlayer de la Google. Aceasta nu este o pachet web pentru YouTube, ci un player integrat autentic pentru redarea oricăror videoclipuri, suficient de flexibil și configurabil. De asemenea, poate reda fluxuri video de pe YouTube, dacă îi dai adresa corectă. Am obținut adresa fluxului abia acum, așa că să vedem cum o trimitem la player.

Conectează biblioteca în proiect app/build.gradle:

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

Nu vom aborda toate detaliile plasării componentului player-ului pe ecranul aplicației (puteți consulta exemplele de pe site-ul proiectului sau în cod), ci ne vom concentra doar asupra modului de a lansa redarea videoclipului de pe YouTube în player folosind adresa obținută mai sus:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // oprește redarea videoclipului curent, dacă a fost încărcat
        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);

        // Vom pune pe pauză vechiul videoclip, în timp ce pregătim unul nou
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Dacă punem pe pauză aici după ce playerul a fost deja pe pauză, terminând
            // redarea videoclipului, vom obține aici o a doua stare STATE_ENDED, așa că avem nevoie de
            // o verificare specială.
            // În același timp, valoarea getPlayWhenReady() va rămâne true, de aceea verificăm exact starea.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Pregătim playerul cu sursa.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Vom specifica poziția curentă imediat la încărcarea videoclipului
        // (în comentarii se menționează ceva despre sursele de date care susțin sau nu susțin
        // trecerile seek la încărcare, se pare că este o prostie - pur și simplu facem seek imediat după încărcare)
        // Exoplayer redă noua Playlist de la început în loc de poziția furnizată
        // https://github.com/google/ExoPlayer/issues/4375
        // Cum să încărcăm stream-ul din poziția dorită? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // în acest loc durata normală încă nu este disponibilă, așa că nu o verificăm
        //if(seekTo > 0 && seekTo  0) {
            // cu 5 secunde mai devreme
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Probleme cunoscute

  • Nu va reda videoclipuri cu restricții de vârstă care necesită autentificare în contul Google/YouTube

de exemplu: Ilia Muromț, Studioul de Film „Mosfilm”, Ruslan și Liudmila episodul 1 / Ruslan and Lyudmila film 1, Studioul de Film „Mosfilm”

sfat: adăugați astfel de videoclipuri în lista neagră sau rugați autorul videoclipului să elimine restricția aplicată din greșeală.

  • Nu va reda unele videoclipuri live pentru care serviciul returnează o lungime nulă (pentru astfel de videoclipuri, durata în liste și galerie este marcată ca „[dur undef]”)

de exemplu: Noțiuni! Toate episoadele Studio Soyuzmultfilm HD (Desene animate pentru copii), Desene animate de la studioul Soyuzmultfilm, Cele mai bune desene animate de la Soyuzmultfilm, Desene animate de la studioul Soyuzmultfilm

sfat: adăugați astfel de videoclipuri în lista neagră.

  • Videoclipurile disponibile doar prin linkuri directe pot să nu apară în lista locală de Redare, chiar dacă descărcați toate videoclipurile utilizatorului.

de exemplu: Îmblânzirea focului Ep 1, Studioul de Film «Mosfilm»

  • Dacă întâlniți un videoclip public care nu necesită autentificare, se redă în browser, dar nu în player, trimiteți un raport de eroare (este posibil ca problema să fi fost deja rezolvată în noua versiune, NewPipeExtractor iar pentru aceasta va trebui doar să actualizați construcția cu această versiune, de exemplu).

  • Interfața poate genera întârziere pe internetul lent (dar nu oprit)

În concluzie

Fiul a făcut trecerea de pe tabletă la un televizor inteligent Samsung, care nu poate rula aplicații Android. Prin urmare, cel mai bun control parental este totuși cel personal.

Dar aplicația s-a dovedit a fi suficient de confortabilă pentru a începe să o folosesc eu însumi. Prima impresie din versiunile incipiente funcționale — am pătruns într-o altă lume. Tot conținutul se încarcă de pe YouTube, dar nu este deja YouTube, ci altceva, sigur și controlat, ca și cum ai fi scos o scorpie din ochi și ai pus-o într-un borcan de sticlă. Și este vorba exact despre recomandări.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster