Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Įžanga trumpa: noriu pakalbėti apie „YouTube“ internetinį grotuvą, skirtą „Android“, su vietiniais grojaraščiais, kanalais ir rekomendacijomis.

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Išplėstas įvadas:
Prieš kurį laiką susidūriau su lygiai ta pačia problema, kaip ir nuostabios programos autorius Baltasis kanalų sąrašas, ir nusprendžiau sau lygiai tokį patį požiūrį į tai: noriu karts nuo karto vaikui padovanoti planšetę ar išmanųjį telefoną su animaciniais filmukais, bet visai nesidžiaugiu, kur po 2-3 paspaudimų atsiras sąrašas rekomendacijų standartinėse programose – YouTube klientai – paima vaiką.

Deja, įdiegus „Channel Whitelist“ aplikaciją, buvo aptiktas dar vienas proziškesnis, bet vis tiek lemtingas trūkumas – NIH I (ir, svarbiausia, mano sūnui) jos sąsaja pasirodė ne itin patogi, ypač po įpročio naudotis „YouTube Kids“ grotuvu.

Apskritai, po kurio laiko buvau pasiruošęs įgyvendinti savo. Po kurio laiko atsirado galimybė uždėti žymą pirmajam leidimui.

Pagrindinės savybės:

  • Pridėkite mėgstamus kanalus ir grojaraščius – jie bus išsaugoti ir indeksuojami vietinėje duomenų bazėje
  • Pridėtuose grojaraščiuose išjunkite nereikalingus vaizdo įrašus, jei jų nereikia
  • Rekomendacijų sąrašas generuojamas atsitiktinai tik iš kanalų ir grojaraščių, įtrauktų į programą

Atvirojo kodo, GPLv3 licencija: https://github.com/sadr0b0t/yashlang/

Toliau pateikiama išsamesnė pagrindinių funkcijų apžvalga, taip pat kai kurios techninės informacijos apie tai, kaip leisti „YouTube“ vaizdo įrašus „Android“ programoje nenaudojant „Google“ API ir žiniatinklio paketų.

Pagrindiniame ekrane ir grotuvo ekrane: atsitiktinės rekomendacijos iš neatsitiktinių kanalų

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Greita paieška vietinėje duomenų bazėje

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) => Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Pridėkite naują kanalą arba grojaraštį

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Ieškokite internete pagal vardą arba įveskite žinomą adresą. Kanalo ar grojaraščio vaizdo įrašų sąrašas išsaugomas vietinėje duomenų bazėje, piktogramos nesaugomos talpykloje.

Dinaminis grojaraštis – paleiskite paieškos rezultatus

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) => Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Vaizdo įrašų rekomendacijose bus tik tie vaizdo įrašai, kurie atitinka paieškos užklausą.

Panašiai, jei atidarysite vaizdo įrašą iš grojaraščio nustatymų, rekomendacijų sąraše bus rodomi tik vaizdo įrašai iš to paties grojaraščio.

Grojaraščius ir kanalus galima laikinai išjungti ir vėl įjungti

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Atkreipkite dėmesį: vaizdo įrašai iš išjungto grojaraščio taip pat dings iš paieškos rezultatų, žiūrėjimo istorijos ir mėgstamiausiųjų sąrašo. Tačiau nesijaudinkite, jie vėl pasirodys iškart po to, kai vėl bus įjungtas grojaraštis.

Įtraukite vaizdo įrašą į juodąjį sąrašą

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Užblokuotas vaizdo įrašas nebus rodomas rekomendacijose, paieškos rezultatuose, dings iš mėgstamiausių sąrašo ir žiūrėjimo istorijos. Vaizdo įrašas vis tiek bus matomas grojaraščio nustatymuose.

