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

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

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

Introduksi lengkap:
Sawetara wektu kepungkur aku nemoni masalah sing padha karo penulis aplikasi sing apik iki Daftar Putih Saluran, lan aku wis ditetepake dhewe persis sikap padha menyang: Aku pengin bisa kanggo menehi anak tablet utawa smartphone karo kartun saka wektu kanggo wektu, nanging aku rampung wareg karo ngendi dhaftar Rekomendasi ing aplikasi standar - klien YouTube - ndadékaké anak sawise 2-3 klik.

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

Umumé, sawise sawetara wektu aku matured kanggo nggawe implementasine dhewe. Sawise sawetara wektu dadi bisa kanggo nyelehake tag ing release pisanan.

Fitur utama:

  • Tambah saluran lan dhaptar lagu favorit - bakal disimpen lan diindeks ing database lokal
  • Pateni video ekstra ing dhaptar lagu sing ditambahake yen sampeyan ora mbutuhake
  • Dhaptar rekomendasi digawe kanthi acak mung saka saluran lan dhaptar lagu sing ditambahake menyang aplikasi

Kode sumber mbukak sumber, lisensi GPLv3: https://github.com/sadr0b0t/yashlang/

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

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

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

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

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

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

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

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

Panelusuran cepet ing database lokal

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

Tambah saluran utawa dhaptar lagu anyar

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

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

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

Dhaptar Lagu Dinamis - Asil Panelusuran Puter

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

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

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

Rekomendasi ing video kasebut mung bakal kalebu video sing cocog karo pitakon telusuran.

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

Dhaptar lagu lan saluran bisa dipateni lan diuripake maneh

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

Wigati dimangerteni: video saka dhaptar lagu sing dipateni uga bakal ilang saka asil panelusuran, riwayat tampilan, lan dhaptar favorit sampeyan. Nanging aja padha sumelang, padha bakal katon maneh sanalika sawise dhaptar lagu diaktifake maneh.

Tambah video menyang dhaptar ireng

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

Video sing diblokir ora bakal ditampilake ing rekomendasi, asil telusuran, 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 ora sengaja:
Setelan > menu header > Daftar ireng

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

Video favorit lan riwayat tampilan

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

Video favorit ing layar pamuter ditandhani karo lintang ing pojok tengen ndhuwur.

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

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

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

Miwiti Cepet - Tambah Saluran lan Dhaptar Lagu sing Disaranake

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

Aplikasi bakal langsung katon kaya gambar ing ndhuwur.

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

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

Wigati dimangerteni manawa ngalih ing antarane versi sing beda saka sumber sing beda-beda ing piranti siji ora bakal bisa digunakake amarga teken beda file apk. Sadurunge nginstal versi saka sumber anyar, sampeyan kudu mbusak versi sing wis diinstal bebarengan karo data - cache dhaptar lagu lan riwayat tampilan (utawa ngerti carane nransfer data iki).

Rincian teknis

Ora mbutuhake akun Google/YouTube, mung Internet sing dibutuhake, nggunakake perpustakaan:

Open source, lisensi gratis GPLv3.

pitakonan: Apa malah legal kanggo parsing situs web tanpa ijin (utawa karo larangan eksplisit) saka penulis? Google mbusak app saka Google Play, sing ora nggunakake API, nanging ngurai situs, amarga nglanggar persetujuan pangguna.
jawaban: mesthi iku legal, iku bisnis apa alat kanggo nggunakake kanggo maca informasi kasedhiya umum. Kajaba iku: Pengadilan AS kanthi legalizes scraping situs web lan nglarang gangguan teknis, nanging Gul uga duwe pendapat beda, wong aku ora duwe kepinginan kanggo pindhah menyang pengadilan Amérika kanggo gawe uwong yakin wong liya.

Sithik kode

perpustakaan NewPipeExtractor - proyek pemain tambahan Pipa Anyar, ngidini sampeyan ndownload dhaptar video kanggo saluran utawa dhaptar lagu sing ditemtokake, ndownload informasi rinci babagan video sing dikenal (apa sing katon ing kaca web video), entuk alamat lambang video, lan uga entuk alamat stream video.

Kode loading playlist rada ribet, dadi ora tak wenehi neng kene, nek minat coba didelok source codene, pokoke 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"
...
}

Iku penasaran yen sawise iki isih ora bisa digunakake, amarga conto bakal sambat babagan Downloader kelas sing 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 (iku misale jek sing ing versi anyar saka perpustakaan bagean iki reworked, nanging isih kudu dicenthang).

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 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. Kalebu kemampuan kanggo muter video stream saka YouTube, yen sampeyan nemtokake 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 nganggep kabeh nuansa nempatake komponen pamuter ing layar aplikasi (sampeyan bisa ndeleng conto ing situs web proyek utawa ing kode), kita mung bakal ndeleng carane miwiti muter video saka YouTube ing pamuter ing alamat sing dipikolehi 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 sing diwatesi umur sing mbutuhake login akun Google/YouTube

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

Saran: tambahake video kasebut menyang dhaptar ireng utawa takon marang penulis video kanggo mbusak watesan sing disetel kanthi ora sengaja.

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

contone: Inggih, Sampeyan Tunggu! Kabeh Masalah Soyuzmultfilm HD (Kartun kanggo Bocah-bocah), Kartun dening Soyuzmultfilm Studio, Kartun paling ndhuwur Soyuzmultfilm, Kartun studio Soyuzmultfilm

Saran: tambahake video kasebut menyang dhaptar ireng.

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

contone: Taming the Fire Episode 1, Mosfilm Film Concern

  • Yen sampeyan nemokake video umum sing ora mbutuhake login, muter 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 telat nalika internet alon (nanging ora dipateni)

Ing pungkasan

Anakku pindhah saka tablet menyang TV pinter Samsung, sing ora bisa mbukak aplikasi Android. Dadi kontrol wong tuwa sing paling apik isih pribadi.

Nanging app ternyata cukup trep kanggo miwiti nggunakake dhewe. Kesan pisanan saka versi kerja awal yaiku aku wis mlebu ing jagad liyane. Kabeh isi diundhuh saka YouTube, nanging ora YouTube maneh, nanging mergo, aman lan kontrol, kaya aku wis njupuk lipan metu saka mripat lan sijine iku ing jar kaca. Lan mung rekomendasi sing penting.

Source: www.habr.com

Tuku hosting sing dipercaya kanggo situs kanthi proteksi DDoS, server VPS VDS 🔥 Tuku hosting situs web sing bisa dipercaya nganggo proteksi DDoS, server VPS VDS | ProHoster