Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Rövid bevezetés: Szeretném bemutatni az Androidra készült YouTube online lejátszót helyi lejátszási listákkal, csatornákkal és ajánlásokkal.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Részletes bevezetés:
Néhány idővel ezelőtt ugyanolyan problémával találkoztam, mint a nagyszerű alkalmazás szerzője, Csatorna Whitelist, és ugyanilyen hozzáállást alakítottam ki: szeretném, ha időnként adhatnék a gyermekemnek táblagépet vagy okostelefont mesékkel, de teljesen elégedetlen vagyok azzal, hogy a standard YouTube alkalmazásban 2-3 kattintás után hová vezeti a gyermekemet a javasolt lista.

Sajnos, miután telepítettem a Channel Whitelist alkalmazást, már felfedeztem egy másik, prozaikusabb, de mégis végzetes hibát — a NIH számomra (és, ami a legfontosabb, a fiam számára) nem tűnt túl kényelmesnek az interfésze, különösen a YouTube Kids lejátszó használata után.

Összességében egy idő után érlelődtem, hogy elkészítsem a saját megvalósításomat. Néhány idő múlva lehetőségem nyílt rá, hogy elhelyezzem az első kiadás címkéjét.

Főbb funkciók:

  • Add hozzá kedvenc csatornáidat és lejátszási listáidat — ezek mentésre kerülnek ésindexelni fognak a helyi adatbázisban.
  • A hozzáadott lejátszási listákon belül kapcsold ki a felesleges videókat, amennyiben nincs rájuk szükséged.
  • A javasolt lista véletlenszerűen generálódik csak a hozzádott csatornákból és lejátszási listákból.

A források nyíltak, GPLv3 licensz alatt: https://github.com/sadr0b0t/yashlang/

Ezután részletes áttekintést adok a főbb lehetőségekről, plusz néhány technikai részlet a YouTube videók Android alkalmazásban való lejátszásáról Google API és webes burkolatok használata nélkül.

A főképernyőn és a lejátszó képernyőn: véletlenszerű ajánlások nem véletlenszerű csatornákból.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Azonnali keresés a helyi adatbázisban.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) => Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Új csatorna vagy lejátszási lista hozzáadása.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Keresés név alapján online vagy egy ismert cím beillesztése. A csatorna vagy lejátszási lista videóinak listája a helyi adatbázisba kerül, az ikonok nem kerülnek gyorsítótárazásra.

Dinamikus lejátszási lista — a keresési eredmények lejátszása.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) => Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Az ajánlásokban a videó alatt csak azok a videók fognak megjelenni, amelyek megfelelnek a keresési lekérdezésnek.

Hasonlóképpen, ha a lejátszási lista beállításaiból nyitsz meg egy videót, az ajánlásokban csak az adott lejátszási listából származó videók fognak megjelenni.

A lejátszási listákat és csatornákat ideiglenesen ki lehet kapcsolni és újra be lehet kapcsolni.

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Kérjük, vegye figyelembe: a letiltott lejátszási listából származó videók eltűnnek a keresési eredményekből, a megtekintési előzményekből és a kedvencek listájából is. De ne aggódjon, ezek újra megjelennek, amint a lejátszási lista újra aktiválva lesz.

Videó letiltása

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

A letiltott videó nem fog megjelenni a javaslatokban, a keresési eredményekben, eltűnik a kedvencek listájából és a megtekintési előzményekből. A videó továbbra is látható marad a lejátszási lista beállításaiban.

Fekete lista megtekintése és a tévedésből letiltott elemek újraaktiválása:
Beállítások > menü a fejlécben > Fekete lista

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Kedvenc videók és megtekintési előzmények

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

A lejátszó képernyőjén a kedvenc videók a jobb felső sarokban csillaggal vannak megjelölve.

Kontextusmenük a képernyő fejlécében és hosszú kattintással a galériákban és listákban

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Videó vagy lejátszási lista nevének vagy címének másolása a megtekintési képernyőn vagy bármely listában.