Peržiūrėkite juodąjį sąrašą ir iš naujo įgalinkite per klaidą užblokuotus elementus:
Nustatymai > antraštės meniu > Juodasis sąrašas

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Mėgstamiausi vaizdo įrašai ir žiūrėjimo istorija

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Mėgstamiausi vaizdo įrašai grotuvo ekrane pažymėti žvaigždute viršutiniame dešiniajame kampe.

Kontekstiniai meniu ekrano pavadinime ir ilgas paspaudimas galerijose ir sąrašuose

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Nukopijuokite vaizdo įrašo arba grojaraščio pavadinimą arba adresą peržiūros ekrane arba bet kuriame sąraše.

Greita pradžia – pridėkite rekomenduojamus kanalus ir grojaraščius

Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?) => Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)

Programa iš karto atrodys kaip aukščiau pateiktos ekrano nuotraukos.

Nereikalingus kanalus ir grojaraščius galima išjungti arba ištrinti nustatymuose.

Montavimas

Projekto puslapis: https://github.com/sadr0b0t/yashlang/
angliškai: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
leidimai: https://github.com/sadr0b0t/yashlang/releases

Atminkite, kad perjungimas tarp skirtingų versijų iš skirtingų šaltinių tame pačiame įrenginyje neveiks dėl skirtingų apk failo parašų; prieš diegdami versiją iš naujo šaltinio, pirmiausia turėsite ištrinti įdiegtą versiją kartu su duomenimis - grojaraščio talpyklą ir naršymo istoriją (arba išsiaiškinkite, kaip perkelti duomenis).

Techninės detalės

Nereikia Google/YouTube paskyros, reikia tik interneto, naudoja šias bibliotekas:

Atvirojo kodo, nemokama GPLv3 licencija.

klausimas: ar apskritai yra teisėta iškrapštyti svetaines be autorių leidimo (arba su aišku uždraudimu)? „Google“ pašalina programas iš „Google Play“., kurios nenaudoja savo API, bet analizuoja savo svetaines, nes jie pažeidžia savo vartotojo sutartį.
atsakymas: žinoma, tai yra teisėta, tik jūs turite nuspręsti, kokiu įrankiu skaityti viešai prieinamą informaciją. Be to: JAV teismas visiškai įteisino interneto svetainių išgraužimą ir uždraudė techninius kišimosi į juos., bet Gul gali turėti kitokią nuomonę; asmeniškai aš dar neturiu noro kreiptis į Amerikos teismą, kad juos įtikinčiau.

Kažkoks kodas

biblioteka Naujas vamzdžių ištraukėjas - žaidėjų paramos projektas NewPipe, leidžia atsisiųsti nurodyto kanalo ar grojaraščio vaizdo įrašų sąrašą, atsisiųsti išsamią informaciją apie garsų vaizdo įrašą (kas matoma vaizdo įrašo tinklalapyje), gauti vaizdo įrašo piktogramos adresą, taip pat gauti vaizdo įrašo adresą. srautas.

Grojaraščio įkėlimo kodas yra šiek tiek sudėtingas, todėl čia jo nepateiksiu, kam įdomu, pažiūrėkite į šaltinio kodą, tai iš esmės yra klasė „ContentLoader“..

Pažiūrėkime, kaip gauti vaizdo srauto adresą iš viešojo vaizdo įrašo puslapio adreso ir paleisti jį grotuve.

Prijunkite biblioteką prie
app/build.gradle

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

Įdomu, kad po to vis tiek negalėsite juo naudotis, nes... pavyzdžiai skųsis dėl trūkstamos Downloader klasės. Jį galima nukopijuoti į projektą iš automatinių testų katalogo NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - veikia 0.17.4 versijai (atrodo, kad ši dalis buvo perdaryta naujesnėje bibliotekos versijoje, bet dar reikia patikrinti).

Gaukite vaizdo įrašo srauto adresą naudodami vaizdo įrašo puslapio adresą „YouTube“ svetainėje:

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

