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.

Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)

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

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

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

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?)

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?)

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?)

Pencarian instan di database lokal

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?)

Tambahkan saluran atau daftar putar baru

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?) 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?)

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?) 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?)

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

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?) => 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?)

Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)

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

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?) 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?)

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

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?) Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)

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

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?)

Video favorit dan riwayat penayangan

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?) Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)

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

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?) 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?)

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

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?) => Kematian Koshchei ada dalam daftar rekomendasi (apakah mungkin membuat YouTube nyaman dan aman?)

Aplikasi akan langsung terlihat seperti screenshot di atas.

Saluran dan daftar putar yang tidak diperlukan dapat dimatikan atau dihapus di pengaturan.

Instalasi

Страница проекта: 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 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:

Sumber terbuka, lisensi GPLv3 gratis.

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.

Hubungkan perpustakaan ke
aplikasi/build.gradle

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

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:

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 laman video apa pun di situs web YouTube, misalnya https://www.youtube.com/watch?v=pd2RlatmNRk

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.

Hubungkan perpustakaan ke proyek aplikasi/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 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:

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 Dikenal

  • Tidak akan memutar video dengan batasan usia yang memerlukan login ke akun Google/YouTube Anda

misalnya: Ilya Muromets, Kepedulian Sinema Mosfilm, Ruslan dan Lyudmila film 1, Kepedulian Film Mosfilm

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]”)

misalnya: Menunggu untuk itu! Semua Edisi Soyuzmultfilm HD (Kartun untuk anak-anak), Kartun dari studio Soyuzmultfilm, Kartun teratas Soyuzmultfilm, Kartun dari studio Soyuzmultfilm

saran: tambahkan video tersebut ke daftar hitam.

  • Video yang hanya tersedia melalui tautan langsung mungkin tidak disertakan dalam daftar putar lokal, meskipun Anda mengunduh semua video pengguna

misalnya: Taming of Fire Episode 1, Kepedulian Sinema Mosfilm

  • 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.

Sumber: www.habr.com

Tambah komentar