Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

L-introduzzjoni hija qasira: Irrid nitkellem dwar il-player online ta 'YouTube għal Android b'playlists lokali, kanali u rakkomandazzjonijiet.

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Introduzzjoni estiża:
Xi żmien ilu ltqajt ma' eżattament l-istess problema bħall-awtur ta' applikazzjoni mill-isbaħ Lista tal-Kanal White, u ddeterminat għalija nnifsi eżattament l-istess attitudni lejha: Irrid inkun kapaċi nagħti lit-tifel jew it-tifel tiegħi tablet jew smartphone b'kartuns minn żmien għal żmien, imma jien xejn kuntent fejn, wara 2-3 klikks, il-lista ta 'rakkomandazzjonijiet fl-applikazzjonijiet standard - klijenti YouTube - jieħu l-wild.

Sfortunatament, wara l-installazzjoni tal-applikazzjoni Channel Whitelist, ġie skopert difett ieħor aktar prosajku, iżda xorta fatali - NIH I (u, l-aktar importanti, ibni) sibt l-interface tagħha mhux konvenjenti ħafna, speċjalment wara d-drawwa li tuża l-player YouTube Kids.

B'mod ġenerali, wara xi żmien kont lest li nagħmel l-implimentazzjoni tiegħi stess. Wara xi żmien, sar possibbli li titqiegħed tikketta fuq l-ewwel rilaxx.

Karatteristiċi ewlenin:

  • Żid il-kanali u l-playlists favoriti tiegħek - dawn se jiġu ssejvjati u indiċjati fid-database lokali
  • Fi ħdan playlists miżjuda, itfi vidjows mhux meħtieġa jekk m'għandekx bżonnhom
  • Il-lista ta 'rakkomandazzjonijiet hija ġġenerata b'mod każwali biss minn kanali u playlists miżjuda mal-applikazzjoni

Sors miftuħ, liċenzja GPLv3: https://github.com/sadr0b0t/yashlang/

Hawn taħt hawn ħarsa ġenerali lejn il-karatteristiċi ewlenin f'aktar dettall, flimkien ma 'xi dettalji tekniċi dwar kif tilgħab vidjows YouTube fl-applikazzjoni Android tiegħek mingħajr ma tuża l-API ta' Google u l-wrappers tal-web.

Fuq l-iskrin prinċipali u fuq l-iskrin tal-plejer: rakkomandazzjonijiet każwali minn kanali mhux każwali

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Tfittxija immedjata fid-database lokali

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) => Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Żid kanal jew playlist ġdid

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Fittex bl-isem online jew daħħal indirizz magħruf. Il-lista ta' vidjows ta' kanal jew playlist tiġi ssejvjata fid-database lokali; l-ikoni mhumiex fil-cache.

Playlist dinamiku - tilgħab riżultati tat-tfittxija

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) => Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Fir-rakkomandazzjonijiet tal-vidjo se jkun hemm biss vidjows li jissodisfaw il-mistoqsija tat-tfittxija.

Bl-istess mod, jekk tiftaħ vidjo mill-issettjar tal-playlist, vidjows biss mill-istess playlist se jidhru fil-lista ta 'rakkomandazzjonijiet.

Playlists u kanali jistgħu jintfew u jerġgħu jinxtegħlu temporanjament

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Jekk jogħġbok innota: vidjows minn playlist b'diżabilità se jisparixxu wkoll mir-riżultati tat-tfittxija, l-istorja tal-wiri u mil-lista tal-favoriti. Imma tinkwetax, jerġgħu jidhru hemm immedjatament wara li l-playlist terġa' tinxtegħel.

Żid vidjo mal-lista sewda

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Vidjow imblukkat mhux se jintwera fir-rakkomandazzjonijiet, fir-riżultati tat-tfittxija, u se jisparixxi mil-lista tal-favoriti u mill-istorja tal-wiri. Il-video xorta se jkun viżibbli fis-settings tal-playlist.

Ara l-lista s-sewda u erġa' ppermetti l-oġġetti mblukkati bi żball:
Settings > header menu > Blacklist

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Vidjows favoriti u storja tal-wiri

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Vidjows favoriti fuq l-iskrin tal-plejer huma mmarkati b'asterisk fir-rokna ta' fuq tal-lemin.

