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

Pievieno komentāru