Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

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

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

introducere extinsă:
Acum ceva timp am întâlnit exact aceeași problemă ca și autorul unei aplicații minunate Lista albă a canalelor, și am hotărât pentru mine exact aceeași atitudine față de ea: vreau să-mi pot oferi copilului meu o tabletă sau un smartphone cu desene animate din când în când, dar nu sunt deloc mulțumit de unde, după 2-3 clicuri, este lista. de recomandări în aplicațiile standard – clienții YouTube – ia copilul.

Din păcate, după instalarea aplicației Channel Whitelist, a fost descoperit un alt defect mai prozaic, dar totuși fatal - NIH I (și, cel mai important, fiul meu) a găsit interfața sa nu foarte convenabilă, mai ales după obiceiul de a folosi playerul YouTube Kids.

În general, după ceva timp eram gata să-mi fac propria implementare. După ceva timp, a devenit posibil să se pună o etichetă pe prima versiune.

Caracteristici principale:

  • Adăugați canalele și listele de redare preferate - acestea vor fi salvate și indexate în baza de date locală
  • În listele de redare adăugate, dezactivați videoclipurile inutile dacă nu aveți nevoie de ele
  • Lista de recomandări este generată aleatoriu doar din canalele și listele de redare adăugate în aplicație

Licență open source, GPLv3: https://github.com/sadr0b0t/yashlang/

Mai jos este o prezentare de ansamblu a funcțiilor principale mai detaliat, plus câteva detalii tehnice despre cum să redați videoclipuri YouTube în aplicația dvs. Android fără a utiliza API-ul Google și pachetele web.

Pe ecranul principal și pe ecranul playerului: recomandări aleatorii de la canale non-aleatoare

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Căutare instantanee în baza de date locală

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) => Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Adăugați un nou canal sau playlist

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Căutați online după nume sau introduceți o adresă cunoscută. Lista de videoclipuri ale unui canal sau playlist este salvată în baza de date locală; pictogramele nu sunt stocate în cache.

Playlist dinamic - redați rezultatele căutării

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) => Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

În recomandările video vor fi doar videoclipuri care satisfac interogarea de căutare.

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

Listele de redare și canalele pot fi dezactivate și repornite temporar

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Vă rugăm să rețineți: videoclipurile dintr-o listă de redare dezactivată vor dispărea și din rezultatele căutării, din istoricul vizionărilor și din lista de favorite. Dar nu vă faceți griji, acestea vor apărea din nou acolo imediat după ce lista de redare este reactivată.

Adăugați un videoclip pe lista neagră

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Un videoclip blocat nu va fi afișat în recomandări, în rezultatele căutării și va dispărea din lista de favorite și din istoricul vizionărilor. Videoclipul va fi în continuare vizibil în setările playlistului.

Vizualizați lista neagră și reactivați articolele blocate din greșeală:
Setări > meniu antet > Lista neagră

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Videoclipurile preferate și istoricul vizionărilor

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Videoclipurile preferate de pe ecranul playerului sunt marcate cu un asterisc în colțul din dreapta sus.

Meniuri contextuale în titlul ecranului și clic lung în galerii și liste

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Copiați numele sau adresa unui videoclip sau playlist în ecranul de vizionare sau în orice listă.

Pornire rapidă - adăugați canale și liste de redare recomandate

Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?) => Moartea lui Koshchei este pe lista de recomandări (este posibil să faci YouTube confortabil și sigur?)

Aplicația va arăta imediat ca capturile de ecran de mai sus.

Canalele și listele de redare care nu sunt necesare pot fi dezactivate sau șterse din setări.

Instalare

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

Rețineți că comutarea între versiuni diferite din surse diferite de pe același dispozitiv nu va funcționa din cauza semnăturilor diferite ale fișierului apk; înainte de a instala versiunea dintr-o sursă nouă, va trebui mai întâi să ștergeți versiunea instalată împreună cu datele - memoria cache a listei de redare și istoricul de navigare (sau aflați cum să transferați date).

Detalii tehnice

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

Licență gratuită GPLv3 cu sursă deschisă.

