Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Kirish qisqa: Android uchun mahalliy pleylistlar, kanallar va tavsiyalar bilan YouTube onlayn pleyeri haqida gapirmoqchiman.

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Kengaytirilgan kirish:
Bir muncha vaqt oldin men ajoyib dastur muallifi bilan bir xil muammoga duch keldim Kanal oq ro'yxati, va o'zim uchun xuddi shunday munosabatni aniqladim: men vaqti-vaqti bilan farzandimga multfilmli planshet yoki smartfon sovg'a qilishni xohlayman, lekin 2-3 marta bosgandan keyin ro'yxat qayerda paydo bo'lishidan umuman mamnun emasman. standart ilovalarda tavsiyalar - YouTube mijozlari - bolani oladi.

Afsuski, Channel Whitelist ilovasini o'rnatgandan so'ng, yana bir prozaik, ammo baribir halokatli kamchilik topildi - NIH I (va, eng muhimi, o'g'lim) o'z interfeysini unchalik qulay emas deb topdi, ayniqsa YouTube Kids pleyeridan foydalanish odatidan keyin.

Umuman olganda, bir muncha vaqt o'tgach, men o'zimni amalga oshirishga tayyor edim. Biroz vaqt o'tgach, birinchi nashrga teg qo'yish mumkin bo'ldi.

Asosiy xususiyatlari:

  • Sevimli kanallaringiz va pleylistlaringizni qo'shing - ular saqlanadi va mahalliy ma'lumotlar bazasida indekslanadi
  • Qo'shilgan pleylistlar ichida, agar kerak bo'lmasa, keraksiz videolarni o'chirib qo'ying
  • Tavsiyalar ro'yxati faqat dasturga qo'shilgan kanallar va pleylistlardan tasodifiy tarzda yaratiladi

Ochiq manba, GPLv3 litsenziyasi: https://github.com/sadr0b0t/yashlang/

Quyida asosiy funksiyalarning batafsil ko‘rib chiqilishi, shuningdek, YouTube videolarini Android ilovangizda Google API va veb o‘ramlaridan foydalanmasdan qanday ijro etish bo‘yicha ba’zi texnik tafsilotlar keltirilgan.

Asosiy ekranda va pleer ekranida: tasodifiy bo'lmagan kanallardan tasodifiy tavsiyalar

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Mahalliy ma'lumotlar bazasida tezkor qidiruv

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) => Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Yangi kanal yoki pleylist qo'shing

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Internetda ism bo'yicha qidiring yoki ma'lum manzilni kiriting. Kanal yoki pleylistning videolari roʻyxati mahalliy maʼlumotlar bazasiga saqlanadi, piktogrammalar keshda saqlanmaydi.

Dinamik pleylist - qidiruv natijalarini o'ynatish

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) => Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Video tavsiyalarida faqat qidiruv so'rovini qondiradigan videolar bo'ladi.

Xuddi shunday, agar siz pleylist sozlamalaridan videoni ochsangiz, tavsiyalar ro'yxatida faqat bir xil pleylistdagi videolar paydo bo'ladi.

Pleylistlar va kanallarni vaqtincha oʻchirib qoʻyish va qayta yoqish mumkin

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

E'tibor bering: o'chirilgan pleylistdagi videolar ham qidiruv natijalari, ko'rish tarixi va sevimlilar ro'yxatidan yo'qoladi. Lekin tashvishlanmang, ular pleylist qayta yoqilgandan so'ng darhol yana paydo bo'ladi.

Qora ro'yxatga video qo'shing

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Bloklangan video tavsiyalarda, qidiruv natijalarida ko‘rsatilmaydi va sevimlilar ro‘yxatidan va ko‘rish tarixidan yo‘qoladi. Video hali ham pleylist sozlamalarida ko'rinadi.

Qora ro'yxatni ko'ring va xato bilan bloklangan narsalarni qayta yoqing:
Sozlamalar > Sarlavha menyusi > Qora ro‘yxat

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Sevimli videolar va ko'rish tarixi

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Pleyer ekranidagi sevimli videolar yuqori o'ng burchakda yulduzcha bilan belgilangan.

Ekran sarlavhasidagi kontekst menyulari va galereyalar va ro'yxatlarda uzoq vaqt davomida bosing

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Ko‘rish ekranida yoki istalgan ro‘yxatda video yoki pleylist nomi yoki manzilini nusxalash.

Tez boshlash - tavsiya etilgan kanallar va pleylistlarni qo'shing

Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?) => Koshcheyning o'limi tavsiyalar ro'yxatida (YouTube-ni qulay va xavfsiz qilish mumkinmi?)

Ilova darhol yuqoridagi skrinshotlar kabi ko'rinadi.

Keraksiz kanallar va pleylistlar sozlamalarda o'chirilishi yoki o'chirilishi mumkin.

sozlama

Loyiha sahifasi: https://github.com/sadr0b0t/yashlang/
inglizchada: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
relizlar: https://github.com/sadr0b0t/yashlang/releases

Shuni yodda tutingki, bitta qurilmada turli manbalardan olingan turli versiyalar o'rtasida almashish apk faylining turli imzolari tufayli ishlamaydi; versiyani yangi manbadan o'rnatishdan oldin, avval o'rnatilgan versiyani ma'lumotlar bilan birga o'chirishingiz kerak bo'ladi - pleylist keshi va ko'rish tarixi (yoki ma'lumotlarni qanday uzatishni aniqlang).

Texnik ma'lumotlar

Google/YouTube hisobini talab qilmaydi, faqat Internet kerak, quyidagi kutubxonalardan foydalanadi:

Ochiq manba, bepul GPLv3 litsenziyasi.

Savol: Mualliflarning ruxsatisiz (yoki aniq taqiqlangan holda) veb-saytlarni qirib tashlash umuman qonuniymi? Google ilovalarni Google Play'dan olib tashlaydi, qaysi o'z API foydalanish emas, balki ularning saytlarini tahlil, chunki ular foydalanuvchi shartnomasini buzadilar.
javob: albatta, bu qonuniy, hammaga ochiq ma'lumotlarni o'qish uchun qaysi vositadan foydalanish sizga bog'liq. Bundan tashqari: AQSh sudi veb-saytlarni qirib tashlashni to'liq qonuniylashtirdi va unga texnik aralashuvni taqiqladi., lekin Gulning fikri boshqacha bo'lishi mumkin, shaxsan menda ularni ishontirish uchun Amerika sudiga borish istagi yo'q.

Ba'zi kod

kutubxona NewPipeExtractor - o'yinchilarni qo'llab-quvvatlash loyihasi Yangi quvur, ma'lum bir kanal yoki pleylist uchun videolar ro'yxatini yuklab olish, mashhur video haqida batafsil ma'lumotni yuklab olish (videoning veb-sahifasida ko'rinadigan), video belgisi manzilini olish, shuningdek, video manzilini olish imkonini beradi. oqim.

Pleylistni yuklash uchun kod biroz og'ir, shuning uchun men uni bu erda bermayman, qiziquvchilar uchun manba kodini ko'rib chiqing, bu asosan sinf ContentLoader.

Keling, ommaviy video sahifasi manzilidan video oqimining manzilini qanday olishni va uni pleerda o'ynashni ko'rib chiqaylik.

Kutubxonani ulang
app/build.gradle

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

Qizig'i shundaki, bundan keyin ham siz undan foydalana olmaysiz, chunki... misollar yo'qolgan Downloader sinfi haqida shikoyat qiladi. Uni loyihaga avtomatlashtirilgan testlar katalogidan nusxalash mumkin NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - 0.17.4 versiyasi uchun ishlaydi (bu qism kutubxonaning yangi versiyasida qayta ishlanganga o'xshaydi, lekin biz hali ham tekshirishimiz kerak).

YouTube veb-saytidagi video sahifasi manzili bo'yicha video oqimining manzilini oling:

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;
    }

