Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Увод је кратак: желим да причам о ИоуТубе онлајн плејеру за Андроид са локалним плејлистама, каналима и препорукама.

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

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

Нажалост, након инсталирања апликације Цханнел Вхителист, откривена је још једна прозаичнија, али ипак фатална мана - НИХ (и, што је најважније, мој син) сматрао је да њен интерфејс није баш згодан, посебно након навике да користим ИоуТубе Кидс плејер.

Генерално, након неког времена био сам спреман да направим сопствену имплементацију. Након неког времена, постало је могуће ставити ознаку на прво издање.

Кључне карактеристике:

  • Додајте своје омиљене канале и листе песама - они ће бити сачувани и индексирани у локалној бази података
  • У оквиру додатих плејлиста искључите непотребне видео снимке ако вам нису потребни
  • Листа препорука се генерише насумично само од канала и плејлиста додатих апликацији

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

Испод је детаљнији преглед главних функција, као и неке техничке детаље о томе како да репродукујете ИоуТубе видео снимке у вашој Андроид апликацији без коришћења Гоогле АПИ-ја и веб омотача.

На главном екрану и на екрану плејера: насумичне препоруке са ненасумичних канала

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Тренутна претрага у локалној бази података

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) => Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Додајте нови канал или плејлисту

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Претражујте по имену на мрежи или унесите познату адресу. Листа видео снимака канала или плејлисте се чува у локалној бази података; иконе се не кеширају.

Динамичка листа за репродукцију - репродукујте резултате претраге

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) => Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

У видео препорукама ће бити само видео снимци који задовољавају упит за претрагу.

Слично томе, ако отворите видео из подешавања листе за репродукцију, само видео снимци са исте плејлисте ће се појавити на листи препорука.

Плејлисте и канали се могу привремено искључити и поново укључити

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Имајте на уму: видео снимци са онемогућене плејлисте ће такође нестати из резултата претраге, историје гледања и листе фаворита. Али не брините, они ће се тамо поново појавити одмах након што се листа за репродукцију поново укључи.

Додајте видео на црну листу

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Блокирани видео неће бити приказан у препорукама, у резултатима претраге и нестаће са листе омиљених и из историје гледања. Видео ће и даље бити видљив у подешавањима плејлисте.

Погледајте црну листу и поново омогућите ставке блокиране грешком:
Подешавања > мени заглавља > Црна листа

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Омиљени видео снимци и историја гледања

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Омиљени видео снимци на екрану плејера су означени звездицом у горњем десном углу.

Контекстуални менији у наслову екрана и дуги клик у галеријама и листама

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Копирајте име или адресу видеа или листе за репродукцију на екрану за гледање или на било којој листи.

Брзи почетак - додајте препоручене канале и листе песама

Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?) => Смрт Косхцхеија је на листи препорука (да ли је могуће да Јутјуб буде удобан и безбедан?)

Апликација ће одмах изгледати као на слици изнад.

Непотребни канали и листе песама се могу искључити или избрисати у подешавањима.

Инсталација

Страница пројекта: https://github.com/sadr0b0t/yashlang/
на енглеском: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
издања: https://github.com/sadr0b0t/yashlang/releases

Имајте на уму да пребацивање између различитих верзија из различитих извора на истом уређају неће радити због различитих потписа апк датотеке; пре него што инсталирате верзију из новог извора, прво ћете морати да избришете инсталирану верзију заједно са подацима - кеш плејлисте и историју прегледања (или откријте како да пренесете податке).

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

Не захтева Гоогле/ИоуТубе налог, потребан вам је само интернет, користи следеће библиотеке:

Отворени код, бесплатна ГПЛв3 лиценца.

питање: Да ли је генерално легално скидати веб странице без дозволе (или уз изричиту забрану) аутора? Гоогле уклања апликације са Гоогле Плаи-а, који не користе свој АПИ, већ анализирају своје сајтове, јер крше свој кориснички уговор.
одговор: наравно, легално је, на вама је који алат ћете користити за читање јавно доступних информација. У наставку: Амерички суд је у потпуности легализовао стругање веб странице и забранио техничко мешање у њега., али Гул можда има другачије мишљење; лично, ја још немам жељу да идем на амерички суд да их убеђујем.

