Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Mubo ang pasiuna: Gusto nakong hisgutan ang YouTube online player alang sa Android nga adunay mga lokal nga playlist, channel ug rekomendasyon.

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Gipalapad nga pasiuna:
Sa pipila ka mga panahon ang milabay akong nasugatan sa tukma sa sama nga problema sama sa tagsulat sa usa ka talagsaon nga aplikasyon Whitelist sa Channel, ug determinado alang sa akong kaugalingon nga parehas nga kinaiya bahin niini: Gusto nako nga mahatagan ang akong anak og tablet o smartphone nga adunay mga cartoon matag karon ug unya, apan dili gyud ako malipayon kung diin, pagkahuman sa 2-3 nga pag-klik, ang lista sa mga rekomendasyon sa standard nga mga aplikasyon - mga kliyente sa YouTube - gikuha ang bata.

Ikasubo, pagkahuman sa pag-install sa aplikasyon sa Channel Whitelist, nadiskubre ang usa pa nga labi ka prosaic, apan makamatay nga sayup - NIH I (ug, labing hinungdanon, ang akong anak nga lalaki) nakit-an nga dili kaayo kombenyente ang interface niini, labi na pagkahuman sa batasan sa paggamit sa player sa YouTube Kids.

Sa kinatibuk-an, pagkahuman sa pila ka panahon andam na ako sa paghimo sa akong kaugalingon nga pagpatuman. Human sa pipila ka panahon, nahimong posible nga magbutang ug tag sa unang pagpagawas.

Pangunang mga bahin:

  • Idugang ang imong paborito nga mga channel ug mga playlist - kini maluwas ug ma-index sa lokal nga database
  • Sulod sa gidugang nga mga playlist, i-off ang dili kinahanglan nga mga video kung dili nimo kini kinahanglan
  • Ang lista sa mga rekomendasyon gihimo nga random lamang gikan sa mga channel ug mga playlist nga gidugang sa aplikasyon

Bukas nga tinubdan, lisensya sa GPLv3: https://github.com/sadr0b0t/yashlang/

Sa ubos mao ang usa ka kinatibuk-ang pagtan-aw sa mga nag-unang bahin sa mas detalyado, dugang sa pipila ka teknikal nga mga detalye sa kon sa unsang paagi sa pagdula sa YouTube video sa imong Android aplikasyon nga walay paggamit sa Google API ug web wrappers.

Sa main screen ug sa screen sa player: random nga mga rekomendasyon gikan sa dili random nga mga channel

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Diha-diha nga pagpangita sa lokal nga database

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) => Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Pagdugang og bag-ong channel o playlist

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Pangitaa pinaagi sa ngalan online o pagsal-ot og nailhan nga adres. Ang lista sa mga video sa usa ka channel o playlist gitipigan sa lokal nga database; ang mga icon wala gi-cache.

Dynamic nga playlist - dula sa mga resulta sa pagpangita

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) => Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Sa mga rekomendasyon sa video adunay mga video lamang nga makatagbaw sa pangutana sa pagpangita.

Sa susama, kung magbukas ka og video gikan sa mga setting sa playlist, ang mga video lang gikan sa parehas nga playlist ang makita sa lista sa mga rekomendasyon.

Ang mga playlist ug mga channel mahimong temporaryo nga i-off ug i-on pag-usab

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Palihug timan-i: ang mga video gikan sa usa ka disabled nga playlist mawala usab sa mga resulta sa pagpangita, kasaysayan sa pagtan-aw ug gikan sa listahan sa mga paborito. Pero ayawg kabalaka, mupakita na pud sila diha dayon human ma-on pag-usab ang playlist.

Pagdugang og video sa blacklist

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang usa ka gibabagan nga video dili ipakita sa mga rekomendasyon, sa mga resulta sa pagpangita, ug mawala gikan sa lista sa mga paborito ug gikan sa kasaysayan sa pagtan-aw. Ang video makita gihapon sa mga setting sa playlist.

