Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кіріспе қысқаша: жергілікті ойнату тізімдері, арналары және ұсыныстары бар Android үшін YouTube онлайн ойнатқышы туралы айтқым келеді.

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кеңейтілген кіріспе:
Біраз уақыт бұрын мен керемет қосымшаның авторы сияқты проблемаға тап болдым Арналардың ақ тізімі, және өзім үшін дәл осындай көзқарасты анықтадым: мен балама мультфильмдері бар планшетті немесе смартфонды мезгіл-мезгіл сыйлағым келеді, бірақ 2-3 рет басқаннан кейін тізімнің қай жерде болатынына мүлдем риза емеспін. стандартты қолданбалардағы ұсыныстардың - YouTube клиенттері - баланы қабылдайды.

Өкінішке орай, Channel Whitelist қолданбасын орнатқаннан кейін тағы бір прозалық, бірақ әлі де өлімге әкелетін кемшілік анықталды - NIH I (және, ең бастысы, менің ұлым) оның интерфейсін өте ыңғайлы емес деп тапты, әсіресе YouTube Kids ойнатқышын пайдалану әдетінен кейін.

Жалпы, біраз уақыттан кейін мен өзімді жүзеге асыруға дайын болдым. Біраз уақыттан кейін бірінші шығарылымға тег қою мүмкін болды.

Негізгі ерекшеліктері:

  • Таңдаулы арналар мен ойнату тізімдерін қосыңыз - олар жергілікті дерекқорда сақталады және индекстеледі
  • Қосылған ойнату тізімдерінде қажет болмаса, қажет емес бейнелерді өшіріңіз
  • Ұсыныстар тізімі қолданбаға қосылған арналар мен ойнату тізімдерінен ғана кездейсоқ түрде жасалады

Ашық бастапқы код, GPLv3 лицензиясы: https://github.com/sadr0b0t/yashlang/

Төменде толығырақ негізгі мүмкіндіктерге шолу, сонымен қатар Android қолданбасында YouTube бейнелерін Google API және веб орауыштарын пайдаланбай ойнату жолының кейбір техникалық мәліметтері берілген.

Негізгі экранда және ойнатқыш экранында: кездейсоқ емес арналардан кездейсоқ ұсыныстар

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Жергілікті дерекқорда жылдам іздеу

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) => Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Жаңа арна немесе ойнату тізімін қосыңыз

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Желіде аты бойынша іздеңіз немесе белгілі мекенжайды енгізіңіз. Арнаның немесе ойнату тізімінің бейнелерінің тізімі жергілікті дерекқорға сақталады, белгішелер кэштелмейді.

Динамикалық ойнату тізімі - іздеу нәтижелерін ойнату

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) => Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Бейне ұсыныстарында іздеу сұрауын қанағаттандыратын бейнелер ғана болады.

Сол сияқты, ойнату тізімінің параметрлерінен бейнені ашсаңыз, ұсыныстар тізімінде тек бір ойнату тізіміндегі бейнелер ғана пайда болады.

Ойнату тізімдері мен арналарды уақытша өшіріп, қайта қосуға болады

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Назар аударыңыз: өшірілген ойнату тізіміндегі бейнелер де іздеу нәтижелерінен, көру тарихынан және таңдаулылар тізімінен жоғалады. Бірақ алаңдамаңыз, олар ойнату тізімі қайта қосылғаннан кейін бірден пайда болады.

Бейнені қара тізімге қосыңыз

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Блокталған бейне ұсыныстарда, іздеу нәтижелерінде көрсетілмейді және таңдаулылар тізімінен және көру тарихынан жоғалады. Бейне ойнату тізімінің параметрлерінде әлі де көрінетін болады.

Қара тізімді қараңыз және қате бұғатталған элементтерді қайта қосыңыз:
Параметрлер > тақырып мәзірі > Қара тізім

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Таңдаулы бейнелер және көру тарихы

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Ойнатқыш экранындағы таңдаулы бейнелер жоғарғы оң жақ бұрышта жұлдызшамен белгіленген.

