Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Destpêk kurt e: Ez dixwazim li ser lîstikvanê serhêl YouTube-ê ji bo Android-ê bi lîsteyên lîstikê, kanal û pêşniyarên herêmî biaxivim.

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Pêşgotinek berfireh:
Demek berê ez rastî heman pirsgirêkê hatim ku nivîskarê serîlêdanek ecêb e Lîsteya spî ya kanalê, û ji xwe re tam heman helwest li hember wê diyar kir: Ez dixwazim dem bi dem bikaribim tabletek an smartfonek bi kartonan bidim zarokê xwe, lê ez qet ne kêfxweş im ku, piştî 2-3 klîk, navnîşê li ku derê ye. pêşniyarên di serîlêdanên standard de - xerîdarên YouTube - zarok digire.

Mixabin, piştî sazkirina serîlêdana Channel Whitelist, xeletiyek din a prozaîk, lê dîsa jî kujer hate keşif kirin - NIH I (û ya herî girîng, kurê min) pêwendiya wê ne pir rehet dît, nemaze piştî adeta karanîna lîstikvanê YouTube Kids.

Bi gelemperî, piştî demekê ez amade bûm ku pêkanîna xwe bikim. Piştî demekê, mimkun bû ku li ser berdana yekem nîşanek were danîn.

Taybetmendiyên girîng

  • Kanal û lîsteyên xweyên bijare lê zêde bikin - ew ê di databasa herêmî de werin tomarkirin û navnîş kirin
  • Di nav lîsteyên lêzêdekirî de, heke hûn ne hewce ne vîdyoyên nepêwîst bişkînin
  • Navnîşa pêşniyaran tenê ji kanal û lîsteyên lîstikê yên ku li serîlêdanê hatine zêdekirin bi korfelaqî têne çêkirin

Çavkaniya vekirî, lîsansa GPLv3: https://github.com/sadr0b0t/yashlang/

Li jêr nihêrînek li ser taybetmendiyên sereke bi hûrgulî heye, plus hin hûrguliyên teknîkî li ser meriv çawa vîdyoyên YouTube-ê di serîlêdana xweya Android-ê de lîstin bêyî karanîna Google API û pêçanên malperê.

Li ser ekrana sereke û li ser ekrana lîstikvanê: Pêşniyarên rasthatî yên ji kanalên ne-random

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Lêgerîna tavilê di databasa herêmî de

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) => Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Kanalek an lîstikek nû lê zêde bike

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Bi navê serhêl bigerin an navnîşek naskirî têxin. Name

Lîsteya lîstika dînamîk - encamên lêgerînê bilîzin

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) => Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Di pêşniyarên vîdyoyê de dê tenê vîdyoyên ku pirsa lêgerînê têr dikin hebin.

Bi heman rengî, heke hûn vîdyoyek ji mîhengên navnîşa lîstikê vekin, tenê vîdyoyên ji heman lîstikê dê di navnîşa pêşniyaran de xuya bibin.

Lîsteyên lîstikê û kanal dikarin bi demkî werin girtin û ji nû ve werin girtin

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Ji kerema xwe not: Vîdyoyên ji navnîşek lîstika neçalak dê ji encamên lêgerînê, dîroka dîtinê û ji navnîşa bijare jî winda bibin. Lê xem neke, ew ê tavilê piştî ku lîstika lîstikê ji nû ve vebe li wir dîsa xuya bibin.

Vîdyoyek li navnîşa reş zêde bikin

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Vîdyoyek astengkirî dê di pêşniyaran de, di encamên lêgerînê de neyê xuyang kirin û dê ji navnîşa bijare û ji dîroka dîtinê winda bibe. Vîdyo dê hîn jî di mîhengên lîsteya lîstikê de xuya bibe.

Lîsteya reş bibînin û tiştên ku bi xeletî hatine asteng kirin ji nû ve çalak bikin:
Mîheng> menuya sernavê> Lîsteya reş

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Vîdyoyên bijare û dîroka dîtinê

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Vîdyoyên bijare yên li ser ekrana lîstikvanê bi stêrkek li quncika jorîn a rastê têne nîşankirin.

