ProHoster > blog > berita internet > Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)
Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)
Pengenalannya singkat: Saya ingin berbicara tentang pemutar online YouTube untuk Android dengan daftar putar lokal, saluran, dan rekomendasi.
Pengenalan yang diperluas:
Beberapa waktu lalu saya mengalami masalah yang persis sama dengan pembuat aplikasi yang luar biasa Daftar Putih Saluran, dan menentukan sendiri sikap yang persis sama terhadapnya: Saya ingin dapat memberi anak saya tablet atau ponsel cerdas dengan kartun dari waktu ke waktu, tetapi saya sama sekali tidak senang dengan daftarnya, setelah 2-3 klik, rekomendasi dalam aplikasi standar - klien YouTube - membutuhkan anak.
Sayangnya, setelah menginstal aplikasi Daftar Putih Saluran, ditemukan kesalahan lain yang lebih membosankan, namun tetap fatal - NIH Saya (dan, yang paling penting, anak saya) merasa antarmukanya tidak terlalu nyaman, terutama setelah kebiasaan menggunakan pemutar YouTube Kids.
Secara umum, setelah beberapa waktu saya siap untuk melakukan implementasi sendiri. Setelah beberapa waktu, menjadi mungkin untuk memberi tag pada rilis pertama.
Fitur utama:
Tambahkan saluran dan daftar putar favorit Anda - semuanya akan disimpan dan diindeks di database lokal
Dalam daftar putar yang ditambahkan, matikan video yang tidak diperlukan jika Anda tidak membutuhkannya
Daftar rekomendasi dihasilkan secara acak hanya dari saluran dan playlist yang ditambahkan ke aplikasi
Di bawah ini adalah ikhtisar fitur-fitur utama secara lebih detail, ditambah beberapa detail teknis tentang cara memutar video YouTube di aplikasi Android Anda tanpa menggunakan Google API dan web wrapper.
Di layar utama dan di layar pemutar: rekomendasi acak dari saluran non-acak
Pencarian instan di database lokal
=>
Tambahkan saluran atau daftar putar baru
Cari berdasarkan nama online atau masukkan alamat yang diketahui. Daftar video saluran atau daftar putar disimpan ke database lokal; ikon tidak disimpan dalam cache.
Daftar putar dinamis - memutar hasil pencarian
=>
Dalam rekomendasi video hanya akan ada video yang memenuhi permintaan pencarian.
Demikian pula jika Anda membuka video dari pengaturan playlist, hanya video dari playlist yang sama yang akan muncul di daftar rekomendasi.
Daftar putar dan saluran dapat dimatikan dan dihidupkan kembali untuk sementara
Harap dicatat: video dari daftar putar yang dinonaktifkan juga akan hilang dari hasil pencarian, riwayat penayangan, dan dari daftar favorit. Tapi jangan khawatir, mereka akan muncul lagi di sana segera setelah playlist diaktifkan kembali.
Tambahkan video ke daftar hitam
Video yang diblokir tidak akan ditampilkan di rekomendasi, di hasil pencarian, dan akan hilang dari daftar favorit dan riwayat penayangan. Video akan tetap terlihat di pengaturan playlist.
Lihat daftar hitam dan aktifkan kembali item yang diblokir karena kesalahan: Pengaturan > menu header > Daftar Hitam
Video favorit dan riwayat penayangan
Video favorit di layar pemutar ditandai dengan tanda bintang di pojok kanan atas.
Menu konteks di judul layar dan klik panjang di galeri dan daftar
Salin nama atau alamat video atau daftar putar di layar tontonan atau di daftar mana pun.
Mulai cepat - tambahkan saluran dan daftar putar yang direkomendasikan
=>
Aplikasi akan langsung terlihat seperti screenshot di atas.
Saluran dan daftar putar yang tidak diperlukan dapat dimatikan atau dihapus di pengaturan.
Itu tidak ada di Google Play dan tidak akan ada dalam waktu dekat (Google melarang aplikasi yang melewati API dan mengurai situs web mereka, termasuk Daftar Putih Saluran yang disebutkan atau pemutar NewPipe)
Ingatlah bahwa beralih antara versi berbeda dari sumber berbeda pada perangkat yang sama tidak akan berfungsi karena tanda tangan file apk yang berbeda; sebelum menginstal versi dari sumber baru, Anda harus terlebih dahulu menghapus versi yang diinstal beserta datanya - cache daftar putar dan riwayat penelusuran (atau cari tahu cara mentransfer data).
Detail teknis
Tidak memerlukan akun Google/YouTube, Anda hanya memerlukan Internet, menggunakan perpustakaan berikut:
pertanyaan: Apakah secara umum sah untuk mengikis situs web tanpa izin (atau dengan larangan eksplisit) dari penulisnya? Google menghapus aplikasi dari Google Play, yang tidak menggunakan API mereka, tetapi mengurai situs mereka, karena mereka melanggar perjanjian penggunanya. jawaban: tentu saja sah, terserah Anda alat mana yang akan digunakan untuk membaca informasi yang tersedia untuk umum. Lebih-lebih lagi: Pengadilan AS telah sepenuhnya melegalkan pengikisan situs web dan melarang campur tangan teknis terhadapnya., tapi Gul mungkin punya pendapat berbeda; secara pribadi, saya belum punya keinginan untuk pergi ke pengadilan Amerika untuk meyakinkan mereka.
Beberapa kode
perpustakaan Ekstraktor Pipa Baru - proyek dukungan pemain NewPipe, memungkinkan Anda mengunduh daftar video untuk saluran atau daftar putar tertentu, mengunduh informasi terperinci tentang video terkenal (apa yang terlihat di halaman web video), mendapatkan alamat ikon video, dan juga mendapatkan alamat video tersebut sungai kecil.
Kode untuk memuat playlistnya agak ribet, jadi tidak akan saya berikan disini, bagi yang berminat lihat source codenya, pokoknya sekelas Pemuat Konten.
Mari kita lihat cara mendapatkan alamat streaming video dari alamat halaman video publik dan memutarnya di pemutar.
Anehnya setelah ini Anda tetap tidak bisa menggunakannya, karena... contoh akan mengeluh tentang kelas Downloader yang hilang. Itu dapat disalin ke proyek dari direktori pengujian otomatis NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - berfungsi untuk versi 0.17.4 (tampaknya bagian ini telah dibuat ulang di versi perpustakaan yang lebih baru, tetapi kita masih perlu memeriksanya).
Dapatkan alamat streaming video dengan alamat halaman video di situs YouTube:
Pemain akan melakukannya exoplayer dari Google sendiri. Ini bukan pembungkus web YouTube, tetapi pemutar bawaan nyata untuk memutar video apa pun, cukup fleksibel dan dapat disesuaikan. Itu juga dapat memutar streaming video dari YouTube jika Anda memberikan alamat yang benar. Kami baru saja menerima alamat streaming, jadi mari kita lihat cara mengirimkannya ke pemain.
Kami tidak akan mempertimbangkan semua nuansa penempatan komponen pemutar 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 yang diterima di atas:
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 Dikenal
Tidak akan memutar video dengan batasan usia yang memerlukan login ke akun Google/YouTube Anda
saran: tambahkan video tersebut ke daftar hitam atau minta pembuat video tersebut untuk menghapus batasan yang ditetapkan secara tidak sengaja.
Beberapa video siaran yang panjangnya nol oleh layanan tidak akan diputar (untuk video tersebut, durasi dalam daftar dan galeri ditandai sebagai “[dur undef]”)
Jika Anda menemukan video publik yang tidak memerlukan login, diputar di browser, tetapi tidak diputar di pemutar, kirimkan laporan bug (sangat mungkin masalahnya telah diperbaiki di versi baru Ekstraktor Pipa Baru dan Anda hanya perlu memperbarui perakitan dengan versi ini, misalnya).
Antarmuka mungkin melambat jika Internet lambat (tetapi tidak dimatikan)
Sebagai hasilnya,
Anak saya pindah dari tablet ke smart TV Samsung yang tidak bisa menjalankan aplikasi Android. Oleh karena itu, kontrol orang tua yang terbaik tetaplah bersifat pribadi.
Namun aplikasi tersebut ternyata cukup nyaman bagi saya untuk mulai menggunakannya sendiri. Kesan pertama dari versi awal adalah saya berada di dunia lain. Semua konten diunduh dari YouTube, tapi ini bukan lagi YouTube, melainkan sesuatu yang lain, aman dan terkontrol, seolah-olah Anda mengeluarkan kelabang dari mata Anda dan memasukkannya ke dalam toples kaca. Dan ini semua tentang rekomendasi.