Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Pengenalan ringkas: Saya ingin bercakap tentang pemain dalam talian YouTube untuk Android dengan senarai main tempatan, saluran dan cadangan.

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Pengenalan yang diperluaskan:
Beberapa ketika dahulu saya menghadapi masalah yang sama seperti pengarang aplikasi yang indah Senarai Putih Saluran, dan bertekad untuk diri saya sendiri sikap yang sama terhadapnya: Saya mahu dapat memberikan anak saya tablet atau telefon pintar dengan kartun dari semasa ke semasa, tetapi saya sama sekali tidak berpuas hati dengan di mana, selepas 2-3 klik, senarai pengesyoran dalam aplikasi standard - pelanggan YouTube - mengambil kanak-kanak itu.

Malangnya, selepas memasang aplikasi Senarai Putih Saluran, satu lagi kecacatan yang lebih prosaik, tetapi masih membawa maut ditemui - NIH I (dan, yang paling penting, anak saya) mendapati antara mukanya tidak begitu mudah, terutamanya selepas kebiasaan menggunakan pemain YouTube Kids.

Secara umum, selepas beberapa lama saya bersedia untuk membuat pelaksanaan saya sendiri. Selepas beberapa lama, ia menjadi mungkin untuk meletakkan teg pada keluaran pertama.

Ciri-ciri utama:

  • Tambahkan saluran dan senarai main kegemaran anda - ia akan disimpan dan diindeks dalam pangkalan data tempatan
  • Dalam senarai main yang ditambahkan, matikan video yang tidak diperlukan jika anda tidak memerlukannya
  • Senarai cadangan dijana secara rawak hanya daripada saluran dan senarai main yang ditambahkan pada aplikasi

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

Di bawah ialah gambaran keseluruhan ciri utama dengan lebih terperinci, serta beberapa butiran teknikal tentang cara memainkan video YouTube dalam aplikasi Android anda tanpa menggunakan API Google dan pembungkus web.

Pada skrin utama dan pada skrin pemain: cadangan rawak daripada saluran bukan rawak

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Carian segera dalam pangkalan data tempatan

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) => Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Tambahkan saluran atau senarai main baharu

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Cari mengikut nama dalam talian atau masukkan alamat yang diketahui. Senarai video saluran atau senarai main disimpan ke pangkalan data setempat; ikon tidak dicache.

Senarai main dinamik - mainkan hasil carian

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) => Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Dalam cadangan video hanya terdapat video yang memenuhi pertanyaan carian.

Begitu juga, jika anda membuka video daripada tetapan senarai main, hanya video daripada senarai main yang sama akan muncul dalam senarai pengesyoran.

Senarai main dan saluran boleh dimatikan dan dihidupkan semula buat sementara waktu

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Sila ambil perhatian: video daripada senarai main yang dilumpuhkan juga akan hilang daripada hasil carian, sejarah tontonan dan daripada senarai kegemaran. Tetapi jangan risau, mereka akan muncul di sana sekali lagi selepas senarai main dihidupkan semula.

Tambahkan video pada senarai hitam

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Video yang disekat tidak akan dipaparkan dalam pengesyoran, dalam hasil carian dan akan hilang daripada senarai kegemaran dan daripada sejarah tontonan. Video masih akan kelihatan dalam tetapan senarai main.

Lihat senarai hitam dan dayakan semula item yang disekat secara tidak sengaja:
Tetapan > menu pengepala > Senarai Hitam

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Video kegemaran dan sejarah tontonan

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Video kegemaran pada skrin pemain ditandakan dengan asterisk di penjuru kanan sebelah atas.

Menu konteks dalam tajuk skrin dan klik lama dalam galeri dan senarai

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Salin nama atau alamat video atau senarai main dalam skrin tontonan atau dalam mana-mana senarai.

Permulaan pantas - tambah saluran dan senarai main yang disyorkan

Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?) => Kematian Koshchei ada dalam senarai cadangan (adakah mungkin untuk menjadikan YouTube selesa dan selamat?)

Aplikasi akan serta-merta kelihatan seperti tangkapan skrin di atas.

Saluran dan senarai main yang tidak diperlukan boleh dimatikan atau dipadamkan dalam tetapan.

Pemasangan

halaman projek: https://github.com/sadr0b0t/yashlang/
dalam Bahasa Inggeris: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
keluaran: https://github.com/sadr0b0t/yashlang/releases

Perlu diingat bahawa menukar antara versi berbeza daripada sumber berbeza pada peranti yang sama tidak akan berfungsi kerana tandatangan fail apk yang berbeza; sebelum memasang versi daripada sumber baharu, anda perlu memadamkan versi yang dipasang bersama-sama data dahulu - cache senarai main dan sejarah penyemakan imbas (atau cari cara untuk memindahkan data).

Maklumat teknikal

Tidak memerlukan akaun Google/YouTube, anda hanya memerlukan Internet, menggunakan perpustakaan berikut:

Sumber terbuka, lesen GPLv3 percuma.