Pêşekên naverokê di sernavê ekranê de û li galerî û navnîşan dirêj-klîk bikin

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Nav an navnîşana vîdyoyek an navnîşek lîstikê di dîmendera dîtinê de an di nav her navnîşek de kopî bikin.

Destpêka bilez - kanal û navnîşên lîstikê yên pêşniyarkirî zêde bikin

Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?) => Mirina Koshchei di navnîşa pêşniyaran de ye (ma gengaz e ku hûn YouTube xweş û ewledar bikin?)

Serlêdan dê tavilê mîna dîmenên li jor xuya bike.

Di mîhengan de kanal û lîsteyên lîstikê yên nehewce dikarin bêne girtin an jêbirin.

mîhengê

Rûpelê projeyê: https://github.com/sadr0b0t/yashlang/
bi Îngilîzî: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
belav dike: https://github.com/sadr0b0t/yashlang/releases

Bînin bîra xwe ku guheztina di navbera guhertoyên cihêreng ên ji çavkaniyên cihêreng ên li ser heman cîhazê de dê ji ber îmzeyên cihêreng ên pelê apk nexebite; berî ku guhertoya ji çavkaniyek nû saz bikin, hûn ê pêşî neçar bikin ku guhertoya sazkirî digel daneyan jêbirin - cache lîsteya lîstikê û dîroka gerokê (an jî fêm bikin ka meriv çawa daneyê veguhezîne).

Agahdariyên teknîkî

Hesabek Google/YouTube hewce nake, hûn tenê Înternetê hewce ne, pirtûkxaneyên jêrîn bikar tîne:

Çavkaniya vekirî, lîsansa GPLv3 belaş.

pirs: Ma bi gelemperî qanûnî ye ku meriv malperan bêyî destûr (an bi qedexeyek eşkere) ji nivîskaran veqetîne? Google sepanan ji Google Play radike, ku API-ya xwe bikar naynin, lê malperên xwe pars dikin, ji ber ew peymana bikarhênerê xwe binpê dikin.
bersiv: bê guman, ew qanûnî ye, bi we ve girêdayî ye ku hûn kîjan amûrê bikar bînin da ku agahdariya gelemperî bixwînin. Wekî din: Dadgehek Amerîkî bi tevahî qanûnîkirina malperê qanûnî kiriye û destwerdana teknîkî jê re qedexe kiriye., lê dibe ku nêrînek din a Gul hebe, bi xwe ez hîna nexwestim ku ez biçim dadgeheke Amerîkî ku wan qanih bikim.

Hin kod

Pirtûkxaneyê NewPipeExtractor - projeya piştgiriya player Newpipe, dihêle hûn ji bo kanalek an navnîşek lîstikê navnîşek vîdyoyan dakêşin, agahdariya hûrgulî li ser vîdyoyek navdar dakêşin (ya ku li ser malpera vîdyoyê xuya dibe), navnîşana îkonê vîdyoyê bistînin, û her weha navnîşana vîdyoyê jî bistînin. herrok.

Koda ji bo barkirina lîsteya lîstikê piçek giran e, ji ber vê yekê ez ê li vir nadim, ji bo kesên eleqedar, li koda çavkaniyê binihêrin, ew bi bingehîn çînek e ContentLoader.

Ka em bibînin ka meriv çawa navnîşana weşanek vîdyoyê ji navnîşana rûpela vîdyoya gelemperî digire û wê di lîstikvanê de bilîze.

Pirtûkxaneyê bi hev ve girêdin
app/build.gradle

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

Meraq e ku piştî vê jî hûn ê nikaribin wê bikar bînin, ji ber ku ... nimûne dê li ser dersa Dakêşkerê winda gilî bikin. Ew dikare ji pelrêça testên otomatîkî li projeyê were kopî kirin NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - ji bo guhertoya 0.17.4 dixebite (xuya ye ku ev beş di guhertoyek nû ya pirtûkxaneyê de ji nû ve hatî çêkirin, lê dîsa jî pêdivî ye ku em kontrol bikin).

Navnîşana weşana vîdyoyê bi navnîşana rûpela vîdyoyê ya li ser malpera YouTube-ê bistînin:

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

