KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Ievads ir Ä«ss: es vēlos runāt par YouTube tieÅ”saistes atskaņotāju Android ierÄ«cēm ar vietējiem atskaņoÅ”anas sarakstiem, kanāliem un ieteikumiem.

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Izvērsts ievads:
Pirms kāda laika saskāros ar tieÅ”i tādu paÅ”u problēmu kā brÄ«niŔķīgas aplikācijas autors Kanālu baltais saraksts, un noteicu sev tieÅ”i tādu paÅ”u attieksmi pret to: es gribu ik pa laikam bērnam uzdāvināt planÅ”etdatoru vai viedtālruni ar multenēm, bet mani nepavisam neapmierina tas, kur pēc 2-3 klikŔķiem parādās saraksts ieteikumu standarta lietojumprogrammās - YouTube klienti - ņem bērnu.

Diemžēl pēc Channel Whitelist aplikācijas instalēŔanas tika atklāts vēl viens prozaiskāks, bet tomēr liktenÄ«gs trÅ«kums – NIH I (un, galvenais, manam dēlam) tā interfeiss Ŕķita ne pārāk ērts, it Ä«paÅ”i pēc ieraduma lietot YouTube Kids atskaņotāju.

Kopumā pēc kāda laika es biju gatavs veikt savu realizāciju. Pēc kāda laika kļuva iespējams ievietot tagu pirmajam laidienam.

Galvenās iezīmes:

  • Pievienojiet savus iecienÄ«tākos kanālus un atskaņoÅ”anas sarakstus - tie tiks saglabāti un indeksēti vietējā datu bāzē
  • Pievienotajos atskaņoÅ”anas sarakstos izslēdziet nevajadzÄ«gos videoklipus, ja tie nav nepiecieÅ”ami
  • Ieteikumu saraksts tiek Ä£enerēts nejauÅ”i tikai no lietojumprogrammai pievienotajiem kanāliem un atskaņoÅ”anas sarakstiem

Atvērtā koda, GPLv3 licence: https://github.com/sadr0b0t/yashlang/

Tālāk ir sniegts sīkāks pārskats par galvenajām funkcijām, kā arī daži tehniski dati par to, kā atskaņot YouTube videoklipus savā Android lietojumprogrammā, neizmantojot Google API un tīmekļa iesaiņojumus.

Galvenajā ekrānā un atskaņotāja ekrānā: nejauÅ”i ieteikumi no kanāliem, kas nav nejauÅ”i izvēlēti

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

TÅ«lÄ«tēja meklēŔana vietējā datu bāzē

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) => KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Pievienojiet jaunu kanālu vai atskaņoÅ”anas sarakstu

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Meklējiet pēc vārda tieÅ”saistē vai ievietojiet zināmu adresi. Kanāla vai atskaņoÅ”anas saraksta videoklipu saraksts tiek saglabāts vietējā datu bāzē; ikonas netiek saglabātas keÅ”atmiņā.

Dinamiskais atskaņoÅ”anas saraksts ā€” atskaņojiet meklēŔanas rezultātus

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) => KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Video ieteikumos bÅ«s tikai tie videoklipi, kas apmierinās meklēŔanas vaicājumu.

Tāpat, ja videoklipu atverat atskaņoÅ”anas saraksta iestatÄ«jumos, ieteikumu sarakstā tiks parādÄ«ti tikai videoklipi no tā paÅ”a atskaņoÅ”anas saraksta.

AtskaņoÅ”anas sarakstus un kanālus var Ä«slaicÄ«gi izslēgt un atkal ieslēgt

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

LÅ«dzu, ņemiet vērā: videoklipi no atspējota atskaņoÅ”anas saraksta arÄ« pazudÄ«s no meklēŔanas rezultātiem, skatīŔanās vēstures un izlases saraksta. Bet neuztraucieties, tie atkal parādÄ«sies tÅ«lÄ«t pēc atskaņoÅ”anas saraksta atkal ieslēgÅ”anas.

Pievienojiet videoklipu melnajam sarakstam

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Bloķēts videoklips netiks rādÄ«ts ieteikumos, meklēŔanas rezultātos un pazudÄ«s no izlases saraksta un skatīŔanās vēstures. Video joprojām bÅ«s redzams atskaņoÅ”anas saraksta iestatÄ«jumos.

