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.

Részletes bevezetés:
Néhány idővel ezelőtt ugyanolyan problémával találkoztam, mint a nagyszerű alkalmazás szerzője, , é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:
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.
Azonnali keresés a helyi adatbázisban.
=>
Új csatorna vagy lejátszási lista hozzáadása.
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.
=>
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.
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
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
Kedvenc videók és megtekintési előzmények
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
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
=>
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:
angol nyelven:
kiadások:
- A Google Play Áruházban jelenleg nincs, és a közeljövőben nem is lesz (a Google blokkolja azokat az alkalmazásokat, amelyek az API megkerülésével olvassák el az oldalukat, beleértve a Channel Whitelist vagy a NewPipe lejátszót)
- Gyűjtsd össze a forrásokból:
- Töltsd le az apk-t a kiadások szakaszból:
- Remélem, hogy egy idő után a katalógusban elérhetővé válik (, de azóta már majdnem egy hónapja nem mozdul előre), de még nincs
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:
- az adatok megszerzéséhez a YouTube szolgáltatásból és
- a videók lejátszásához.
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? , 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: , 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 — a lejátszó segédprogramja , 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. .
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
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. — 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:
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
A lejátszó lesz 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 :
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:
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: ,
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: ,
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:
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. ).
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