Menus tal-kuntest fit-titlu tal-iskrin u kklikkja fit-tul fil-galleriji u l-listi

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

Ikkopja l-isem jew l-indirizz ta’ vidjow jew playlist fl-iskrin tal-wiri jew fi kwalunkwe lista.

Bidu malajr - żid kanali rakkomandati u playlists

Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?) => Il-mewt ta 'Koshchei tinsab fuq il-lista ta' rakkomandazzjonijiet (huwa possibbli li tagħmel YouTube komdu u sikur?)

L-applikazzjoni se tidher immedjatament bħall-screenshots hawn fuq.

Il-kanali u l-playlists mhux meħtieġa jistgħu jintfew jew jitħassru fis-settings.

Installazzjoni

Paġna tal-proġett: https://github.com/sadr0b0t/yashlang/
bl-Ingliż: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
rilaxxi: https://github.com/sadr0b0t/yashlang/releases

Żomm f'moħħok li l-bidla bejn verżjonijiet differenti minn sorsi differenti fuq l-istess apparat mhux se taħdem minħabba firem differenti tal-fajl apk; qabel ma tinstalla l-verżjoni minn sors ġdid, l-ewwel ikollok tħassar il-verżjoni installata flimkien mad-dejta - il-cache tal-playlist u l-istorja tal-ibbrawżjar (jew insemmu kif tittrasferixxi d-data).

Dettalji tekniċi

Ma teħtieġx kont Google/YouTube, għandek bżonn biss l-Internet, tuża l-libreriji li ġejjin:

Sors miftuħ, liċenzja GPLv3 b'xejn.

mistoqsija: Huwa ġeneralment legali li jinbarax websajts mingħajr permess (jew bi projbizzjoni espliċita) mill-awturi? Google tneħħi apps minn Google Play, li ma jużawx l-API tagħhom, iżda jparse s-siti tagħhom, għaliex jiksru l-ftehim tal-utent tagħhom.
tweġiba: ovvjament, huwa legali, f'idejnek liema għodda tuża biex taqra informazzjoni disponibbli pubblikament. Barra minn hekk: Qorti tal-Istati Uniti legalizzat kompletament il-brix tal-websajt u pprojbit interferenza teknika magħha., iżda Gul jista’ jkollu opinjoni differenti; personalment, għad m’għandix ix-xewqa li mmur f’qorti Amerikana biex nikkonvinċihom.

Xi kodiċi

Librerija NewPipeExtractor - proġett ta' appoġġ għall-plejers Newpipe, jippermettilek tniżżel lista ta 'vidjows għal kanal speċifikat jew playlist, tniżżel informazzjoni dettaljata dwar vidjo famuż (dak li huwa viżibbli fuq il-paġna web tal-vidjo), tikseb l-indirizz tal-ikona tal-vidjow, u tikseb ukoll l-indirizz tal-vidjow nixxiegħa.

Il-kodiċi għat-tagħbija tal-playlist huwa ftit ingombranti, għalhekk mhux se nagħtiha hawn, għal dawk interessati, agħti ħarsa lejn il-kodiċi tas-sors, bażikament hija klassi ContentLoader.

Ejja naraw kif tikseb l-indirizz ta 'fluss tal-vidjo mill-indirizz tal-paġna pubblika tal-vidjo u tilgħabha fil-player.

Qabbad il-librerija ma'
app/build.gradle

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

Hija kurjuża li wara dan xorta ma tkunx tista’ tużah, għax... eżempji se jilmentaw dwar il-klassi Downloader nieqsa. Jista 'jiġi kkupjat għall-proġett mid-direttorju tat-testijiet awtomatizzati NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - jaħdem għall-verżjoni 0.17.4 (jidher li din il-parti saret mill-ġdid f'verżjoni aktar ġdida tal-librerija, iżda għad għandna bżonn niċċekkjaw).

Ikseb l-indirizz tal-fluss tal-vidjo mill-indirizz tal-paġna tal-vidjo fuq il-websajt ta '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;
    }