Skatiet melno sarakstu un atkārtoti iespējojiet kļūdas dēļ bloķētos vienumus:
Iestatījumi > galvenes izvēlne > Melnais saraksts

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

IecienÄ«tākie videoklipi un skatīŔanās vēsture

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

IecienÄ«tākie videoklipi atskaņotāja ekrānā ir atzÄ«mēti ar zvaigznÄ«ti augŔējā labajā stÅ«rÄ«.

Konteksta izvēlnes ekrāna virsrakstā un ilgi noklikŔķiniet galerijās un sarakstos

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Kopējiet videoklipa vai atskaņoÅ”anas saraksta nosaukumu vai adresi skatīŔanās ekrānā vai jebkurā sarakstā.

Ātrais sākums ā€” pievienojiet ieteiktos kanālus un atskaņoÅ”anas sarakstus

KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?) => KoŔčeja nāve ir ieteikumu sarakstā (vai YouTube ir iespējams padarÄ«t mājÄ«gu un droÅ”u?)

Lietojumprogramma nekavējoties izskatÄ«sies kā iepriekÅ” redzamajos ekrānuzņēmumos.

NevajadzÄ«gos kanālus un atskaņoÅ”anas sarakstus var izslēgt vai dzēst iestatÄ«jumos.

UzstādīŔana

Projekta lapa: https://github.com/sadr0b0t/yashlang/
angliski: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
izlaidumi: https://github.com/sadr0b0t/yashlang/releases

Ņemiet vērā, ka pārslēgÅ”anās starp dažādām versijām no dažādiem avotiem vienā un tajā paŔā ierÄ«cē nedarbosies, jo apk failam ir dažādi paraksti; pirms versijas instalēŔanas no jauna avota vispirms bÅ«s jāizdzēŔ instalētā versija kopā ar datiem. atskaņoÅ”anas saraksta keÅ”atmiņu un pārlÅ«koÅ”anas vēsturi (vai izdomājiet, kā pārsÅ«tÄ«t datus).

Tehniskās detaļas

Nav nepiecieÅ”ams Google/YouTube konts, nepiecieÅ”ams tikai internets, tiek izmantotas Ŕādas bibliotēkas:

Atvērtā koda, bezmaksas GPLv3 licence.

jautājums: vai vispār ir likumīgi notīrīt vietnes bez autoru atļaujas (vai ar nepārprotamu aizliegumu)? Google noņem lietotnes no pakalpojuma Google Play, kas neizmanto savu API, bet parsē savas vietnes, jo viņi pārkāpj savu lietotāja līgumu.
atbilde: protams, tas ir likumÄ«gi, tas ir atkarÄ«gs no jums, kuru rÄ«ku izmantot, lai lasÄ«tu publiski pieejamu informāciju. Turklāt: ASV tiesa ir pilnÄ«bā legalizējusi vietņu skrāpēŔanu un aizliedza tajā veikt tehniskus iejaukÅ”anos., bet Gulam var bÅ«t cits viedoklis; personÄ«gi man vēl nav vēlmes vērsties Amerikas tiesā, lai viņus pārliecinātu.

Kaut kāds kods

Bibliotēka JaunsPipeExtractor - spēlētāju atbalsta projekts NewPipe, ļauj lejupielādēt noteikta kanāla vai atskaņoÅ”anas saraksta videoklipu sarakstu, lejupielādēt detalizētu informāciju par slavenu videoklipu (kas ir redzams videoklipa tÄ«mekļa lapā), iegÅ«t video ikonas adresi, kā arÄ« iegÅ«t videoklipa adresi. straume.

AtskaņoÅ”anas saraksta ielādes kods ir nedaudz apgrÅ«tinoÅ”s, tāpēc es to Å”eit nesniegÅ”u, tiem, kas interesējas, ieskatieties avota kodā, tā bÅ«tÄ«bā ir klase ContentLoader.

Apskatīsim, kā iegūt video straumes adresi no publiskās video lapas adreses un atskaņot to atskaņotājā.

Savienojiet bibliotēku ar
app/build.gradle

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

