Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

La enkonduko estas mallonga: mi volas paroli pri la jutuba reta ludanto por Android kun lokaj ludlistoj, kanaloj kaj rekomendoj.

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Vastigita enkonduko:
Antaŭ iom da tempo mi renkontis ĝuste la saman problemon kiel la aŭtoro de mirinda aplikaĵo Blanka Listo de Kanalo, kaj determinis por mi ĝuste la saman sintenon al ĝi: mi volas de tempo al tempo povi doni al mia infano tablojdon aŭ saĝtelefonon kun bildstrioj, sed mi tute ne estas kontenta pri kie, post 2-3 klakoj, la listo. de rekomendoj en normaj aplikoj - YouTube-klientoj - prenas la infanon.

Bedaŭrinde, post instalo de la aplikaĵo Channel Whitelist, estis malkovrita alia pli proza, sed ankoraŭ fatala difekto - NIH mi (kaj, plej grave, mia filo) trovis ĝian interfacon ne tre oportuna, precipe post la kutimo uzi la YouTube Kids-ludilon.

Ĝenerale, post iom da tempo mi estis preta fari mian propran efektivigon. Post iom da tempo, eblis meti etikedon sur la unuan eldonon.

Ĉefaj trajtoj:

  • Aldonu viajn plej ŝatatajn kanalojn kaj ludlistojn - ili estos konservitaj kaj indeksitaj en la loka datumbazo
  • Ene de aldonitaj ludlistoj, malŝaltu nenecesajn filmetojn se vi ne bezonas ilin
  • La listo de rekomendoj estas generita hazarde nur de kanaloj kaj ludlistoj aldonitaj al la aplikaĵo

Malferma fonto, permesilo GPLv3: https://github.com/sadr0b0t/yashlang/

Malsupre estas superrigardo de la ĉefaj funkcioj pli detale, krom kelkaj teknikaj detaloj pri kiel ludi YouTube-filmetojn en via Android-apliko sen uzi la Guglo-API kaj retajn envolvaĵojn.

Sur la ĉefa ekrano kaj sur la ludanta ekrano: hazardaj rekomendoj de ne-hazardaj kanaloj

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Tuja serĉo en loka datumbazo

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) => Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Aldonu novan kanalon aŭ ludliston

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Serĉu laŭ nomo interrete aŭ enigu konatan adreson. La listo de filmetoj de kanalo aŭ ludlisto estas konservita en la loka datumbazo; ikonoj ne estas konservitaj en kaŝmemoro.

Dinamika ludlisto - ludu serĉrezultojn

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) => Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

En la videorekomendoj estos nur filmetoj kiuj kontentigas la serĉdemandon.

Simile, se vi malfermas videon el la agordoj de ludlisto, nur filmetoj de la sama ludlisto aperos en la listo de rekomendoj.

Ludlistoj kaj kanaloj povas esti provizore malŝaltitaj kaj reŝaltitaj

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Bonvolu noti: filmetoj de malfunkciigita ludlisto ankaŭ malaperos el serĉrezultoj, rigardhistorio kaj el la plej ŝatataj listo. Sed ne maltrankviliĝu, ili aperos tie denove tuj post kiam la ludlisto denove ŝaltiĝos.

Aldonu videon al la nigra listo

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Blokita video ne estos montrata en rekomendoj, en serĉrezultoj, kaj malaperos el la listo de plej ŝatataj kaj el la rigardhistorio. La video ankoraŭ estos videbla en la agordoj de la ludlisto.

Rigardu la nigran liston kaj reŝaltu erojn blokitajn per eraro:
Agordoj > titola menuo > Nigra Listo

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Plej ŝatataj filmetoj kaj rigarda historio

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Plej ŝatataj vidbendoj sur la ludanta ekrano estas markitaj per asterisko en la supra dekstra angulo.

Kuntekstmenuoj en la ekrantitolo kaj longklaku en galerioj kaj listoj

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

Kopiu la nomon aŭ adreson de video aŭ ludlisto en la rigarda ekrano aŭ en iu ajn listo.

Rapida komenco - aldonu rekomenditajn kanalojn kaj ludlistojn

Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?) => Morto de Koshchei en la listo de rekomendoj (ĉu eblas fari YouTube komforta kaj sekura?)

La aplikaĵo tuj aspektos kiel la supraj ekrankopioj.

Nebezonataj kanaloj kaj ludlistoj povas esti malŝaltitaj aŭ forigitaj en la agordoj.

fikso

Projekta paĝo: https://github.com/sadr0b0t/yashlang/
en la angla: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
eldonoj: https://github.com/sadr0b0t/yashlang/releases

Memoru, ke ŝanĝi inter malsamaj versioj de malsamaj fontoj sur la sama aparato ne funkcios pro malsamaj subskriboj de la apk-dosiero; antaŭ ol instali la version de nova fonto, vi unue devos forigi la instalitan version kune kun la datumoj - la ludlisto kaŝmemoro kaj foliumhistorio (aŭ eltrovi kiel transdoni datumojn).

Teknikaj detaloj

Ne postulas Google/YouTube konton, vi bezonas nur la Interreton, uzas la jenajn bibliotekojn:

Malferma fonto, libera GPLv3-licenco.