Экран тақырыбындағы мәтінмәндік мәзірлер және галереялар мен тізімдерді ұзақ басыңыз

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Көру экранында немесе кез келген тізімде бейненің немесе ойнату тізімінің атын немесе мекенжайын көшіріңіз.

Жылдам бастау - ұсынылған арналар мен ойнату тізімдерін қосыңыз

Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?) => Кощейдің өлімі ұсыныстар тізімінде (YouTube-ды ыңғайлы және қауіпсіз ету мүмкін бе?)

Қолданба бірден жоғарыдағы скриншоттарға ұқсайды.

Қажет емес арналар мен ойнату тізімдерін параметрлерде өшіруге немесе жоюға болады.

параметр

Жоба беті: https://github.com/sadr0b0t/yashlang/
ағылшын тілінде: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
шығарылымдары: https://github.com/sadr0b0t/yashlang/releases

  • Ол Google Play-де жоқ және жақын арада болмайды (Google API-ны айналып өтетін және олардың веб-сайттарын талдайтын қолданбаларға, соның ішінде аталған арналардың ақ тізімі немесе NewPipe ойнатқышы) тыйым салады)
  • Дереккөздерден құрастыру: https://github.com/sadr0b0t/yashlang/
  • Шығарылымдар бөлімінен apk жүктеп алыңыз: https://github.com/sadr0b0t/yashlang/releases
  • Біраз уақыттан кейін каталогта пайда болады деп үміттенемін F-Droid (қосу туралы өтініш мақұлданған сияқты, бірақ бір айға жуық уақыт бойы одан әрі қозғалмады), бірақ әлі емес

Бір құрылғыдағы әртүрлі көздерден алынған әртүрлі нұсқалар арасында ауысу apk файлының әртүрлі қолтаңбаларына байланысты жұмыс істемейтінін есте сақтаңыз; жаңа көзден нұсқаны орнатпас бұрын, алдымен орнатылған нұсқаны деректермен бірге жоюыңыз керек - ойнату тізімінің кэші және шолу журналы (немесе деректерді беру жолын анықтаңыз).

Техникалық мәліметтер

Google/YouTube тіркелгісін қажет етпейді, сізге тек Интернет қажет, келесі кітапханаларды пайдаланады:

Ашық бастапқы коды, тегін GPLv3 лицензиясы.

сұрақ: Веб-сайттарды авторлардың рұқсатынсыз (немесе нақты тыйымсыз) қырып тастау заңды ма? Google қолданбаларды Google Play дүкенінен жояды, олар API қолданбайды, бірақ олардың сайттарын талдайды, өйткені олар пайдаланушы келісімін бұзады.
жауап: әрине, бұл заңды, жалпыға қолжетімді ақпаратты оқу үшін қандай құралды пайдалану сізге байланысты. Бұдан басқа: АҚШ соты веб-сайтты қырып тастауды толығымен заңдастырды және оған техникалық араласуға тыйым салды., бірақ Гүлдің пікірі басқа болуы мүмкін; жеке менің оларды көндіру үшін американдық сотқа баруға әлі ниетім жоқ.

Кейбір код

Кітапхана NewPipeExtractor - ойыншыны қолдау жобасы Жаңа құбыр, көрсетілген арна немесе ойнату тізімі үшін бейнелер тізімін жүктеп алуға, әйгілі бейне туралы толық ақпаратты жүктеп алуға (бейненің веб-бетінде не көрінеді), бейне белгішесінің мекенжайын алуға, сондай-ақ бейненің мекенжайын алуға мүмкіндік береді. ағын.

Ойнату тізімін жүктеу коды сәл қиын, сондықтан мен оны мұнда бермеймін, қызығушылық танытқандар үшін бастапқы кодты қараңыз, бұл негізінен сынып ContentLoader.

Жалпыға ортақ бейне бетінің мекенжайынан бейне ағынының мекенжайын қалай алуға болатынын және оны ойнатқышта ойнатуды көрейік.

Кітапхананы келесіге қосыңыз
app/build.gradle

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

Осыдан кейін сіз оны әлі де пайдалана алмайтыныңыз қызық, өйткені... мысалдар жоқ Downloader сыныбына шағымданады. Оны жобаға автоматтандырылған сынақтар каталогынан көшіруге болады NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - 0.17.4 нұсқасы үшін жұмыс істейді (бұл бөлік кітапхананың жаңарақ нұсқасында қайта жасалған сияқты, бірақ біз әлі де тексеруіміз керек).

