Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Bubuka pondok: Abdi hoyong ngobrol ngeunaan pamuter online YouTube pikeun Android sareng daptar puter lokal, saluran sareng saran.

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

bubuka dimekarkeun:
Sababaraha waktos ka tukang kuring mendakan masalah anu sami sareng panulis aplikasi anu saé Daptar Whitelist Saluran, sarta ditangtukeun pikeun sorangan persis sikep sarua arah eta: Abdi hoyong tiasa masihan anak abdi tablet atawa smartphone kalawan kartun ti jaman ka jaman, tapi Kami teu pisan senang jeung dimana, sanggeus 2-3 clicks, daptar. tina rekomendasi dina aplikasi standar - klien YouTube - nyokot anak.

Hanjakalna, saatos masang aplikasi Channel Whitelist, hiji deui anu langkung prosaic, tapi masih aya cacad fatal - NIH I (sareng, anu paling penting, putra kuring) mendakan antarmukana henteu cocog pisan, khususna saatos kabiasaan ngagunakeun pamuter YouTube Kids.

Sacara umum, sanggeus sababaraha waktu kuring siap nyieun palaksanaan sorangan. Saatos sababaraha waktos, janten kamungkinan nempatkeun tag dina sékrési munggaran.

fitur konci:

  • Tambihkeun saluran sareng daptar puter karesep anjeun - aranjeunna bakal disimpen sareng diindeks dina pangkalan data lokal
  • Dina daptar puter tambahan, pareumkeun pidéo anu henteu diperyogikeun upami anjeun henteu peryogi
  • Daptar rekomendasi dihasilkeun sacara acak ngan tina saluran sareng daptar puter anu ditambahkeun kana aplikasi

Open source, lisénsi GPLv3: https://github.com/sadr0b0t/yashlang/

Di handap ieu tinjauan fitur utama dina leuwih jéntré, ditambah sababaraha rinci teknis ngeunaan cara muterkeun video YouTube dina aplikasi Android Anjeun tanpa ngagunakeun API Google jeung wrappers wéb.

Dina layar utama jeung dina layar pamuter: saran acak tina saluran non-acak

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pilarian instan dina database lokal

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) => Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Tambahkeun saluran atawa daptar puter anyar

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pilarian dumasar ngaran online atawa selapkeun alamat dipikawanoh. Daptar pidéo saluran atanapi daptar puter disimpen kana pangkalan data lokal; ikon henteu di-cache.

Daptar puter dinamis - muter hasil teangan

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) => Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Dina rekomendasi video bakal aya ngan video nu nyugemakeun pamundut pilarian.

Nya kitu, upami anjeun muka pidéo tina setélan daptar puter, ngan ukur pidéo tina daptar puter anu sami anu bakal muncul dina daptar rekomendasi.

Daptar puter sareng saluran tiasa dipareuman samentawis sareng dihurungkeun deui

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Punten perhatikeun: pidio tina daptar puter anu ditumpurkeun ogé bakal ngaleungit tina hasil pamilarian, ningali sajarah sareng tina daptar paporit. Tapi tong hariwang, aranjeunna bakal muncul deui saatos daptar puter dihurungkeun deui.

Tambahkeun video ka blacklist

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pidéo anu diblokir moal ditampilkeun dina saran, dina hasil pamilarian, sareng bakal ngaleungit tina daptar paporit sareng tina sajarah tontonan. Video bakal tetep katingali dina setélan daptar puter.

Tingali daptar hideung sareng aktipkeun deui barang anu diblokir ku kasalahan:
Setelan > menu lulugu > Daptar Hideung

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Pidéo paporit sareng sajarah tontonan

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Video paporit dina layar pamuter ditandaan ku tanda bintang di pojok katuhu luhur.

Ménu kontéks dina judul layar sareng klik-panjang dina galeri sareng daptar

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Salin nami atanapi alamat pidéo atanapi daptar puter dina layar tempoan atanapi dina daptar naon waé.

Mimiti gancang - tambahkeun saluran sareng daptar puter anu disarankeun

Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?) => Pupusna Koshchei aya dina daptar rekomendasi (naha tiasa ngajantenkeun YouTube nyaman sareng aman?)

Aplikasi bakal langsung katingali sapertos screenshot di luhur.

Saluran sareng daptar puter anu teu diperyogikeun tiasa dipareuman atanapi dihapus dina setélan.

setting

Halaman proyék: https://github.com/sadr0b0t/yashlang/
dina Basa Inggris: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
kaluaran: https://github.com/sadr0b0t/yashlang/releases

Émut yén ngalih antara vérsi anu béda tina sumber anu béda dina alat anu sami moal jalan kusabab tanda tangan anu béda tina file apk; sateuacan masang versi tina sumber énggal, anjeun kedah ngahapus versi anu dipasang sareng datana - cache daptar puter sareng sajarah browsing (atanapi terang kumaha cara nransper data).

Detil téknis

Henteu ngabutuhkeun akun Google/YouTube, anjeun ngan ukur peryogi Internét, nganggo perpustakaan ieu:

Open source, lisénsi GPLv3 gratis.