Vaizdo įrašo adresas ytVidUrl gali būti viešas bet kurio vaizdo įrašo „YouTube“ svetainėje puslapio adresas, pvz. https://www.youtube.com/watch?v=pd2RlatmNRk

Žaidėjas bus „ExoPlayer“ iš pačios Google. Tai ne „YouTube“ žiniatinklio paketas, o tikras įterptasis grotuvas, skirtas leisti bet kokius vaizdo įrašus, gana lankstus ir pritaikomas. Jis taip pat gali leisti vaizdo įrašų srautus iš „YouTube“, jei pateikiate teisingą adresą. Ką tik gavome srauto adresą, tad pažiūrėkime, kaip nusiųsti jį grotuvui.

Prijunkite biblioteką prie projekto app/build.gradle:

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

Mes nenagrinėsime visų grotuvo komponento pateikimo programos ekrane niuansų (pavyzdžius galite peržiūrėti projekto svetainėje arba kode), mes tik pažiūrėsime, kaip grotuve pradėti leisti vaizdo įrašą iš „YouTube“ adresu aukščiau gautas adresas:

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

žinomos problemos

  • Neleis vaizdo įrašų su amžiaus apribojimais, kuriems reikia prisijungti prie „Google“ / „YouTube“ paskyros

pavyzdžiui: Ilja Murometsas, kino koncernas „Mosfilm“., Ruslano ir Liudmilos filmas 1, kino koncernas „Mosfilm“.

patarimas: įtraukite tokius vaizdo įrašus į juodąjį sąrašą arba paprašykite vaizdo įrašo autoriaus pašalinti per klaidą nustatytą apribojimą.

  • Kai kurie transliuojami vaizdo įrašai, kuriems paslauga grąžina nulinį ilgį, nebus paleisti (tokiems vaizdo įrašams trukmė sąrašuose ir galerijoje pažymėta kaip „[dur undef]“).

pavyzdžiui: Palauk! Visi Soyuzmultfilm HD numeriai (Animaciniai filmai vaikams), Animaciniai filmai iš Soyuzmultfilm studijos, Populiariausi animaciniai filmai Soyuzmultfilm, Animaciniai filmai iš Soyuzmultfilm studijos

patarimas: įtraukite tokius vaizdo įrašus į juodąjį sąrašą.

  • Vaizdo įrašai, pasiekiami tik naudojant tiesiogines nuorodas, gali būti neįtraukti į vietinį grojaraštį, net jei atsisiunčiate visus naudotojo vaizdo įrašus

pavyzdžiui: Ugnies sutramdymas 1 serija, „Mosfilm Cinema Concern“.

  • Jei aptikote viešą vaizdo įrašą, kuriam nereikia prisijungimo, jis paleidžiamas naršyklėje, bet nerodomas grotuve, atsiųskite pranešimą apie klaidą (visai gali būti, kad problema jau išspręsta naujoje versijoje Naujas vamzdžių ištraukėjas ir jums reikės tik atnaujinti agregatą naudojant šią versiją, pavyzdžiui).

  • Sąsaja gali sulėtėti, jei internetas lėtas (bet neišjungtas)

Kaip rezultatas,

Mano sūnus iš planšetinio kompiuterio perėjo prie „Samsung“ išmaniojo televizoriaus, kuriame negalima paleisti „Android“ programų. Todėl geriausia tėvų kontrolė vis tiek yra asmeninė.

Tačiau aplikacija pasirodė pakankamai patogi, kad galėčiau pati pradėti ją naudoti. Pirmasis įspūdis iš ankstyvųjų darbinių versijų buvo toks, kad buvau kitame pasaulyje. Visas turinys parsisiunčiamas iš „YouTube“, bet tai jau ne „YouTube“, o kažkas kito, saugaus ir kontroliuojamo, tarsi šimtakojį ištrauktum iš akies ir įdėtum į stiklinį indelį. Ir viskas priklauso nuo rekomendacijų.

Šaltinis: www.habr.com

Добавить комментарий