Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pambuka cendhak: Aku pengin ngomong babagan pamuter online YouTube kanggo Android kanthi dhaptar lagu lokal, saluran lan rekomendasi.

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pambuka sing ditambahi:
Sawetara wektu kepungkur aku nemoni masalah sing padha karo penulis aplikasi sing apik banget Daftar Putih Saluran, lan nemtokake dhewe persis sikap sing padha menyang: Aku pengin bisa menehi anakku tablet utawa smartphone karo kartun saka wektu kanggo wektu, nanging aku ora seneng karo ngendi, sawise 2-3 klik, dhaftar saka Rekomendasi ing aplikasi standar - klien YouTube - njupuk anak.

Sayange, sawise nginstal aplikasi Channel Whitelist, cacat liyane sing luwih prosaic, nanging isih fatal ditemokake - NIH I (lan, sing paling penting, anakku) nemokake antarmuka sing ora trep, utamane sawise kebiasaan nggunakake pamuter YouTube Kids.

Umumé, sawise sawetara wektu aku siap kanggo nggawe implementasine dhewe. Sawise sawetara wektu, bisa diwenehi tag ing release pisanan.

Fitur utama:

  • Tambah saluran lan dhaptar lagu favorit - bakal disimpen lan diindeks ing database lokal
  • Ing dhaptar lagu sing ditambahake, mateni video sing ora perlu yen sampeyan ora butuh
  • Dhaptar rekomendasi digawe kanthi acak mung saka saluran lan dhaptar lagu sing ditambahake menyang aplikasi

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

Ing ngisor iki ringkesan fitur utama kanthi luwih rinci, ditambah sawetara rincian teknis babagan cara muter video YouTube ing aplikasi Android tanpa nggunakake API Google lan bungkus web.

Ing layar utama lan ing layar pamuter: Rekomendasi acak saka saluran non-acak

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Panelusuran cepet ing database lokal

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) => Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Tambah saluran utawa dhaptar lagu anyar

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Telusuri kanthi jeneng online utawa lebokake alamat sing dikenal. Dhaptar video saluran utawa dhaptar lagu disimpen ing basis data lokal; lambang ora disimpen ing cache.

Dhaptar lagu dinamis - muter asil panelusuran

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) => Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Ing rekomendasi video mung bakal ana video sing nyukupi pitakon telusuran.

Kajaba iku, yen sampeyan mbukak video saka setelan dhaptar lagu, mung video saka dhaptar lagu sing padha bakal katon ing dhaptar rekomendasi.

Dhaptar lagu lan saluran bisa dipateni lan diuripake maneh

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Wigati dicathet: video saka dhaptar lagu sing dipatèni uga bakal ilang saka asil panelusuran, riwayat tampilan lan saka dhaptar favorit. Nanging aja kuwatir, dheweke bakal katon maneh sawise dhaptar lagu diuripake maneh.

Tambah video menyang dhaptar ireng

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Video sing diblokir ora bakal ditampilake ing rekomendasi, ing asil panelusuran, lan bakal ilang saka dhaptar favorit lan saka riwayat tampilan. Video isih bakal katon ing setelan dhaptar lagu.

Deleng dhaptar ireng lan aktifake maneh item sing diblokir kanthi salah:
Setelan > menu header > Daftar ireng

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Video favorit lan riwayat tampilan

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Video favorit ing layar pamuter ditandhani karo tanda bintang ing pojok tengen ndhuwur.

Menu konteks ing judhul layar lan klik dawa ing galeri lan dhaptar

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Salin jeneng utawa alamat video utawa dhaptar lagu ing layar tampilan utawa ing dhaptar apa wae.

Mulai cepet - tambah saluran lan dhaptar lagu sing disaranake

Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?) => Pati Koshchei ana ing dhaptar rekomendasi (apa bisa nggawe YouTube nyaman lan aman?)

Aplikasi bakal langsung katon kaya gambar ing ndhuwur.

Saluran lan dhaptar lagu sing ora dibutuhake bisa dipateni utawa dibusak ing setelan kasebut.

Instalasi

kaca proyek: https://github.com/sadr0b0t/yashlang/
ing basa Inggris: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
rilis: https://github.com/sadr0b0t/yashlang/releases

Elinga yen ngalih ing antarane versi sing beda-beda saka sumber sing beda ing piranti sing padha ora bakal bisa digunakake amarga beda teken file apk; sadurunge nginstal versi saka sumber anyar, sampeyan kudu mbusak versi sing diinstal bebarengan karo data - cache dhaptar lagu lan riwayat telusuran (utawa ngerti carane nransfer data).

Rincian teknis

Ora mbutuhake akun Google/YouTube, sampeyan mung butuh Internet, nggunakake perpustakaan ing ngisor iki:

Open source, lisensi GPLv3 gratis.