Бейне ағынының мекенжайын 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;
    }

ytVidUrl бейне мекенжайы YouTube веб-сайтындағы кез келген бейне бетінің жалпыға ортақ мекенжайы болуы мүмкін, мысалы https://www.youtube.com/watch?v=pd2RlatmNRk

Ойыншы болады экзоплейер Google-дың өзінен. Бұл YouTube сайтындағы веб-орам емес, бірақ кез келген бейнелерді ойнатуға арналған, өте икемді және теңшеуге болатын нақты енгізілген ойнатқыш. Сондай-ақ, дұрыс мекенжайды көрсетсеңіз, ол YouTube-тен бейне ағындарын ойната алады. Біз ағындық мекенжайды жаңа ғана алдық, сондықтан оны ойнатқышқа қалай жіберуге болатынын көрейік.

Кітапхананы жобаға қосыңыз app/build.gradle:

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

Біз ойнатқыш компонентін қолданба экранында орналастырудың барлық нюанстарын қарастырмаймыз (мысалдарды жоба веб-сайтында немесе кодта қарауға болады), біз тек ойнатқышта YouTube-тен бейнені ойнатуды қалай бастау керектігін қарастырамыз. жоғарыда алынған мекенжай:

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

Белгілі мәселелер

  • Google/YouTube есептік жазбаңызға кіруді талап ететін жас шектеулері бар бейнелерді ойнатпайды

мысалы: Илья Муромец, «Мосфильм» киноконцерні, Руслан мен Людмила 1-фильм, «Мосфильм» киноконцерні

кеңес: мұндай бейнелерді қара тізімге қосыңыз немесе бейне авторынан қате орнатылған шектеуді алып тастауды сұраңыз.

  • Қызмет нөлдік ұзындықты қайтаратын кейбір таратылатын бейнелер ойнатылмайды (мұндай бейнелер үшін тізімдер мен галереядағы ұзақтық «[dur undef]» ретінде белгіленген)

мысалы: Күте тұрыңыз! «Союзмультфильм» HD барлық шығарылымдары (балаларға арналған мультфильмдер), «Союзмультфильм» студиясының мультфильмдері, Үздік мультфильмдер «Союзмультфильм», «Союзмультфильм» студиясының мультфильмдері

кеңес: мұндай бейнелерді қара тізімге қосыңыз.

  • Тікелей сілтемелер арқылы ғана қолжетімді бейнелер, тіпті пайдаланушының барлық бейнелерін жүктеп алсаңыз да, жергілікті ойнату тізіміне қосылмауы мүмкін.

мысалы: «Отты қолға үйрету» 1-бөлім, «Мосфильм» киноконцерні

  • Егер сіз логинді қажет етпейтін, шолғышта ойнатылатын, бірақ ойнатқышта ойнатпайтын жалпыға ортақ бейнені кездестірсеңіз, қате туралы есеп жіберіңіз (жаңа нұсқада мәселе шешілген болуы әбден мүмкін. NewPipeExtractor және сіз тек осы нұсқамен жинақты жаңартуыңыз керек, мысалы).

  • Интернет баяу болса (бірақ өшірілмесе) интерфейс баяулауы мүмкін.

Нәтижесінде,

Менің ұлым планшеттен Android қолданбаларын іске қоса алмайтын Samsung смарт теледидарына көшті. Сондықтан, ең жақсы ата-ана бақылауы әлі де жеке.

Бірақ қолданба мен оны өзім қолдана бастауға ыңғайлы болды. Алғашқы жұмыс нұсқаларынан алған әсерім басқа әлемде болдым. Барлық мазмұн YouTube-тен жүктеледі, бірақ бұл енді YouTube емес, басқа нәрсе, қауіпсіз және басқарылатын нәрсе, сіз қырықаяқты көзіңізден алып, оны шыны ыдысқа салғандай. Және бәрі ұсыныстарға қатысты.

Ақпарат көзі: www.habr.com

пікір қалдыру