patarosan: Éta umumna légal kerok jaba tanpa idin (atawa kalawan larangan eksplisit) ti pangarang? Google ngahapus aplikasi tina Google Play, nu teu make API maranéhanana, tapi parse situs maranéhanana, sabab aranjeunna ngalanggar perjangjian pamaké maranéhanana.
walon: tangtu, éta légal, éta nepi ka anjeun nu alat ngagunakeun maca informasi sadia masarakat awam. Saterusna: A pangadilan AS geus sagemblengna legalized ramatloka scraping sarta ngalarang gangguan teknis jeung eta., tapi Gul mungkin gaduh pendapat anu béda; sacara pribadi, kuring henteu acan gaduh kahayang pikeun angkat ka pengadilan Amérika pikeun ngayakinkeun aranjeunna.

Sababaraha kode

taman pustaka NewPipeExtractor - proyék rojongan pamuter Newpipe, ngamungkinkeun anjeun pikeun ngaunduh daptar pidéo pikeun saluran atanapi daptar puter anu khusus, unduh inpormasi lengkep ngeunaan pidéo anu kasohor (naon anu katingali dina halaman wéb pidéo), kéngingkeun alamat ikon pidéo, sareng ogé kéngingkeun alamat pidéo. aliran.

Kode pikeun ngamuat daptar puter rada pajeujeut, janten kuring moal masihan ka dieu, pikeun anu kabetot, tingali kode sumberna, dasarna éta kelas. ContentLoader.

Hayu urang tingali kumaha kéngingkeun alamat aliran pidéo tina alamat halaman pidéo umum sareng maénkeun éta dina pamuter.

Sambungkeun perpustakaan ka
app/build.gradle

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

Panasaran yén saatos ieu anjeun masih moal tiasa dianggo, sabab ... conto bakal ngawadul ngeunaan kelas Downloader leungit. Éta tiasa disalin kana proyék tina diréktori tés otomatis NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - lumaku pikeun versi 0.17.4 (sigana bagian ieu redone dina versi anyar perpustakaan, tapi urang masih kudu pariksa).

Meunangkeun alamat aliran video ku alamat kaca video dina ramatloka 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;
    }

Alamat pidéo ytVidUrl tiasa janten alamat umum halaman pidéo naon waé dina situs wéb YouTube, contona. https://www.youtube.com/watch?v=pd2RlatmNRk

Pamaén bakal exoplayer ti Google sorangan. Ieu sanés bungkus wéb dina YouTube, tapi pamuter anu dipasang pikeun maén pidéo naon waé, cukup fleksibel sareng tiasa disaluyukeun. Éta ogé tiasa maénkeun aliran pidéo tina YouTube upami anjeun nyayogikeun alamat anu leres. Kami nembé nampi alamat aliran, janten hayu urang tingali kumaha ngirimkeunana ka pamuter.

Sambungkeun perpustakaan ka proyék app/build.gradle:

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

Kami moal nganggap sagala nuansa nempatkeun komponén pamuter dina layar aplikasi (anjeun tiasa ningali conto dina situs wéb proyék atanapi dina kode), urang ngan bakal ningali kumaha ngamimitian maén pidéo ti YouTube dina pamuter di alamat anu ditampi di luhur:

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

Masalah Anu Dipikawanoh

  • Moal muterkeun video kalawan larangan umur nu merlukeun login ka akun Google/YouTube Anjeun

contona Ilya Muromets, Mosfilm Bioskop prihatin, Ruslan jeung Lyudmila pilem 1, Mosfilm Pilem prihatin

naséhat: tambahkeun video sapertos ka blacklist atawa nanya ka panulis video pikeun miceun larangan nu diatur ku kasalahan.

  • Sababaraha pidéo siaran anu jasana mulihkeun panjangna nol moal diputer (pikeun pidéo sapertos kitu, durasi dina daptar sareng galeri ditandaan salaku "[dur undef]")

contona Antosan! Sadaya Isu Soyuzmultfilm HD (Kartun pikeun Barudak), Kartun ti studio Soyuzmultfilm, Top kartun Soyuzmultfilm, Kartun ti studio Soyuzmultfilm

piwuruk: nambahkeun video sapertos ka blacklist.

  • Video nu ngan sadia ngaliwatan tumbu langsung bisa jadi teu kaasup dina daptar puter lokal, sanajan Anjeun ngundeur sadaya video pamaké.

contona Taming of Fire Episode 1, Mosfilm Bioskop Prihatin

  • Upami anjeun mendakan pidéo umum anu henteu meryogikeun login, maén dina browser, tapi henteu maén dina pamuter, kirimkeun laporan bug (mungkin waé masalahna parantos dibenerkeun dina versi énggal. NewPipeExtractor sareng anjeun ngan ukur kedah ngapdet rakitan sareng versi ieu, contona).

  • Antarbeungeutna tiasa ngalambatkeun upami Internét lambat (tapi henteu dipareuman)

Dina ahir

Anak kuring pindah tina tablet ka TV pinter Samsung, anu henteu tiasa ngajalankeun aplikasi Android. Ku alatan éta, kontrol parental pangalusna masih pribadi.

Tapi aplikasina tétéla cukup merenah pikeun kuring mimiti ngagunakeun éta sorangan. Kesan munggaran ti versi kerja awal nyaéta yén kuring aya di dunya sanés. Sadaya eusi diunduh tina YouTube, tapi ieu sanés YouTube deui, tapi anu sanés, aman sareng dikontrol, saolah-olah anjeun nyandak lipan tina panon anjeun sareng nempatkeun kana toples kaca. Sareng éta sadayana ngeunaan rekomendasi.

sumber: www.habr.com

Tambahkeun komentar