Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Johdatus on lyhyt: Haluan puhua YouTube-verkkosoittimesta Androidille paikallisten soittolistojen, kanavien ja suositusten kera.

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Laajennettu esittely:
Jokin aika sitten törmäsin täsmälleen samaan ongelmaan kuin upean sovelluksen kirjoittaja Kanavien sallittujen luettelo, ja päätin itselleni täsmälleen saman asenteen sitä kohtaan: haluan joskus antaa lapselleni tabletin tai älypuhelimen, jossa on sarjakuvia, mutta en ole ollenkaan tyytyväinen siihen, missä 2-3 klikkauksen jälkeen lista on suosituksista tavallisissa sovelluksissa - YouTube-asiakasohjelmat - vie lapsen.

Valitettavasti Channel Whitelist -sovelluksen asentamisen jälkeen löydettiin toinen proosallisempi, mutta silti kohtalokas virhe - NIH I (ja mikä tärkeintä, poikani) ei löytänyt käyttöliittymää kovin kätevänä, varsinkin YouTube Kids -soittimen käytön jälkeen.

Yleensä jonkin ajan kuluttua olin valmis tekemään oman toteutukseni. Jonkin ajan kuluttua tuli mahdolliseksi laittaa tagi ensimmäiseen julkaisuun.

Tärkeimmät ominaisuudet:

  • Lisää suosikkikanavasi ja soittolistasi - ne tallennetaan ja indeksoidaan paikalliseen tietokantaan
  • Poista tarpeettomat videot käytöstä lisätyistä soittolistoista, jos et tarvitse niitä
  • Suosituslista luodaan satunnaisesti vain sovellukseen lisätyistä kanavista ja soittolistoista

Avoin lähdekoodi, GPLv3-lisenssi: https://github.com/sadr0b0t/yashlang/

Alla on yleiskatsaus tärkeimmistä ominaisuuksista yksityiskohtaisemmin sekä joitain teknisiä yksityiskohtia YouTube-videoiden toistamisesta Android-sovelluksessasi ilman Google-sovellusliittymää ja verkkokääreitä.

Päänäytöllä ja soittimen näytöllä: satunnaisia ​​suosituksia ei-satunnaisilta kanavilta

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Välitön haku paikallisesta tietokannasta

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) => Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Lisää uusi kanava tai soittolista

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Etsi verkossa nimellä tai lisää tunnettu osoite. Kanavan tai soittolistan videoluettelo tallennetaan paikalliseen tietokantaan; kuvakkeita ei tallenneta välimuistiin.

Dynaaminen soittolista - toista hakutuloksia

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) => Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Videosuosituksissa on vain videoita, jotka täyttävät hakukyselyn.

Vastaavasti, jos avaat videon soittolista-asetuksista, vain saman soittolistan videot näkyvät suositusluettelossa.

Soittolistat ja kanavat voidaan väliaikaisesti kytkeä pois päältä ja uudelleen päälle

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Huomaa: käytöstä poistetun soittolistan videot katoavat myös hakutuloksista, katseluhistoriasta ja suosikkiluettelosta. Mutta älä huoli, ne näkyvät siellä uudelleen heti, kun soittolista otetaan uudelleen käyttöön.

Lisää video mustalle listalle

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Estetty video ei näy suosituksissa, hakutuloksissa, ja se katoaa suosikkiluettelosta ja katseluhistoriasta. Video näkyy edelleen soittolistan asetuksissa.

Tarkastele mustaa listaa ja ota vahingossa estetyt kohteet uudelleen käyttöön:
Asetukset > otsikkovalikko > Musta lista

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Suosikkivideot ja katseluhistoria

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Soittimen näytön suosikkivideot on merkitty tähdellä oikeassa yläkulmassa.

Kontekstivalikot näytön otsikossa ja pitkä napsautus gallerioissa ja luetteloissa

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Kopioi videon tai soittolistan nimi tai osoite katselunäytössä tai missä tahansa luettelossa.

Pika-aloitus – lisää suositeltuja kanavia ja soittolistoja

Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?) => Koshchein kuolema on suositusluettelossa (onko mahdollista tehdä YouTubesta viihtyisä ja turvallinen?)

Sovellus näyttää välittömästi yllä olevilta kuvakaappauksilta.

Tarpeettomat kanavat ja soittolistat voidaan sammuttaa tai poistaa asetuksista.

Asennus

Projektin sivu: https://github.com/sadr0b0t/yashlang/
englanniksi: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
julkaisut: https://github.com/sadr0b0t/yashlang/releases

Muista, että vaihtaminen eri versioiden välillä eri lähteistä samalla laitteella ei toimi apk-tiedoston eri allekirjoitusten vuoksi; ennen kuin asennat version uudesta lähteestä, sinun on ensin poistettava asennettu versio tietojen mukana - soittolistan välimuisti ja selaushistoria (tai selvitä kuinka siirrät tietoja).

Tekniset yksityiskohdat

Ei vaadi Google/YouTube-tiliä, tarvitset vain Internetin, käyttää seuraavia kirjastoja:

Avoin lähdekoodi, ilmainen GPLv3-lisenssi.

kysymys: Onko yleensä laillista kaapata verkkosivustoja ilman tekijöiden lupaa (tai nimenomaisella kiellolla)? Google poistaa sovelluksia Google Playsta, jotka eivät käytä API:aan, mutta jäsentävät sivustojaan, koska he rikkovat käyttösopimustaan.
vastaus: tietenkin, se on laillista, voit päättää, mitä työkalua käytät julkisesti saatavilla olevien tietojen lukemiseen. Lisäksi: Yhdysvaltalainen tuomioistuin on täysin laillistanut verkkosivustojen kaapimisen ja kieltänyt siihen puuttumisen., mutta Gulilla voi olla eri mielipide; henkilökohtaisesti minulla ei ole vielä halua mennä amerikkalaiseen tuomioistuimeen vakuuttaakseni heidät.

Jotain koodia

kirjasto UusiPipeExtractor - pelaajatukiprojekti NewPipe, voit ladata videoluettelon tietylle kanavalle tai soittolistalle, ladata yksityiskohtaisia ​​tietoja kuuluisasta videosta (mikä näkyy videon verkkosivulla), saada videokuvakkeen osoitteen ja myös videon osoitteen virta.

Soittolistan latauskoodi on hieman hankala, joten en anna sitä tässä, kiinnostuneet katsokaa lähdekoodia, se on pohjimmiltaan luokka ContentLoader.

Katsotaanpa, kuinka saada videovirran osoite julkisen videosivun osoitteesta ja toistaa se soittimessa.

Yhdistä kirjasto
app / build.gradle

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

On outoa, että tämän jälkeen et vieläkään voi käyttää sitä, koska... esimerkit valittavat puuttuvasta Downloader-luokasta. Se voidaan kopioida projektiin automaattisten testien hakemistosta NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - toimii versiossa 0.17.4 (näyttää siltä, ​​että tämä osa on uusittu kirjaston uudemmassa versiossa, mutta meidän on vielä tarkistettava).

Hanki videovirran osoite YouTube-sivuston videosivun osoitteesta:

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

Videon osoite ytVidUrl voi olla minkä tahansa YouTube-sivuston videon sivun julkinen osoite, esimerkiksi https://www.youtube.com/watch?v=pd2RlatmNRk

Pelaaja tekee exoplayer itse Googlelta. Tämä ei ole YouTuben verkkokääre, vaan todellinen upotettu soitin minkä tahansa videon toistamiseen, melko joustava ja muokattavissa. Se voi myös toistaa videostreameja YouTubesta, jos annat sille oikean osoitteen. Saimme juuri stream-osoitteen, joten katsotaan kuinka se lähetetään soittimelle.

Yhdistä kirjasto projektiin app / build.gradle:

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

Emme ota huomioon kaikkia vivahteita soitinkomponentin sijoittamisessa sovellusnäytölle (voit katsoa esimerkkejä projektin verkkosivustolta tai koodista), katsomme vain, kuinka aloittaa videon toistaminen YouTubesta soittimessa osoitteessa yllä saatu osoite:

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

Tunnettuja ongelmia

  • Ei toista videoita ikärajoituksilla, jotka edellyttävät kirjautumista Google-/YouTube-tilillesi

esimerkiksi: Ilja Muromets, Mosfilm Cinema Concern, Ruslan ja Ljudmila elokuva 1, Mosfilm Film Concern

neuvoja: lisää tällaiset videot mustalle listalle tai pyydä videon tekijää poistamaan vahingossa asetettu rajoitus.

  • Joitakin lähetysvideoita, joille palvelu palauttaa nollapituuden, ei toisteta (tällaisten videoiden kesto luetteloissa ja galleriassa on merkitty "[dur undef]").

esimerkiksi: Odota sitä! Kaikki Soyuzmultfilm HD:n numerot (sarjakuvia lapsille), sarjakuvia Soyuzmultfilm studiolta, Parhaat sarjakuvat Soyuzmultfilm, Sarjakuvat Soyuzmultfilm studiolta

neuvoja: lisää tällaiset videot mustalle listalle.

  • Videot, jotka ovat saatavilla vain suorien linkkien kautta, eivät välttämättä sisälly paikalliseen soittolistaan, vaikka lataat kaikki käyttäjän videot

esimerkiksi: Tulen kesyttäminen, jakso 1, Mosfilm Cinema Concern

  • Jos törmäät julkiseen videoon, joka ei vaadi kirjautumista, toistetaan selaimessa, mutta ei soittimessa, lähetä vikailmoitus (on täysin mahdollista, että ongelma on jo korjattu uudessa versiossa UusiPipeExtractor ja sinun tarvitsee vain päivittää kokoonpano tällä versiolla, esimerkiksi).

  • Käyttöliittymä saattaa hidastua, jos Internet on hidas (mutta ei pois päältä)

Tämän seurauksena

Poikani muutti tabletista Samsungin älytelevisioon, joka ei voi käyttää Android-sovelluksia. Siksi paras vanhempien valvonta on edelleen henkilökohtainen.

Mutta sovellus osoittautui riittävän käteväksi aloittaakseni sen käytön itse. Ensimmäinen vaikutelma varhaisista työversioista oli, että olin toisessa maailmassa. Kaikki sisältö ladataan YouTubesta, mutta tämä ei ole enää YouTube, vaan jotain muuta, turvallista ja hallittua, ikään kuin ottaisit tuhatjalkaisen silmästäsi ja laittaisit sen lasipurkkiin. Ja kaikki on kiinni suosituksista.

Lähde: will.com

Lisää kommentti