Tan-awa ang blacklist ug i-enable pag-usab ang mga butang nga gibabagan sa sayop nga paagi:
Settings> header menu> Blacklist

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Paboritong mga video ug kasaysayan sa pagtan-aw

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang mga paborito nga video sa screen sa player gimarkahan og asterisk sa taas nga tuo nga suok.

Mga menu sa konteksto sa titulo sa screen ug dugay nga pag-klik sa mga galeriya ug mga lista

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Kopyaha ang ngalan o adres sa usa ka video o playlist sa screen sa pagtan-aw o sa bisan unsang lista.

Dali nga pagsugod - pagdugang girekomenda nga mga channel ug mga playlist

Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?) => Ang pagkamatay ni Koshchei naa sa lista sa mga rekomendasyon (posible ba nga himuon nga komportable ug luwas ang YouTube?)

Ang aplikasyon makita dayon sama sa mga screenshot sa ibabaw.

Ang wala kinahanglana nga mga channel ug mga playlist mahimong i-off o mapapas sa mga setting.

Pag-instalar

panid sa proyekto: https://github.com/sadr0b0t/yashlang/
sa English: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
gipagawas: https://github.com/sadr0b0t/yashlang/releases

Hinumdumi nga ang pagbalhin tali sa lainlaing mga bersyon gikan sa lainlaing mga gigikanan sa parehas nga aparato dili molihok tungod sa lainlaing mga pirma sa apk file; sa wala pa i-install ang bersyon gikan sa usa ka bag-ong gigikanan, kinahanglan nimo una nga papason ang na-install nga bersyon kauban ang data - ang cache sa playlist ug kasaysayan sa pag-browse (o mahibal-an kung giunsa pagbalhin data).

Mga detalye sa teknikal

Wala magkinahanglan og Google/YouTube account, kinahanglan lang nimo ang Internet, naggamit sa mosunod nga mga librarya:

Bukas nga gigikanan, libre nga lisensya sa GPLv3.

pangutana: Sa kasagaran legal ba ang pag-scrape sa mga website nga walay pagtugot (o uban ang klaro nga pagdili) gikan sa mga tagsulat? Gitangtang sa Google ang mga app gikan sa Google Play, nga wala mogamit sa ilang API, apan nag-parse sa ilang mga site, tungod kay gilapas nila ang ilang kasabutan sa tiggamit.
tubag: siyempre, legal kini, naa ra kanimo kung unsang himan ang gamiton aron mabasa ang kasayuran nga magamit sa publiko. Dugang pa: Ang usa ka korte sa US hingpit nga nag-legalize sa pag-scrap sa website ug nagdili sa teknikal nga pagpanghilabot niini., apan si Gul tingali adunay lahi nga opinyon; sa personal, wala pa akoy tinguha nga moadto sa korte sa Amerika aron kombinsihon sila.

Pipila ka code

librarya Bag-ongPipeExtractor - proyekto sa suporta sa magdudula Bag-ong Tubo, nagtugot kanimo sa pag-download sa usa ka lista sa mga video alang sa usa ka piho nga channel o playlist, pag-download sa detalyadong impormasyon mahitungod sa usa ka bantog nga video (unsa ang makita sa web page sa video), pagkuha sa adres sa video icon, ug pagkuha usab sa adres sa video sapa.

Ang code alang sa pag-load sa playlist medyo hasol, mao nga dili nako ihatag dinhi, alang sa mga interesado, tan-awa ang source code, kini usa ka klase. ContentLoader.

Atong tan-awon kung giunsa pagkuha ang adres sa usa ka stream sa video gikan sa adres sa panid sa publiko nga video ug i-play kini sa player.

Ikonektar ang library sa
app/build.gradle

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

Katingad-an nga pagkahuman niini dili ka gihapon magamit, tungod kay ... ang mga pananglitan magreklamo bahin sa nawala nga klase sa Downloader. Mahimo kining kopyahon sa proyekto gikan sa direktoryo sa automated nga mga pagsulay NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - nagtrabaho alang sa bersyon 0.17.4 (daw kini nga bahin gibag-o sa usa ka bag-ong bersyon sa librarya, apan kinahanglan pa naton susihon).

Kuhaa ang adres sa video stream pinaagi sa adres sa panid sa video sa website sa 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;
    }