demando: Ĉu ĝenerale laŭleĝe skrapi retejojn sen permeso (aŭ kun eksplicita malpermeso) de la aŭtoroj? Google forigas aplikaĵojn de Google Play, kiuj ne uzas sian API, sed analizas siajn retejojn, ĉar ili malobservas sian uzantinterkonsenton.
respondo: kompreneble, ĝi estas laŭleĝa, dependas de vi, kiun ilon uzi por legi publike disponeblajn informojn. Krome: Usona tribunalo tute leĝigis retejon skrapadon kaj malpermesis teknikan enmiksiĝon kun ĝi., sed Gul eble havas alian opinion; persone, mi ankoraŭ ne havas la deziron iri al usona tribunalo por konvinki ilin.

Iu kodo

biblioteko NewPipeExtractor - Ludanta subteno projekto NovaPipo, permesas al vi elŝuti liston de filmetoj por difinita kanalo aŭ ludlisto, elŝuti detalajn informojn pri fama video (kio estas videbla sur la retpaĝo de la video), akiri la adreson de la video-ikono kaj ankaŭ ricevi la adreson de la video. rivereto.

La kodo por ŝargi la ludlisto estas iom maloportuna, do mi ne donos ĝin ĉi tie, por interesatoj, rigardu la fontkodon, ĝi estas esence klaso. ContentLoader.

Ni vidu kiel akiri la adreson de videofluo de la adreso de la publika videopaĝo kaj ludi ĝin en la ludanto.

Konekti la bibliotekon al
app/build.gradle

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

Estas kurioze, ke post ĉi tio vi ankoraŭ ne povos uzi ĝin, ĉar... ekzemploj plendos pri la mankanta Downloader-klaso. Ĝi povas esti kopiita al la projekto de la aŭtomatigita testdosierujo NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funkcias por versio 0.17.4 (ŝajnas, ke ĉi tiu parto estis refarita en pli nova versio de la biblioteko, sed ni ankoraŭ devas kontroli).

Akiru la adreson de la videofluo per la adreso de la videopaĝo en la jutuba retejo:

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

La videoadreso ytVidUrl povas esti la publika adreso de la paĝo de iu ajn video en la jutuba retejo, ekzemple https://www.youtube.com/watch?v=pd2RlatmNRk

La ludanto estos eksoludanto de Guglo mem. Ĉi tio ne estas retejo envolvaĵo super Jutubo, sed vera enigita ludilo por ludi ajnajn filmetojn, sufiĉe fleksebla kaj agordebla. Ĝi ankaŭ povas ludi videofluojn de Jutubo se vi provizas ĝin per la ĝusta adreso. Ni ĵus ricevis la fluo-adreson, do ni vidu kiel sendi ĝin al la ludanto.

Konektu la bibliotekon al la projekto app/build.gradle:

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

Ni ne konsideros ĉiujn nuancojn meti la ludan komponanton sur la aplika ekrano (vi povas rigardi la ekzemplojn en la retejo de la projekto aŭ en la kodo), ni nur rigardos kiel komenci ludi videon de Jutubo en la ludanto ĉe la adreso ricevita supre:

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

Konataj Temoj

  • Ne ludos filmetojn kun aĝaj limigoj, kiuj postulas ensaluti al via konto de Google/YouTube

ekzemple: Ilya Muromets, Mosfilm Cinema Concern, Ruslan kaj Lyudmila filmo 1, Mosfilm Film Concern

konsilo: aldonu tiajn filmetojn al la nigra listo aŭ petu al la aŭtoro de la video forigi la restrikton, kiu estis erare fiksita.

  • Kelkaj elsendaj filmetoj, por kiuj la servo redonas nullongon, ne ludas (por tiaj videoj, la daŭro en la listoj kaj galerio estas markita kiel "[dur undef]").

ekzemple: Atendu ĝin! Ĉiuj Temoj de Soyuzmultfilm HD (Brikaturaj por infanoj), Bildstrioj de Soyuzmultfilm-studio, Plej bonaj bildstrioj Soyuzmultfilm, Bildstrioj de Soyuzmultfilm-studio

konsilo: aldonu tiajn filmetojn al la nigra listo.

  • Filmetoj kiuj estas nur haveblaj per rektaj ligiloj eble ne estas inkluditaj en la loka ludlisto, eĉ se vi elŝutas ĉiujn videojn de la uzanto

ekzemple: Taming of Fire Epizodo 1, Mosfilm Cinema Concern

  • Se vi renkontas publikan filmeton, kiu ne postulas ensaluton, ludas en la retumilo, sed ne ludas en la ludanto, sendu cimraporton (estas tute eble, ke la problemo jam estis riparita en la nova versio). NewPipeExtractor kaj vi nur bezonos ĝisdatigi la aron kun ĉi tiu versio, ekzemple).

  • La interfaco povas malrapidiĝi se la interreto estas malrapida (sed ne malŝaltita)

En la fino

Mia filo translokiĝis de tablojdo al Samsung inteligenta televidilo, kiu ne povas ruli Android-aplikojn. Tial la plej bona gepatra kontrolo ankoraŭ estas persona.

Sed la aplikaĵo montriĝis sufiĉe oportuna por ke mi mem ekuzi ĝin. La unua impreso de la fruaj laborversioj estis ke mi estis en alia mondo. La tuta enhavo estas elŝutita de Jutubo, sed ĉi tio ne plu estas Jutubo, sed io alia, sekura kaj kontrolita, kvazaŭ vi elprenis centpiedon el via okulo kaj metis ĝin en vitran kruĉon. Kaj ĉio temas pri la rekomendoj.

fonto: www.habr.com

Aldoni komenton