pitakonan: Apa umume sah kanggo ngikis situs web tanpa ijin (utawa kanthi larangan eksplisit) saka penulis? Google mbusak app saka Google Play, sing ora nggunakake API, nanging parsing situs, amarga padha nglanggar persetujuan pangguna.
jawaban: mesthi, iku legal, iku nganti sampeyan alat sing digunakake kanggo maca informasi kasedhiya umum. Salajengipun: Pengadilan AS wis rampung legalisasi scraping situs web lan nglarang campur tangan teknis., nanging Gul bisa uga duwe pendapat sing beda, kanthi pribadi, aku durung duwe kepinginan menyang pengadilan Amerika kanggo ngyakinake dheweke.

Sawetara kode

perpustakaan NewPipeExtractor - project support pamuter Pipa Anyar, ngidini sampeyan ndownload dhaptar video kanggo saluran utawa dhaptar lagu sing ditemtokake, ndownload informasi rinci babagan video sing misuwur (apa sing katon ing kaca web video), entuk alamat lambang video, lan uga entuk alamat video kasebut. stream.

Kode kanggo ngemot dhaptar lagu rada rumit, mula aku ora bakal menehi kene, kanggo sing kasengsem, deleng kode sumber kasebut, dhasar iki kelas. ContentLoader.

Ayo ndeleng carane njaluk alamat stream video saka alamat kaca video umum lan muter ing pamuter.

Sambungake perpustakaan menyang
app/build.gradle

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

Sampeyan penasaran yen sawise iki sampeyan isih ora bisa nggunakake, amarga ... conto bakal sambat babagan kelas Downloader ilang. Bisa disalin menyang proyek saka direktori tes otomatis NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - dianggo kanggo versi 0.17.4 ( misale jek sing bagean iki redone ing versi anyar saka perpustakaan, nanging kita isih kudu mriksa).

Entuk alamat stream video kanthi alamat kaca video ing situs web 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 video ytVidUrl bisa dadi alamat umum kaca video apa wae ing situs web YouTube, contone. https://www.youtube.com/watch?v=pd2RlatmNRk

Pamuter bakal exoplayer saka Google dhewe. Iki dudu pambungkus web liwat YouTube, nanging pamuter sing dipasang kanthi nyata kanggo muter video apa wae, cukup fleksibel lan bisa disesuaikan. Uga bisa muter video stream saka YouTube yen sampeyan nyedhiyani karo alamat sing bener. Kita mung nampa alamat stream, dadi ayo kang ndeleng carane ngirim menyang pamuter.

Sambungake perpustakaan menyang proyek kasebut app/build.gradle:

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

Kita ora bakal nimbang kabeh nuansa nempatake komponen pamuter ing layar aplikasi (sampeyan bisa ndeleng conto ing situs web project utawa ing kode), kita mung bakal katon ing carane miwiti muter video saka YouTube ing pamuter ing alamat sing ditampa ing ndhuwur:

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 sing Dikenal

  • Ora bakal muter video kanthi watesan umur sing mbutuhake login menyang akun Google/YouTube

contone: Ilya Muromets, Mosfilm Cinema Concern, Ruslan lan Lyudmila film 1, Mosfilm Film Concern

saran: nambah video kuwi kanggo blacklist utawa takon penulis video kanggo mbusak watesan sing disetel dening kesalahan.

  • Sawetara video siaran sing layanan ngasilake nol dawa ora bakal diputer (kanggo video kasebut, durasi ing dhaptar lan galeri ditandhani minangka "[dur undef]")

contone: Ngenteni! Kabeh Masalah Soyuzmultfilm HD (Kartun kanggo bocah-bocah), Kartun saka studio Soyuzmultfilm, Top kartun Soyuzmultfilm, Kartun saka studio Soyuzmultfilm

saran: nambah video kuwi kanggo blacklist.

  • Video sing mung kasedhiya liwat pranala langsung bisa uga ora kalebu ing dhaptar lagu lokal, sanajan sampeyan ndownload kabeh video pangguna.

contone: Taming of Fire Episode 1, Mosfilm Cinema Concern

  • Yen sampeyan nemokake video umum sing ora mbutuhake login, main ing browser, nanging ora muter ing pamuter, kirim laporan bug (bisa uga masalah kasebut wis diatasi ing versi anyar. NewPipeExtractor lan sampeyan mung kudu nganyari rakitan nganggo versi iki, contone).

  • Antarmuka bisa mudhun alon yen Internet alon (nanging ora dipateni)

Ing pungkasan

Anakku pindhah saka tablet menyang TV cerdas Samsung, sing ora bisa mbukak aplikasi Android. Mulane, kontrol parental paling apik isih pribadi.

Nanging aplikasi kasebut cukup trep kanggo miwiti nggunakake dhewe. Kesan pisanan saka versi kerja awal yaiku aku ana ing jagad liyane. Kabeh isi diundhuh saka YouTube, nanging iki ora YouTube maneh, nanging mergo, aman lan kontrol, kaya sampeyan njupuk lipan metu saka mripat lan sijine iku ing jar kaca. Lan kabeh babagan rekomendasi.

Source: www.habr.com

Add a comment