Interesanti, ka pēc tam jÅ«s joprojām nevarēsit to izmantot, jo... piemēri sÅ«dzēsies par trÅ«kstoÅ”o Downloader klasi. To var iekopēt projektā no automatizēto testu direktorija NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - darbojas versijai 0.17.4 (Ŕķiet, ka Ŕī daļa tika pārtaisÄ«ta jaunākā bibliotēkas versijā, bet mums vēl ir jāpārbauda).

Iegūstiet video straumes adresi, izmantojot YouTube vietnes video lapas adresi:

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

Videoklipa adrese ytVidUrl var būt jebkura YouTube vietnes videoklipa lapas publiskā adrese, piemēram, https://www.youtube.com/watch?v=pd2RlatmNRk

Spēlētājs to darÄ«s eksospēlētājs no paÅ”a Google. Å is nav tÄ«mekļa iesaiņojums pakalpojumā YouTube, bet gan Ä«sts iegults atskaņotājs, kas ir diezgan elastÄ«gs un pielāgojams jebkādu videoklipu atskaņoÅ”anai. Tas var arÄ« atskaņot video straumes no YouTube, ja norādāt pareizo adresi. Tikko saņēmām straumes adresi, tāpēc paskatÄ«simies, kā to nosÅ«tÄ«t atskaņotājam.

Savienojiet bibliotēku ar projektu app/build.gradle:

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

Mēs neapsvērsim visas atskaņotāja komponenta ievietoÅ”anas lietojumprogrammas ekrānā nianses (piemērus varat apskatÄ«t projekta vietnē vai kodā), mēs apskatÄ«sim tikai to, kā atskaņotājā sākt atskaņot videoklipu no YouTube. iepriekÅ” saņemtā adrese:

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

Zināmās problēmas

  • Neatskaņos videoklipus ar vecuma ierobežojumiem, kuriem ir jāpiesakās jÅ«su Google/YouTube kontā

piemēram: Iļja Muromets, Kino koncerns Mosfilm, Ruslans un Ludmila filma 1, Mosfilm Film Concern

padoms: pievienojiet Ŕādus videoklipus melnajam sarakstam vai lÅ«dziet videoklipa autoram noņemt kļūdas dēļ noteikto ierobežojumu.

  • Daži apraides videoklipi, kuriem pakalpojums atgriež nulles garumu, netiks atskaņoti (Ŕādiem videoklipiem ilgums sarakstos un galerijā ir atzÄ«mēts kā ā€œ[dur undef]ā€).

piemēram: Gaidīt to! Visi Soyuzmultfilm HD numuri (multfilmas bērniem), Karikatūras no studijas Soyuzmultfilm, Top karikatūras Soyuzmultfilm, Karikatūras no Sojuzmultfilm studijas

padoms: pievienojiet Ŕādus videoklipus melnajam sarakstam.

  • Videoklipi, kas ir pieejami tikai ar tieÅ”ajām saitēm, var netikt iekļauti vietējā atskaņoÅ”anas sarakstā, pat ja lejupielādējat visus lietotāja videoklipus.

piemēram: Uguns pieradināŔana 1. sērija, Mosfilm Cinema Concern

  • Ja jÅ«s saskaraties ar publisku video, kuram nav nepiecieÅ”ama pieteikÅ”anās, tas tiek atskaņots pārlÅ«kprogrammā, bet netiek atskaņots atskaņotājā, nosÅ«tiet kļūdas ziņojumu (pilnÄ«gi iespējams, ka problēma jau ir novērsta jaunajā versijā JaunsPipeExtractor un jums bÅ«s tikai jāatjaunina komplekts ar Å”o versiju, piemēram).

  • Saskarne var palēnināties, ja internets ir lēns (bet nav izslēgts)

Kā rezultātā,

Mans dēls no planÅ”etdatora pārgāja uz Samsung viedo televizoru, kurā nevar palaist Android lietojumprogrammas. Tāpēc vislabākā vecāku kontrole joprojām ir personiska.

Bet aplikācija izrādÄ«jās pietiekami ērta, lai es pati sāktu to lietot. Pirmais iespaids no agrÄ«najām darba versijām bija tāds, ka esmu citā pasaulē. Viss saturs tiek lejupielādēts no YouTube, bet tas vairs nav YouTube, bet gan kaut kas cits, droÅ”s un kontrolēts, it kā jÅ«s izņemtu simtkāju no acs un ieliktu to stikla burkā. Un tas viss attiecas uz ieteikumiem.

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster