Kematian Koshchei dalam daftar rekomendasi (dapatkah Anda membuat YouTube nyaman dan aman?)

Pendahuluan singkat: Saya ingin berbicara tentang pemutar online YouTube untuk Android dengan daftar putar, saluran, dan rekomendasi.



Pengantar rinci


Beberapa waktu yang lalu, saya menghadapi masalah yang sama persis dengan penulis aplikasi Whitelist Saluran yang luar biasa, dan saya menentukan sikap yang persis sama terhadapnya: Saya ingin memberi anak saya tablet atau smartphone dengan kartun dari waktu ke waktu, tetapi saya sama sekali tidak senang, di mana dalam 2-3 klik anak mendapat daftar rekomendasi dalam aplikasi standar - klien YouTube.


Sayangnya, setelah menginstal aplikasi Whitelist Saluran, ia sudah menemukan cacat lain yang lebih prosa, tetapi masih fatal - NIH (dan, yang paling penting, putranya) tidak menemukan antarmuka yang sangat nyaman, terutama setelah kebiasaan menggunakan pemutar YouTube Kids.


Secara umum, setelah beberapa waktu saya matang untuk melakukan implementasi saya. Setelah beberapa waktu, menjadi mungkin untuk memasang tag pada rilis pertama.


Fitur utama:


  • Tambahkan saluran dan daftar putar favorit Anda - saluran tersebut akan disimpan dan diindeks di basis data lokal
  • Matikan video tambahan di dalam daftar putar yang ditambahkan jika Anda tidak membutuhkannya
  • Daftar rekomendasi dihasilkan secara acak hanya dari saluran dan daftar putar yang ditambahkan ke aplikasi.

Sumber terbuka, lisensi GPLv3: https://github.com/sadr0b0t/yashlang/


Selanjutnya ikhtisar fitur-fitur utama secara lebih rinci, ditambah beberapa detail teknis tentang cara memutar video YouTube di aplikasi Android Anda tanpa menggunakan Google API dan pembungkus web.


Di layar utama dan di layar pemain: rekomendasi acak dari saluran nonrandom








Pencarian basis data lokal instan


=>


Tambahkan saluran atau daftar putar baru




Cari berdasarkan nama online atau masukkan alamat yang diketahui. Daftar klip saluran atau daftar putar disimpan ke database lokal, ikon tidak di-cache.


Daftar putar dinamis - mainkan hasil pencarian


=>




Dalam rekomendasi di bawah video, hanya akan ada video yang memenuhi permintaan pencarian.


Demikian pula, jika Anda membuka video dari pengaturan daftar putar, hanya klip dari daftar putar yang sama akan ada dalam daftar rekomendasi.


Daftar putar dan saluran untuk sementara dapat dimatikan dan dinyalakan kembali



Harap perhatikan: video dari daftar putar yang dimatikan juga akan hilang dari hasil pencarian, riwayat perambanan, dan daftar favorit Anda. Tapi jangan khawatir, mereka akan muncul di sana lagi segera setelah daftar putar dinyalakan kembali.


Daftar hitam



Klip yang diblokir tidak akan muncul dalam rekomendasi, dalam hasil pencarian, menghilang dari daftar favorit Anda dan dari riwayat penelusuran Anda. Video masih akan terlihat di pengaturan daftar putar.


Lihat daftar hitam dan aktifkan kembali item yang diblokir karena kesalahan:
Pengaturan> menu tajuk> Daftar Hitam



Video favorit dan riwayat tontonan



Video favorit di layar pemain ditandai dengan tanda bintang di sudut kanan atas.


Menu konteks dalam judul layar dan klik panjang di galeri dan daftar



Salin nama atau alamat video atau daftar putar di layar tonton atau dalam daftar apa pun.


Mulai Cepat - Tambahkan Saluran dan Daftar Putar yang Disarankan


=>


Aplikasi akan langsung terlihat seperti tangkapan layar di atas.


Saluran dan daftar putar yang tidak perlu dapat dimatikan atau dihapus dalam pengaturan.


Instalasi


Halaman Proyek: https://github.com/sadr0b0t/yashlang/
dalam bahasa Inggris: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
rilis: https://github.com/sadr0b0t/yashlang/releases



Ingatlah bahwa beralih di antara versi yang berbeda dari sumber yang berbeda pada perangkat yang sama tidak akan berfungsi karena tanda tangan file apk yang berbeda, sebelum menginstal versi dari sumber baru, Anda harus menghapus versi yang diinstal terlebih dahulu bersama dengan cache data - playlist dan riwayat penelusuran (atau mencari tahu bagaimana ini transfer data).


Rincian teknis


Tidak memerlukan akun Google / YouTube, hanya Internet yang diperlukan, menggunakan perpustakaan:



Sumber terbuka, lisensi GPLv3 gratis.


Pertanyaan: Apakah legal untuk mem-parsing situs tanpa izin (atau dengan larangan eksplisit) dari penulis? Google menghapus aplikasi dari Google yang tidak menggunakan API mereka, tetapi menguraikan situs mereka, karena mereka melanggar perjanjian pengguna mereka.
jawaban: tentu saja, secara hukum, terserah Anda alat apa yang digunakan untuk membaca informasi yang tersedia untuk umum. Selain itu: pengadilan AS telah sepenuhnya mengesahkan pengikisan situs web dan melarangnya dilarang secara teknis , tetapi Gul mungkin memiliki pendapat yang berbeda, saya pribadi tidak memiliki keinginan untuk pergi ke pengadilan Amerika untuk meyakinkan mereka.


Beberapa kode


Pustaka NewPipeExtractor adalah proyek tambahan dari pemain NewPipe yang memungkinkan Anda mengunduh daftar klip untuk saluran atau daftar putar tertentu, mengunduh informasi terperinci tentang video yang diketahui (apa yang terlihat di halaman web video), menerima alamat ikon video, dan juga menerima alamat aliran video.


Kode untuk mengunduh daftar putar agak rumit, jadi saya tidak akan memberikannya di sini, siapa pun yang tertarik - lihat sumbernya, pada dasarnya ini adalah kelas ContentLoader .


Mari kita lihat bagaimana cara mendapatkan alamat aliran video di alamat halaman publik video dan memutarnya di pemutar.


Hubungkan perpustakaan ke
app / build.gradle


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

Sangat aneh bahwa setelah itu masih tidak dapat digunakan, karena contoh akan bersumpah di kelas Downloader yang hilang. Itu dapat disalin ke proyek dari katalog tes otomatis NewPipeExtractor / extractor / src / test / java / org / schabi / newpipe / Downloader.java - berfungsi untuk versi 0.17.4 (tampaknya dalam versi perpustakaan yang lebih baru bagian ini dikerjakan ulang, tetapi masih perlu diperiksa).


Dapatkan alamat aliran video di alamat halaman video di 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 dapat menjadi alamat publik dari halaman video apa pun di situs web YouTube, misalnya, https://www.youtube.com/watch?v=pd2RlatmNRk


Pemain akan menjadi ExoPlayer dari Google sendiri. Ini bukan pembungkus web melalui YouTube, tetapi pemutar yang tertanam nyata untuk memutar video apa pun, cukup fleksibel dan dapat disesuaikan. Termasuk dapat memutar streaming video dari YouTube, jika Anda menentukan alamat yang benar. Kami baru saja mendapatkan alamat streaming, jadi kami akan melihat cara mengirimnya ke pemain.


Hubungkan perpustakaan ke proyek app / build.gradle :


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

Kami tidak akan mempertimbangkan semua nuansa penempatan komponen pemain di layar aplikasi (Anda dapat melihat contoh di situs web proyek atau dalam kode), kami hanya akan melihat cara mulai memutar video dari YouTube di pemutar di alamat di atas:


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 yang Diketahui


  • Tidak akan memutar video dengan batasan usia yang mengharuskan masuk ke akun Google / YouTube Anda

misalnya: Ilya Muromets, Mosfilm Film Concern , Ruslan dan Lyudmila film seri 1 / Ruslan dan Lyudmila film 1, Mosfilm Film Concern


tip: tambahkan video tersebut ke daftar hitam atau minta pembuat video untuk menghapus pembatasan yang dibuat secara tidak sengaja.


  • Beberapa video siaran yang layanannya mengembalikan panjang nol tidak akan diputar (untuk video tersebut, durasi dalam daftar dan galeri ditandai sebagai "[dur undef]")

Sebagai contoh: Tunggu sebentar! Semua Masalah Soyuzmultfilm HD (Kartun untuk Anak-Anak), Kartun Soyuzmultfilm Studios , Kartun Top Soyuzmultfilm, Kartun Studio Soyuzmultfilm


Kiat: Tambahkan video ini ke daftar hitam.


  • Video yang hanya dapat diakses melalui tautan langsung mungkin tidak masuk ke daftar putar lokal, bahkan jika Anda mengunduh semua video pengguna

misalnya: Taming of Fire 1 series, Mosfilm Film Concern


  • Jika Anda melihat video publik yang tidak memerlukan login, diputar di browser, tetapi tidak diputar di pemutar, kirim laporan bug (sangat mungkin bahwa masalahnya telah diperbaiki dalam versi baru NewPipeExtractor dan Anda hanya perlu memperbarui perakitan dengan versi ini, misalnya ).


  • Antarmuka dapat melambat saat Internet lambat (tetapi tidak dimatikan)



Pada akhirnya


Sang putra pindah dari tablet ke smart TV Samsung, yang tidak tahu cara menjalankan aplikasi Android. Karena itu, kontrol orangtua yang terbaik masih bersifat pribadi.


Tetapi aplikasi itu ternyata cukup nyaman bagi saya untuk mulai menggunakannya sendiri. Kesan pertama dari versi awal bekerja - masuk ke dunia lain. Semua konten diunduh dari YouTube, tetapi itu bukan YouTube lagi, tetapi sesuatu yang lain, aman dan terkendali, seolah-olah mengeluarkan scolopendra dari mata dan memasukkannya ke dalam stoples kaca. Dan itu dalam rekomendasi.

Source: https://habr.com/ru/post/id482874/


All Articles