Неки код

библиотека НевПипеЕктрацтор - пројекат подршке играчима НевПипе, омогућава вам да преузмете листу видео снимака за одређени канал или плејлисту, преузмете детаљне информације о познатом видео снимку (оно што је видљиво на веб страници видео снимка), добијете адресу иконе видеа, а такође и адресу видео снимка поток.

Код за учитавање плејлисте је мало гломазан, па га нећу давати овде, за заинтересоване погледајте изворни код, то је у суштини класа ЦонтентЛоадер.

Хајде да видимо како да добијемо адресу видео стрима са адресе јавне видео странице и пустимо га у плејеру.

Повежите библиотеку на
апп/буилд.градле

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

Занимљиво је да после овога и даље нећете моћи да га користите, јер... примери ће се жалити на класу Довнлоадер која недостаје. Може се копирати у пројекат из директоријума аутоматизованих тестова НевПипеЕктрацтор/ектрацтор/срц/тест/јава/орг/сцхаби/невпипе/Довнлоадер.јава - ради за верзију 0.17.4 (изгледа да је овај део преуређен у новијој верзији библиотеке, али још треба да проверимо).

Добијте адресу видео стрима према адреси видео странице на ИоуТубе веб локацији:

апп/срц/маин/јава/су/садробот/иасхланг/цонтроллер/ЦонтентЛоадер.јава

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

Видео адреса итВидУрл може бити јавна адреса странице било ког видео снимка на ИоуТубе веб локацији, нпр. https://www.youtube.com/watch?v=pd2RlatmNRk

Играч ће бити ЕкоПлаиер од самог Гугла. Ово није веб омотач преко ИоуТубе-а, већ прави уграђени плејер за репродукцију било којих видео записа, прилично флексибилан и прилагодљив. Такође може да репродукује видео стримове са ИоуТубе-а ако му наведете тачну адресу. Управо смо добили адресу стрима, па да видимо како да је пошаљемо играчу.

Повежите библиотеку са пројектом апп/буилд.градле:

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

Нећемо разматрати све нијансе постављања компоненте плејера на екран апликације (можете погледати примере на веб локацији пројекта или у коду), само ћемо погледати како да почнете да репродукујете видео са ИоуТубе-а у плејеру на адреси горе примљена адреса:

апп/срц/маин/јава/су/садробот/иасхланг/ВатцхВидеоАцтивити.јава

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

Познати проблеми

  • Неће пуштати видео снимке са старосним ограничењима који захтевају пријаву на ваш Гоогле/ИоуТубе налог

на пример: Иља Мурометс, Концерн Мосфилм Цинема, Руслан и Људмила филм 1, филмски концерн Мосфилм

савет: додајте такве видео снимке на црну листу или замолите аутора видеа да уклони ограничење које је постављено грешком.

  • Неки емитовани видео снимци за које услуга враћа нулту дужину неће се репродуковати (за такве видео снимке, трајање на листама и галерији је означено као „[дур ундеф]“)

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

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

  • Видео снимци који су доступни само преко директних веза можда неће бити укључени у локалну плејлисту, чак и ако преузмете све видео снимке корисника

на пример: Таминг оф Фире Епизода 1, Мосфилм Цинема Цонцерн

  • Ако наиђете на јавни видео који не захтева пријављивање, репродукује се у претраживачу, али се не репродукује у плејеру, пошаљите извештај о грешци (сасвим је могуће да је проблем већ решен у новој верзији НевПипеЕктрацтор и мораћете само да ажурирате склоп са овом верзијом, на пример).

  • Интерфејс може успорити ако је интернет спор (али није искључен)

Као резултат тога,

Мој син је прешао са таблета на Самсунг паметни ТВ, који не може да покреће Андроид апликације. Стога је најбоља родитељска контрола и даље лична.

Али испоставило се да је апликација довољно згодна да и сам почнем да је користим. Први утисак из раних радних верзија био је да сам у другом свету. Сав садржај се преузима са Јутјуба, али ово више није Јутјуб, већ нешто друго, безбедно и контролисано, као да сте стоногу извадили из ока и ставили у стаклену теглу. И све је у препорукама.

Извор: ввв.хабр.цом

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