soalan: Adakah secara amnya sah untuk mengikis tapak web tanpa kebenaran (atau dengan larangan yang jelas) daripada pengarang? Google mengalih keluar apl daripada Google Play, yang tidak menggunakan API mereka, tetapi menghuraikan tapak mereka, kerana mereka melanggar perjanjian pengguna mereka.
jawapan: sudah tentu, ia sah, terpulang kepada anda alat mana yang hendak digunakan untuk membaca maklumat yang tersedia secara umum. Tambahan pula: Mahkamah AS telah menghalalkan sepenuhnya pengikisan tapak web dan melarang campur tangan teknikal terhadapnya., tetapi Gul mungkin mempunyai pendapat yang berbeza; secara peribadi, saya belum mempunyai keinginan untuk pergi ke mahkamah Amerika untuk meyakinkan mereka.

Beberapa kod

Perpustakaan NewPipeExtractor - projek sokongan pemain NewPipe, membolehkan anda memuat turun senarai video untuk saluran atau senarai main tertentu, memuat turun maklumat terperinci tentang video terkenal (apa yang boleh dilihat pada halaman web video), dapatkan alamat ikon video dan juga mendapatkan alamat video aliran.

Kod untuk memuatkan senarai main adalah sedikit menyusahkan, jadi saya tidak akan memberikannya di sini, bagi mereka yang berminat, lihat kod sumber, ia pada dasarnya adalah kelas ContentLoader.

Mari lihat cara mendapatkan alamat strim video daripada alamat halaman video awam dan memainkannya dalam pemain.

Sambungkan perpustakaan ke
app/build.gradle

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

Agak hairan bahawa selepas ini anda masih tidak akan dapat menggunakannya, kerana... contoh akan mengadu tentang kelas Downloader yang hilang. Ia boleh disalin ke projek daripada direktori ujian automatik NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - berfungsi untuk versi 0.17.4 (nampaknya bahagian ini telah dibuat semula dalam versi perpustakaan yang lebih baharu, tetapi kami masih perlu menyemak).

Dapatkan alamat strim video mengikut alamat halaman video di tapak 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 boleh menjadi alamat awam halaman mana-mana video di tapak web YouTube, contohnya https://www.youtube.com/watch?v=pd2RlatmNRk

Pemain akan exoplayer daripada Google sendiri. Ini bukan pembungkus web di YouTube, tetapi pemain terbenam sebenar untuk memainkan sebarang video, agak fleksibel dan boleh disesuaikan. Ia juga boleh memainkan strim video daripada YouTube jika anda memberikan alamat yang betul. Kami baru sahaja menerima alamat strim, jadi mari lihat cara menghantarnya kepada pemain.

Sambungkan perpustakaan ke projek 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 meletakkan komponen pemain pada skrin aplikasi (anda boleh melihat contoh di tapak web projek atau dalam kod), kami hanya akan melihat bagaimana untuk mula memainkan video dari YouTube dalam pemain 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);
    }
}

isu yang diketahui

  • Tidak akan memainkan video dengan sekatan umur yang memerlukan log masuk ke akaun Google/YouTube anda

contohnya: Ilya Muromets, Mosfilm Cinema Concern, Ruslan dan Lyudmila filem 1, Mosfilm Film Concern

nasihat: tambahkan video sedemikian pada senarai hitam atau minta pengarang video untuk mengalih keluar sekatan yang telah ditetapkan secara tidak sengaja.

  • Sesetengah video siaran yang mana perkhidmatan mengembalikan panjang sifar tidak akan dimainkan (untuk video sedemikian, tempoh dalam senarai dan galeri ditandakan sebagai "[dur undef]")

contohnya: Tunggu dulu! Semua Isu Soyuzmultfilm HD (Kartun untuk kanak-kanak), Kartun daripada studio Soyuzmultfilm, Kartun popular Soyuzmultfilm, Kartun dari studio Soyuzmultfilm

nasihat: tambahkan video sedemikian ke senarai hitam.

  • Video yang hanya tersedia melalui pautan terus mungkin tidak disertakan dalam senarai main tempatan, walaupun anda memuat turun semua video pengguna

contohnya: Taming of Fire Episod 1, Keprihatinan Pawagam Mosfilm

  • Jika anda menjumpai video awam yang tidak memerlukan log masuk, dimainkan dalam penyemak imbas, tetapi tidak dimainkan dalam pemain, hantar laporan pepijat (agak mungkin masalah itu telah dibetulkan dalam versi baharu NewPipeExtractor dan anda hanya perlu mengemas kini pemasangan dengan versi ini, sebagai contoh).

  • Antara muka mungkin perlahan jika Internet perlahan (tetapi tidak dimatikan)

Hasilnya,

Anak saya berpindah dari tablet ke TV pintar Samsung, yang tidak dapat menjalankan aplikasi Android. Oleh itu, kawalan ibu bapa yang terbaik masih bersifat peribadi.

Tetapi aplikasi itu ternyata cukup mudah untuk saya mula menggunakannya sendiri. Kesan pertama dari versi kerja awal ialah saya berada di dunia lain. Semua kandungan dimuat turun dari YouTube, tetapi ini bukan lagi YouTube, tetapi sesuatu yang lain, selamat dan terkawal, seolah-olah anda mengeluarkan lipan dari mata anda dan memasukkannya ke dalam balang kaca. Dan ini semua tentang cadangan.

Sumber: www.habr.com

Tambah komen