Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang panimula ay maikli: Gusto kong pag-usapan ang YouTube online player para sa Android na may mga lokal na playlist, channel at rekomendasyon.

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Pinalawak na pagpapakilala:
Ilang oras na ang nakalipas nakatagpo ako ng eksaktong parehong problema bilang ang may-akda ng isang kahanga-hangang application Whitelist ng Channel, at natukoy para sa aking sarili ang eksaktong parehong saloobin tungkol dito: Gusto kong mabigyan ang aking anak ng isang tablet o smartphone na may mga cartoon paminsan-minsan, ngunit hindi ako nasisiyahan kung saan, pagkatapos ng 2-3 pag-click, ang listahan ng mga rekomendasyon sa karaniwang mga application - mga kliyente ng YouTube - kumukuha ng bata.

Sa kasamaang palad, pagkatapos i-install ang Channel Whitelist na application, isa pang mas prosaic, ngunit nakamamatay na depekto pa rin ang natuklasan - NIH I (at, higit sa lahat, ang aking anak) ay natagpuan na ang interface nito ay hindi masyadong maginhawa, lalo na pagkatapos ng ugali ng paggamit ng YouTube Kids player.

Sa pangkalahatan, pagkaraan ng ilang oras ay handa na akong gumawa ng sarili kong pagpapatupad. Pagkaraan ng ilang oras, naging posible na maglagay ng tag sa unang release.

Mga pangunahing tampok:

  • Idagdag ang iyong mga paboritong channel at playlist - mase-save at mai-index ang mga ito sa lokal na database
  • Sa mga idinagdag na playlist, i-off ang mga hindi kinakailangang video kung hindi mo kailangan ang mga ito
  • Ang listahan ng mga rekomendasyon ay random na nabuo lamang mula sa mga channel at playlist na idinagdag sa application

Open source, lisensya ng GPLv3: https://github.com/sadr0b0t/yashlang/

Nasa ibaba ang isang pangkalahatang-ideya ng mga pangunahing tampok nang mas detalyado, kasama ang ilang teknikal na detalye sa kung paano mag-play ng mga video sa YouTube sa iyong Android application nang hindi gumagamit ng Google API at mga web wrapper.

Sa pangunahing screen at sa screen ng player: mga random na rekomendasyon mula sa mga hindi random na channel

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Instant na paghahanap sa lokal na database

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) => Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Magdagdag ng bagong channel o playlist

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Maghanap ayon sa pangalan online o maglagay ng kilalang address. Ang listahan ng mga video ng isang channel o playlist ay naka-save sa lokal na database; ang mga icon ay hindi naka-cache.

Dynamic na playlist - i-play ang mga resulta ng paghahanap

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) => Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Sa mga rekomendasyon sa video magkakaroon lamang ng mga video na nakakatugon sa query sa paghahanap.

Katulad nito, kung magbubukas ka ng video mula sa mga setting ng playlist, ang mga video lang mula sa parehong playlist ang lalabas sa listahan ng mga rekomendasyon.

Maaaring pansamantalang i-off at i-on muli ang mga playlist at channel

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Pakitandaan: ang mga video mula sa isang hindi pinaganang playlist ay mawawala rin sa mga resulta ng paghahanap, kasaysayan ng panonood at mula sa listahan ng mga paborito. Ngunit huwag mag-alala, lilitaw silang muli doon pagkatapos na muling i-on ang playlist.

Magdagdag ng video sa blacklist

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang isang naka-block na video ay hindi ipapakita sa mga rekomendasyon, sa mga resulta ng paghahanap, at mawawala sa listahan ng mga paborito at mula sa kasaysayan ng panonood. Makikita pa rin ang video sa mga setting ng playlist.

Tingnan ang blacklist at muling paganahin ang mga item na na-block nang hindi sinasadya:
Mga Setting > menu ng header > Blacklist

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Mga paboritong video at kasaysayan ng panonood

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang mga paboritong video sa screen ng player ay minarkahan ng asterisk sa kanang sulok sa itaas.

Mga menu ng konteksto sa pamagat ng screen at pag-click nang matagal sa mga gallery at listahan

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Kopyahin ang pangalan o address ng isang video o playlist sa screen ng panonood o sa anumang listahan.

Mabilis na pagsisimula - magdagdag ng mga inirerekomendang channel at playlist

Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?) => Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)

Ang application ay magiging kamukha kaagad ng mga screenshot sa itaas.

Ang mga hindi kinakailangang channel at playlist ay maaaring i-off o tanggalin sa mga setting.

Instalasyon

Pahina ng proyekto: https://github.com/sadr0b0t/yashlang/
sa Ingles: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
mga release: https://github.com/sadr0b0t/yashlang/releases

Tandaan na ang paglipat sa pagitan ng iba't ibang mga bersyon mula sa iba't ibang mga mapagkukunan sa parehong device ay hindi gagana dahil sa iba't ibang mga lagda ng apk file; bago i-install ang bersyon mula sa isang bagong pinagmulan, kailangan mo munang tanggalin ang naka-install na bersyon kasama ang data - ang cache ng playlist at kasaysayan ng pagba-browse (o alamin kung paano maglipat ng data).

Mga detalyeng teknikal

Hindi nangangailangan ng Google/YouTube account, kailangan mo lang ng Internet, ginagamit ang mga sumusunod na library:

Open source, libreng lisensya ng GPLv3.