Navnîşana vîdyoyê ytVidUrl dikare bibe navnîşana giştî ya rûpela her vîdyoyek li ser malpera YouTube-ê, mînakî https://www.youtube.com/watch?v=pd2RlatmNRk

Lîstik dê bibe exoplayer ji Google bixwe. Ev ne pêçek webê ye li ser YouTube, lê lîstikvanek rastîn a pêvekirî ye ji bo lîstina vîdyoyan, pir maqûl û xwerû. Di heman demê de heke hûn navnîşana rast peyda bikin, ew dikare vîdyoyên vîdyoyê ji YouTube-ê jî bilîze. Me tenê navnîşana weşanê wergirt, ji ber vê yekê em bibînin ka meriv wê çawa ji lîstikvan re bişîne.

Pirtûkxaneyê bi projeyê ve girêdin app/build.gradle:

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

Em ê hemî nuwazeyên danîna pêkhateya lîstikvanê li ser ekrana serîlêdanê nehesibînin (hûn dikarin li mînakan li ser malpera projeyê an di kodê de binihêrin), em ê tenê binihêrin ka meriv çawa dest bi lîstina vîdyoyek ji YouTube-ê di lîstikvanê de dike navnîşana ku li jor hatî wergirtin:

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

Pirsgirêkên naskirî

  • Dê vîdyoyên bi tixûbên temen ên ku hewcedariya têketinê li hesabê xweya Google/YouTube-ê heye neleyze

bo nimûne: Ilya Muromets, Xemgîniya Sînemaya Mosfilm, Fîlmê Ruslan û Lyudmila 1, Xemgîniya Fîlm a Mosfilm

şîret: Vîdyoyên weha li navnîşa reş zêde bikin an ji nivîskarê vîdyoyê bipirsin ku ew qedexeya ku bi xeletî hatî danîn rabike.

  • Hin vîdyoyên weşanê yên ku karûbar dirêjahiya wan sifir vedigerîne dê neyên lîstin (ji bo vîdeoyên weha, dirêjahiya di navnîşan û galeriyê de wekî "[dur undef]" tê nîşankirin)

bo nimûne: Li bendê bin! Hemî Hejmarên Soyuzmultfilm HD (Kartonên ji bo zarokan), Karîkatûrên ji studyoya Soyuzmultfilm, Karîkatûrên herî jor Soyuzmultfilm, Karîkatûrên ji studyoya Soyuzmultfilm

şîret: Vîdyoyên weha li navnîşa reş zêde bikin.

  • Vîdyoyên ku tenê bi girêdanên rasterast têne peyda kirin dibe ku di navnîşa lîstika herêmî de neyên nav kirin, hetta hûn hemî vîdyoyên bikarhêner dakêşînin.

bo nimûne: Kêmkirina Agirî Beşa 1, Xemgîniya Sînemaya Mosfilm

  • Ger hûn rastî vîdyoyek gelemperî ku têketinê hewce nake, di gerokê de dilîze, lê di lîstikvanê de naleyîze, raporek xeletiyê bişînin (mimkûn e ku pirsgirêk jixwe di guhertoya nû de hatî rast kirin NewPipeExtractor û hûn ê tenê hewce bikin ku civînê bi vê guhertoyê nûve bikin, bo nimûne).

  • Ger Înternet hêdî be (lê ne qut nebe) dibe ku navbeynkar hêdî bibe

Di encama vê çalakiyê,

Kurê min ji tabletê bar kir TV-ya smart Samsung, ku nikare serîlêdanên Android-ê bixebite. Ji ber vê yekê, çêtirîn kontrola dêûbavê hîn jî kesane ye.

Lê serîlêdan ji bo ku ez bixwe dest bi karanîna wê bikim ew qas hêsan bû. Bandora yekem ji guhertoyên xebatê yên destpêkê ev bû ku ez li cîhanek din bûm. Hemî naverok ji YouTube tê daxistin, lê ev êdî ne YouTube ye, lê tiştek din e, ewledar û kontrolkirî ye, mîna ku we santîpek ji çavê xwe derxîne û têxe qurmek cam. Û ew hemî li ser pêşniyaran e.

Source: www.habr.com

Add a comment