Смртта на Кошчеи е на списокот со препораки (дали е можно да се направи YouTube пријатен и безбеден?)

Воведот е краток: сакам да зборувам за онлајн плеерот на YouTube за Android со локални плејлисти, канали и препораки.

Смртта на Кошчеи е на списокот со препораки (дали е можно да се направи YouTube пријатен и безбеден?)

Проширен вовед:
Пред некое време наидов на истиот проблем како авторот на прекрасна апликација Белата листа на канали, и за себе си го определив токму истиот став кон тоа: сакам одвреме-навреме да можам на моето дете да му подарувам таблет или паметен телефон со цртани филмови, но воопшто не сум задоволен од тоа каде по 2-3 клика е списокот на препораки во стандардни апликации - клиенти на YouTube - го зема детето.

За жал, по инсталирањето на апликацијата Channel Whitelist, беше откриен уште еден попрозаичен, но сепак фатален пропуст - NIH I (и што е најважно, мојот син) го најде својот интерфејс не многу удобен, особено по навиката да го користам плеерот YouTube Kids.

Во принцип, по некое време бев подготвен да направам сопствена имплементација. По некое време, стана можно да се стави ознака на првото издание.

Главни карактеристики:

  • Додадете ги вашите омилени канали и листи за репродукција - тие ќе бидат зачувани и индексирани во локалната база на податоци
  • Во додадените плејлисти, исклучете ги непотребните видеа ако не ви се потребни
  • Списокот со препораки се генерира по случаен избор само од канали и плејлисти додадени во апликацијата

Отворен код, лиценца GPLv3: https://github.com/sadr0b0t/yashlang/

Подолу е преглед на главните карактеристики подетално, плус некои технички детали за тоа како да репродуцирате видеа на YouTube во вашата апликација за Android без користење на 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

Имајте на ум дека префрлањето помеѓу различни верзии од различни извори на истиот уред нема да работи поради различни потписи на датотеката apk; пред да ја инсталирате верзијата од нов извор, прво ќе треба да ја избришете инсталираната верзија заедно со податоците - кешот на плејлистата и историјата на прелистување (или дознајте како да префрлите податоци).

Технички детали

Не бара сметка на Google/YouTube, потребен ви е само Интернет, ги користи следните библиотеки:

Отворен код, бесплатна лиценца GPLv3.

прашање: Дали е генерално легално да се бришат веб-локации без дозвола (или со експлицитна забрана) од авторите? Google ги отстранува апликациите од Google Play, кои не го користат нивното API, туку ги анализираат нивните сајтови, бидејќи тие го прекршуваат нивниот кориснички договор.
одговор: се разбира, тоа е легално, зависи од вас која алатка да ја користите за да ги читате јавно достапните информации. Понатаму: Американскиот суд целосно го легализираше стругањето на веб-страниците и забрани техничко мешање во него., но Ѓул можеби има поинакво мислење; лично јас сè уште немам желба да одам на американски суд за да ги убедам.

Некој код

Библиотека NewPipeExtractor - проект за поддршка на играчи Newpipe, ви овозможува да преземете листа на видеа за одреден канал или плејлиста, да преземете детални информации за познато видео (што е видливо на веб-страницата на видеото), да ја добиете адресата на иконата за видео, а исто така да ја добиете адресата на видеото поток.

Кодот за вчитување на плејлистата е малку незгоден, затоа нема да го давам овде, за заинтересираните погледнете го изворниот код, во основа е класа 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]“)

на пример: Чекај го! Сите изданија на Сојузмултфилм ХД (Цртани филмови за деца), Цртани од студиото Сојузмултфилм, Врвни цртани Сојузмултфилм, Цртани од студиото Сојузмултфилм

совет: додајте такви видеа на црната листа.

  • Видеата што се достапни само преку директни врски може да не бидат вклучени во локалната плејлиста, дури и ако ги преземете сите видеа на корисникот

на пример: Припитомување на огнот, епизода 1, загриженост за киното на Мосфилм

  • Ако наидете на јавно видео кое не бара најавување, се репродуцира во прелистувачот, но не се репродуцира во плеерот, испратете извештај за грешка (сосема е можно проблемот веќе да е решен во новата верзија NewPipeExtractor и ќе треба само да го ажурирате склопот со оваа верзија, на пример).

  • Интерфејсот може да се забави ако Интернетот е бавен (но не е исклучен)

Како резултат на тоа,

Мојот син се пресели од таблет на паметен телевизор Samsung, кој не може да работи со апликации за Android. Затоа, најдобрата родителска контрола е сепак лична.

Но, апликацијата се покажа како доволно удобна за да почнам да ја користам сам. Првиот впечаток од раните работни верзии беше дека сум во друг свет. Сите содржини се преземаат од YouTube, но ова веќе не е YouTube, туку нешто друго, безбедно и контролирано, како да сте извадиле стоногалка од окото и сте ја ставиле во стаклена тегла. И се е до препораките.

Извор: www.habr.com

Додадете коментар