Ang adres sa video nga ytVidUrl mahimong publikong adres sa panid sa bisan unsang video sa website sa YouTube, pananglitan https://www.youtube.com/watch?v=pd2RlatmNRk

Ang magdudula mahimong exoplayer gikan sa Google mismo. Dili kini usa ka web wrapper sa YouTube, apan usa ka tinuod nga naka-embed nga magdudula alang sa pagdula sa bisan unsang mga video, medyo flexible ug napasadya. Mahimo usab kini nga magdula sa mga sapa sa video gikan sa YouTube kung hatagan nimo kini sa husto nga adres. Bag-o lang namon nadawat ang adres sa sapa, mao nga tan-awon naton kung giunsa kini ipadala sa magdudula.

Ikonektar ang library sa proyekto app/build.gradle:

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

Dili namon tagdon ang tanan nga mga nuances sa pagbutang sa component sa player sa screen sa aplikasyon (mahimo nimong tan-awon ang mga pananglitan sa website sa proyekto o sa code), tan-awon ra naton kung giunsa pagsugod ang pagdula sa usa ka video gikan sa YouTube sa player sa ang adres nga nadawat sa ibabaw:

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

Nahibal-an nga Mga Isyu

  • Dili magdula og mga video nga adunay mga pagdili sa edad nga nagkinahanglan og login sa imong Google/YouTube account

sama pananglit: Ilya Muromets, Mosfilm Cinema Concern, Ruslan ug Lyudmila nga pelikula 1, Mosfilm Film Concern

tambag: idugang ang ingon nga mga video sa blacklist o hangyoa ang tagsulat sa video nga tangtangon ang pagdili nga gitakda sa sayup.

  • Ang ubang mga video sa pagsibya diin ang serbisyo nagbalik sa zero nga gitas-on dili magdula (alang sa ingon nga mga video, ang gidugayon sa mga lista ug gallery gimarkahan nga "[dur undef]")

sama pananglit: Hulata kini! Tanan nga Isyu sa Soyuzmultfilm HD (Mga Cartoon para sa mga Bata), Mga Cartoon gikan sa Soyuzmultfilm studio, Nanguna nga mga cartoon nga Soyuzmultfilm, Mga Cartoon gikan sa studio sa Soyuzmultfilm

tambag: idugang ang ingon nga mga video sa blacklist.

  • Ang mga video nga magamit lamang pinaagi sa mga direktang link mahimong dili maapil sa lokal nga playlist, bisan kung imong i-download ang tanan nga mga video sa tiggamit.

sama pananglit: Taming of Fire Episode 1, Mosfilm Cinema Concern

  • Kung makit-an nimo ang usa ka publiko nga video nga wala magkinahanglan usa ka pag-login, nagdula sa browser, apan wala magdula sa player, magpadala usa ka ulat sa bug (posible nga ang problema naayo na sa bag-ong bersyon Bag-ongPipeExtractor ug kinahanglan ra nimo nga i-update ang asembliya sa kini nga bersyon, alang sa panig-ingnan).

  • Ang interface mahimong mohinay kon ang Internet hinay (apan dili mapalong)

Ingon sa usa ka resulta,

Ang akong anak nga lalaki mibalhin gikan sa usa ka tablet ngadto sa usa ka Samsung smart TV, nga dili makadagan sa mga aplikasyon sa Android. Busa, ang labing maayo nga pagpugong sa ginikanan personal gihapon.

Apan ang aplikasyon nahimo nga igo nga kombenyente alang kanako nga magsugod sa paggamit niini sa akong kaugalingon. Ang unang impresyon gikan sa unang mga bersyon sa pagtrabaho mao nga ako sa laing kalibutan. Ang tanan nga sulud gi-download gikan sa YouTube, apan dili na kini YouTube, apan usa ka butang, luwas ug kontrolado, ingon nga gikuha nimo ang usa ka alupihan gikan sa imong mata ug gibutang kini sa usa ka garapon nga baso. Ug kini tanan bahin sa mga rekomendasyon.

Source: www.habr.com

Idugang sa usa ka comment