tanong: Sa pangkalahatan ba ay legal na mag-scrape ng mga website nang walang pahintulot (o may tahasang pagbabawal) mula sa mga may-akda? Inaalis ng Google ang mga app sa Google Play, na hindi gumagamit ng kanilang API, ngunit nag-parse ng kanilang mga site, dahil nilalabag nila ang kanilang kasunduan sa gumagamit.
sagot: siyempre, ito ay legal, nasa iyo kung aling tool ang gagamitin upang basahin ang impormasyong magagamit sa publiko. At saka: Ganap na ginawang legal ng isang korte sa US ang pag-scrape ng website at ipinagbabawal ang teknikal na panghihimasok dito., ngunit maaaring may ibang opinyon si Gul; sa personal, wala pa akong pagnanais na pumunta sa korte ng Amerika para kumbinsihin sila.

Ilang code

Aklatan BagongPipeExtractor - proyekto ng suporta sa manlalaro Newpipe, ay nagbibigay-daan sa iyong mag-download ng listahan ng mga video para sa isang tinukoy na channel o playlist, mag-download ng detalyadong impormasyon tungkol sa isang sikat na video (kung ano ang nakikita sa web page ng video), kunin ang address ng icon ng video, at makuha din ang address ng video stream.

Ang code para sa paglo-load ng playlist ay medyo mahirap, kaya hindi ko ito ibibigay dito, para sa mga interesado, tingnan ang source code, ito ay karaniwang isang klase ContentLoader.

Tingnan natin kung paano kunin ang address ng isang video stream mula sa address ng pampublikong pahina ng video at i-play ito sa player.

Ikonekta ang library sa
app/build.gradle

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

Nakakapagtaka na pagkatapos nito ay hindi mo pa rin magagamit ito, dahil... ang mga halimbawa ay magrereklamo tungkol sa nawawalang klase ng Downloader. Maaari itong kopyahin sa proyekto mula sa direktoryo ng mga awtomatikong pagsubok NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - gumagana para sa bersyon 0.17.4 (tila ang bahaging ito ay muling ginawa sa isang mas bagong bersyon ng library, ngunit kailangan pa rin nating suriin).

Kunin ang address ng video stream sa pamamagitan ng address ng page ng video sa website ng 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 video address na ytVidUrl ay maaaring ang pampublikong address ng pahina ng anumang video sa website ng YouTube, halimbawa https://www.youtube.com/watch?v=pd2RlatmNRk

Gagawin ng manlalaro exoplayer mula mismo sa Google. Ito ay hindi isang web wrapper sa YouTube, ngunit isang tunay na naka-embed na player para sa paglalaro ng anumang mga video, medyo flexible at nako-customize. Maaari rin itong mag-play ng mga video stream mula sa YouTube kung bibigyan mo ito ng tamang address. Kakatanggap lang namin ng stream address, kaya tingnan natin kung paano ipadala ito sa player.

Ikonekta 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'
...
}

Hindi namin isasaalang-alang ang lahat ng mga nuances ng paglalagay ng bahagi ng player sa screen ng application (maaari mong tingnan ang mga halimbawa sa website ng proyekto o sa code), titingnan lamang namin kung paano magsimulang mag-play ng isang video mula sa YouTube sa player sa ang address na natanggap sa itaas:

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

Mga Kilalang Isyu

  • Hindi magpe-play ng mga video na may mga paghihigpit sa edad na nangangailangan ng pag-login sa iyong Google/YouTube account

halimbawa: Ilya Muromets, Mosfilm Cinema Concern, Ruslan at Lyudmila film 1, Mosfilm Film Concern

payo: magdagdag ng mga ganitong video sa blacklist o hilingin sa may-akda ng video na alisin ang paghihigpit na hindi sinasadyang itinakda.

  • Ang ilang mga broadcast na video kung saan ang serbisyo ay nagbabalik ng zero na haba ay hindi magpe-play (para sa mga naturang video, ang tagal sa mga listahan at gallery ay minarkahan bilang "[dur undef]")

halimbawa: Hintayin mo! Lahat ng Isyu ng Soyuzmultfilm HD (Mga Cartoon para sa mga bata), Mga Cartoon mula sa Soyuzmultfilm studio, Mga nangungunang cartoon na Soyuzmultfilm, Mga Cartoon mula sa Soyuzmultfilm studio

payo: magdagdag ng mga ganitong video sa blacklist.

  • Maaaring hindi maisama sa lokal na playlist ang mga video na available lang sa pamamagitan ng mga direktang link, kahit na i-download mo ang lahat ng video ng user

halimbawa: Taming of Fire Episode 1, Pag-aalala sa Mosfilm Cinema

  • Kung nakatagpo ka ng isang pampublikong video na hindi nangangailangan ng pag-login, nagpe-play sa browser, ngunit hindi nagpe-play sa player, magpadala ng ulat ng bug (posible na ang problema ay naayos na sa bagong bersyon BagongPipeExtractor at kakailanganin mo lamang na i-update ang pagpupulong gamit ang bersyong ito, halimbawa).

  • Maaaring bumagal ang interface kung mabagal ang Internet (ngunit hindi naka-off)

Bilang isang resulta,

Ang aking anak na lalaki ay lumipat mula sa isang tablet patungo sa isang Samsung smart TV, na hindi maaaring magpatakbo ng mga Android application. Samakatuwid, ang pinakamahusay na kontrol ng magulang ay personal pa rin.

Ngunit ang application ay naging sapat na maginhawa para sa akin upang simulan ang paggamit nito sa aking sarili. Ang unang impresyon mula sa mga naunang gumaganang bersyon ay nasa ibang mundo ako. Ang lahat ng nilalaman ay dina-download mula sa YouTube, ngunit ito ay hindi na YouTube, ngunit iba pa, ligtas at kontrolado, na parang kinuha mo ang isang alupihan sa iyong mata at inilagay ito sa isang garapon. At lahat ito ay tungkol sa mga rekomendasyon.

Pinagmulan: www.habr.com

Magdagdag ng komento