întrebare: Este, în general, legal să răzuiești site-uri web fără permisiunea (sau cu o interdicție explicită) din partea autorilor? Google elimină aplicațiile de pe Google Play, care nu își folosesc API-ul, ci își analizează site-urile, deoarece își încalcă acordul de utilizare.
răspuns: desigur, este legal, depinde de tine ce instrument să folosești pentru a citi informațiile disponibile publicului. În plus: Un tribunal din SUA a legalizat complet eliminarea site-ului web și a interzis interferența tehnică cu acesta., dar Gul poate avea o părere diferită; personal, încă nu am dorința de a merge la un tribunal american pentru a-i convinge.

Un cod

bibliotecă NewPipeExtractor - proiect de sprijin pentru jucători NewPipe, vă permite să descărcați o listă de videoclipuri pentru un anumit canal sau playlist, să descărcați informații detaliate despre un videoclip celebru (ce este vizibil pe pagina web a videoclipului), să obțineți adresa pictogramei videoclipului și, de asemenea, să obțineți adresa videoclipului curent.

Codul de încărcare a playlistului este puțin greoi, așa că nu îl voi da aici, pentru cei interesați, aruncați o privire la codul sursă, practic este o clasă ContentLoader.

Să vedem cum să obținem adresa unui flux video de la adresa paginii video publice și să o redăm în player.

Conectați biblioteca la
app/build.gradle

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

Este curios că după aceasta încă nu îl vei mai putea folosi, pentru că... exemplele se vor plânge de lipsa clasei Downloader. Poate fi copiat în proiect din directorul de teste automatizate NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funcționează pentru versiunea 0.17.4 (se pare că această parte a fost refăcută într-o versiune mai nouă a bibliotecii, dar mai trebuie să verificăm).

Obțineți adresa fluxului video după adresa paginii video de 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;
    }

Adresa video ytVidUrl poate fi adresa publică a paginii oricărui videoclip de pe site-ul YouTube, de exemplu https://www.youtube.com/watch?v=pd2RlatmNRk

Jucătorul va fi exoplayer de la Google însuși. Acesta nu este un web wrapper pe YouTube, ci un adevărat player încorporat pentru redarea oricăror videoclipuri, destul de flexibil și personalizabil. De asemenea, poate reda fluxuri video de pe YouTube dacă îi furnizați adresa corectă. Tocmai am primit adresa de stream, așa că haideți să vedem cum o trimitem playerului.

Conectați biblioteca la 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 lua în considerare toate nuanțele de plasare a componentei player pe ecranul aplicației (puteți privi exemplele de pe site-ul web al proiectului sau din cod), ne vom uita doar la modul de a începe redarea unui videoclip de pe YouTube în player la adresa primita mai sus:

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

probleme cunoscute

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

de exemplu: Ilya Muromets, Mosfilm Cinema Concern, Ruslan și Lyudmila filmul 1, Mosfilm Film Concern

sfat: adăugați astfel de videoclipuri în lista neagră sau cereți autorului videoclipului să elimine restricția care a fost stabilită din greșeală.

  • Unele videoclipuri difuzate pentru care serviciul returnează durata zero nu vor fi redate (pentru astfel de videoclipuri, durata din liste și galerie este marcată ca „[dur undef]”).

de exemplu: Asteapta! Toate numerele Soyuzmultfilm HD (Desene animate pentru copii), Desene animate de la studioul Soyuzmultfilm, Desene animate de top Soyuzmultfilm, Desene animate de la studioul Soyuzmultfilm

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

  • Este posibil ca videoclipurile care sunt disponibile numai prin linkuri directe să nu fie incluse în lista de redare locală, chiar dacă descărcați toate videoclipurile utilizatorului

de exemplu: Taming of Fire Episodul 1, Mosfilm Cinema Concern

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

  • Interfața poate încetini dacă internetul este lent (dar nu este oprit)

Ca urmare,

Fiul meu s-a mutat de la o tabletă la un televizor inteligent Samsung, care nu poate rula aplicații Android. Prin urmare, cel mai bun control parental este încă personal.

Dar aplicația s-a dovedit a fi suficient de convenabilă pentru ca eu să încep să o folosesc eu. Prima impresie de la primele versiuni de lucru a fost că mă aflam într-o altă lume. Tot conținutul este descărcat de pe YouTube, dar acesta nu mai este YouTube, ci altceva, sigur și controlat, de parcă ți-ai scoate un centiped din ochi și l-ai pune într-un borcan de sticlă. Și totul ține de recomandări.

Sursa: www.habr.com

Adauga un comentariu