Gyors kezdés — ajánlott csatornák és lejátszási listák hozzáadása

Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?) => Koschej halála a javaslatok listáján (lehet-e barátságossá és biztonságossá tenni a YouTube-ot?)

Az alkalmazás azonnal úgy fog kinézni, mint a fenti képernyőképeken.

A felesleges csatornákat és lejátszási listákat ki lehet kapcsolni vagy törölni a beállításokban.

Telepítés

Projektoldal: https://github.com/sadr0b0t/yashlang/
angol nyelven: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
kiadások: https://github.com/sadr0b0t/yashlang/releases

Kérjük, vegye figyelembe, hogy az egyes forrásokból származó különböző verziók közötti váltás ugyanazon az eszközön nem lehetséges az apk fájlok különböző aláírásai miatt; az új forrásból származó verzió telepítése előtt először el kell távolítani a telepített verziót az adatokkal együtt — a lejátszási listák és a megtekintési előzmények gyorsítótárával (vagy ki kell találni, hogyan lehet ezeket az adatokat átvinni).

Műszaki részletek

Nem igényel Google/YouTube fiókot, csak internet szükséges, használja a következő könyvtárakat:

Nyílt forráskód, szabad GPLv3 licenc.

kérdés: Törvényes-e a weboldalak engedély nélküli (vagy egyértelmű tilalom mellett) megcélzása? A Google eltávolítja a Google Play-ből az alkalmazásokat, amelyek nem használják az API-jukat, hanem weboldalaikat parse-olják, mert megszegik a felhasználási feltételeiket.
válasz: természetesen, legális, önálló döntése, hogy milyen eszközt használ a nyilvános információk olvasásához. Sőt: Az Egyesült Államok bírósága teljes mértékben legalizálta a weboldalak scraper-jét és megtiltotta a technikai akadályozást., de Gulyának lehet más véleménye, én személy szerint nem érzem szükségét, hogy az amerikai bíróság elé álljak, hogy meggyőzzem őket.

Kicsit kód

Könyvtár NewPipeExtractor — a lejátszó segédprogramja NewPipe, lehetővé teszi, hogy letöltsük a listáját a megadott csatorna vagy lejátszási lista videóinak, letöltsük a jól ismert videóról szóló részletes információkat (amit a videó weboldalán látunk), megkapjuk a videó ikonjának címét, és a videó stream címét is.

A lejátszási lista letöltéséhez szükséges kód kicsit terjedelmes, ezért itt nem fogom bemutatni, akit érdekel — nézze meg a forrásokat, főként ez a "ContentLoader" osztály. ContentLoader.

Nézzük meg, hogyan lehet megkapni a videó stream címét a videó nyilvános oldalának címéről, és lejátszani azt a lejátszóban.

Csatlakoztassa a könyvtárat a
app/build.gradle

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

Érdekes, hogy ennek ellenére sem fogja tudni használni, mivel a példák hiányzó Downloader osztályra fognak hibázni. Ezt a projektbe lehet másolni az automatikus tesztek mappájából. NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — működik a 0.17.4-es verzióhoz (úgy tűnik, hogy az újabb verzióban ezt a részt újraírták, de ezt még ellenőrizni kell).

A videó stream címének megkapása a YouTube oldalán található videó címéről:

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

A videó címeként az ytVidUrl lehet bármely YouTube videó nyilvános címoldala, például https://www.youtube.com/watch?v=pd2RlatmNRk

A lejátszó lesz ExoPlayer a Google-tól. Ez nem egy webes felület a YouTube-hoz, hanem egy valódi beágyazható lejátszó, amely bármilyen videólejátszására alkalmas, elegendően rugalmas és testreszabható. Képes lejátszani a YouTube videóáramokat is, ha megadjuk a megfelelő címet. A stream címét most kaptuk meg, nézzük meg, hogyan küldhetjük el a lejátszónak.

Könyvtár csatlakoztatása a projekthez app/build.gradle:

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