L-indirizz tal-vidjo ytVidUrl jista' jkun l-indirizz pubbliku tal-paġna ta' kwalunkwe vidjo fuq il-websajt ta' YouTube, pereżempju https://www.youtube.com/watch?v=pd2RlatmNRk

Il-plejer se exoplayer minn Google stess. Dan mhuwiex tgeżwir tal-web fuq YouTube, iżda player inkorporat reali biex tilgħab kwalunkwe vidjows, pjuttost flessibbli u customizable. Jista 'wkoll jilgħab nixxigħat tal-vidjo minn YouTube jekk tipprovdih bl-indirizz korrett. Għadna kemm irċevejna l-indirizz tan-nixxiegħa, allura ejja naraw kif tibgħatha lill-plejer.

Qabbad il-librerija mal-proġett app/build.gradle:

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

Aħna mhux se nikkunsidraw l-sfumaturi kollha tat-tqegħid tal-komponent tal-plejer fuq l-iskrin tal-applikazzjoni (tista 'tħares lejn l-eżempji fuq il-websajt tal-proġett jew fil-kodiċi), aħna se nħarsu biss lejn kif tibda tilgħab vidjo minn YouTube fil-player fuq l-indirizz riċevut hawn fuq:

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

Kwistjonijiet Magħrufa

  • Mhux se tilgħab vidjows b'restrizzjonijiet ta 'età li jeħtieġu login fil-kont tiegħek Google/YouTube

per eżempju: Ilya Muromets, Mosfilm Cinema Concern, Ruslan u Lyudmila film 1, Mosfilm Film Concern

parir: żid tali vidjows mal-lista sewda jew staqsi lill-awtur tal-vidjo biex ineħħi r-restrizzjoni li ġiet stabbilita bi żball.

  • Xi vidjows tax-xandir li għalihom is-servizz jirritorna tul żero mhux se jintlagħbu (għal vidjows bħal dawn, it-tul fil-listi u fil-gallerija huwa mmarkat bħala “[dur undef]”).

per eżempju: Stenna għaliha! Il-Ħwejjeġ kollha ta' Soyuzmultfilm HD (Katuns għat-tfal), Cartoons minn Soyuzmultfilm studio, L-aqwa cartoons Soyuzmultfilm, Cartoons mill-istudjo Soyuzmultfilm

parir: żid tali vidjows mal-lista sewda.

  • Vidjows li huma disponibbli biss permezz ta' links diretti jistgħu ma jiġux inklużi fil-playlist lokali, anki jekk tniżżel il-vidjows kollha tal-utent

per eżempju: Taming of Fire Episodju 1, Tħassib taċ-Ċinema Mosfilm

  • Jekk tiltaqa 'ma' vidjo pubbliku li ma jeħtieġx login, jilgħab fil-browser, iżda ma jilgħabx fil-player, ibgħat rapport tal-bug (huwa pjuttost possibbli li l-problema tkun diġà ġiet irranġata fil-verżjoni l-ġdida NewPipeExtractor u ser ikollok bżonn biss taġġorna l-assemblaġġ b'din il-verżjoni, per eżempju).

  • L-interface tista' tnaqqas jekk l-Internet ikun bil-mod (iżda mhux mitfi)

Bħala riżultat,

Ibni mċaqlaq minn tablet għal smart TV Samsung, li ma jistax iħaddem applikazzjonijiet Android. Għalhekk, l-aħjar kontroll tal-ġenituri għadu personali.

Iżda l-applikazzjoni rriżulta li kienet konvenjenti biżżejjed biex nibda nużaha jien. L-ewwel impressjoni mill-verżjonijiet tax-xogħol bikrija kienet li kont f'dinja oħra. Il-kontenut kollu jitniżżel minn YouTube, iżda dan m'għadux YouTube, iżda xi ħaġa oħra, sigura u kkontrollata, bħallikieku ħarġet ċentipede minn għajnejk u poġġih ġo vażett tal-ħġieġ. U huwa kollu dwar ir-rakkomandazzjonijiet.

Sors: www.habr.com

Żid kumment