ytVidUrl video manzili YouTube veb-saytidagi har qanday video sahifasining umumiy manzili bo'lishi mumkin, masalan, https://www.youtube.com/watch?v=pd2RlatmNRk

O'yinchi bo'ladi ekzoplayer Googlening o'zidan. Bu YouTube uchun veb-o'rash emas, balki har qanday videoni o'ynash uchun juda moslashuvchan va moslashtirilgan haqiqiy o'rnatilgan pleer. Agar siz to'g'ri manzilni ko'rsatsangiz, u YouTube'dan video oqimlarni ham ijro etishi mumkin. Biz hozirgina oqim manzilini oldik, shuning uchun uni pleyerga qanday yuborishni ko'rib chiqamiz.

Kutubxonani loyihaga ulang app/build.gradle:

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

Biz pleer komponentini dastur ekraniga joylashtirishning barcha nuanslarini ko'rib chiqmaymiz (siz loyiha veb-saytidagi yoki koddagi misollarni ko'rishingiz mumkin), biz faqat pleerda YouTube-dan videoni qanday o'ynashni boshlashni ko'rib chiqamiz. Yuqorida olingan manzil:

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);
    }
}

Ma'lum muammolar

  • Google/YouTube hisobingizga kirishni talab qiladigan yosh cheklovlari bilan videolar ijro etilmaydi

Masalan: Ilya Muromets, "Mosfilm" kinokonserni, Ruslan va Lyudmila 1-film, Mosfilm kinokonserni

maslahat: bunday videolarni qora ro'yxatga qo'shing yoki video muallifidan xatolik bilan o'rnatilgan cheklovni olib tashlashni so'rang.

  • Xizmat nol uzunligini qaytaradigan ba'zi translyatsiya videolari o'ynatilmaydi (bunday videolar uchun ro'yxatlar va galereyadagi davomiylik "[dur undef]" sifatida belgilangan)

Masalan: Shoshmay tur! "Soyuzmultfilm HD" ning barcha sonlari (bolalar uchun multfilmlar), "Soyuzmultfilm" studiyasidan multfilmlar, Eng yaxshi multfilmlar "Soyuzmultfilm", "Soyuzmultfilm" studiyasidan multfilmlar

maslahat: bunday videolarni qora ro'yxatga qo'shing.

  • Faqat to'g'ridan-to'g'ri havolalar orqali mavjud bo'lgan videolar, hatto foydalanuvchining barcha videolarini yuklab olgan bo'lsangiz ham, mahalliy pleylistga kiritilmasligi mumkin.

Masalan: “Olovni yumshatish” 1-qism, “Mosfilm” kinokonserni

  • Agar siz tizimga kirishni talab qilmaydigan, brauzerda o'ynaydigan, lekin pleerda o'ynamaydigan ommaviy videoga duch kelsangiz, xato haqida hisobot yuboring (muammo yangi versiyada allaqachon tuzatilgan bo'lishi mumkin. NewPipeExtractor va siz faqat ushbu versiya bilan montajni yangilashingiz kerak bo'ladi, masalan).

  • Agar Internet sekin bo'lsa (lekin o'chirilmagan) interfeys sekinlashishi mumkin.

Natijada

O'g'lim planshetdan Android ilovalarini ishga tushira olmaydigan Samsung smart-televizoriga o'tdi. Shuning uchun, eng yaxshi ota-ona nazorati hali ham shaxsiydir.

Ammo ilova men o'zim foydalanishni boshlashim uchun qulay bo'lib chiqdi. Dastlabki ish versiyalaridagi birinchi taassurot men boshqa dunyoda ekanligim edi. Barcha kontent YouTube'dan yuklab olinadi, lekin bu endi YouTube emas, balki boshqa narsa, xavfsiz va boshqariladigan narsa, go'yo siz ko'zingizdan qirg'oqni olib, shisha idishga solib qo'ygandek. Va hamma narsa tavsiyalar bilan bog'liq.

Manba: www.habr.com

a Izoh qo'shish