A lejátszó komponens képernyőn való elhelyezésének minden részletét nem fogjuk tárgyalni (megnézheti a projekt webhelyén vagy a kódban található példákat), csak azt nézzük meg, hogyan indíthatjuk el a YouTube videó lejátszását a fent kapott címmel a lejátszóban:

app/src/main/java/su/sadrobot/yashlang/WatchVideoActivity.java

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // állítsa le a jelenlegi videó lejátszását, ha az betöltődött
        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);

        // Pauzázzuk a régi videót, amíg az újat készítjük
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Ha itt megállítjuk a lejátszót, miután a lejátszó saját magát leállította, amikor befejezte
            // a videó lejátszását, itt a STATE_ENDED esemény másodszor is megtörténik, ezért itt
            // speciális ellenőrzésre van szükség.
            // Eközben az getPlayWhenReady() értéke true marad, ezért pontosan az állapotot
            // ellenőrizzük.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Készítse elő a lejátszót a forrással.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Állítsuk be az aktuális pozíciót azonnal a videó betöltésekor
        // (a megjegyzésekben van valami információ a forrásokról, amelyek támogatják vagy nem támogatják
        // a keresést a betöltés során, úgy tűnik, hogy ez butaság - csak azonnal keresünk a betöltés után)
        // Az Exoplayer új lejátszási listát játszik a kezdettől a megadott pozíció helyett.
        // https://github.com/google/ExoPlayer/issues/4375
        // Hogyan töltsük be a streamet a kívánt pozícióban? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // itt a normalis időtartam még nem érhető el, ezért nem ellenőrizzük
        // if(seekTo > 0 && seekTo  0) {
            // 5 másodperccel korábban
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Ismert problémák

  • Nem játszik le életkorhoz kötött videókat, amelyek Google/YouTube fiók bejelentkezését igénylik

például: Ilya Muromets, Mosfilm Filmstúdió, Ruslan és Ludmila 1. rész / Ruslan and Lyudmila film 1, Mosfilm Filmstúdió

tipp: ilyen videókat érdemes feketelista által megjelölni, vagy kérni a videó szerzőjét, hogy távolítsa el a tévesen beállított korlátozást.

  • Néhány live stream videót nem játszik le, amelyekre a szolgáltatás nulla hosszúságot ad vissza (az ilyen videók hossza a listákban és a galériában "[dur undef]"-ként van feltüntetve)

például: Na, várj! Minden epizód, Szovjetmese HD (mesék gyerekeknek), Szovjetmese stúdió meséi, Top mesék Szovjetmese, Szovjetmese stúdió meséi

tipp: ilyen videókat érdemes fekete listára tenni.

  • A közvetlen linkeken elérhető videók nem kerülhetnek be a helyi lejátszási listába, még akkor sem, ha az összes felhasználói videót feltöltöd.

például: A tűz megszelídítése 1. rész, Moszkvai Filmgyártó Vállalat

  • Ha találkozol egy nyilvános videóval, ami nem igényel bejelentkezést, lejátszható a böngészőben, de nem működik a lejátszóban, küldd el a hibaüzenetet (valószínű, hogy a probléma már ki lett javítva egy új verzióban, NewPipeExtractor és csak az szükséges, hogy frissítsd a gyűjteményt ezzel a verzióval. például).

  • Az interfész akadozhat lassú (de nem kikapcsolt) internetkapcsolat esetén.

Végül

A fiam átváltott egy Samsung okostelevízióra a táblagépéről, ami nem tudja futtatni az Android alkalmazásokat. Ezért a legjobb szülői kontroll még mindig a személyes jelenlét.

De az alkalmazás elég kényelmes lett ahhoz, hogy én magam is elkezdjem használni. Az első benyomásaim a korai működő verziókból — mintha egy másik világba kerültem volna. Az összes tartalom a YouTube-ból töltődik be, de ez már nem YouTube, hanem valami más, biztonságos és ellenőrzött, mintha kivettem volna a szememből egy százlábút és üvegládába tettem volna. És valóban a javaslatokon múlik.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster