Smrt Koshchei v seznamu doporučení (je možné, aby byl YouTube útulný a bezpečný?)
Úvod je krátký: Chci mluvit o online přehrávači YouTube pro Android s místními seznamy skladeb, kanály a doporučeními.
Rozšířený úvod:
Před časem jsem čelil úplně stejnému problému jako autor úžasné aplikace Seznam povolených kanálů, a určil si k ní úplně stejný postoj: Chci mít možnost dát dítěti čas od času tablet nebo smartphone s kreslenými filmy, ale nejsem vůbec spokojen s tím, kam po 2-3 kliknutích seznam doporučení vede dítě ve standardních aplikacích - klientech YouTube.
Bohužel po instalaci aplikace Channel Whitelist už měla další prozaičtější, ale stále fatální nedostatek - NIH se mi (a hlavně synovi) zdálo nepříliš pohodlné, zvláště po zvyku používat přehrávač YouTube Kids.
Obecně jsem po nějaké době dospěl k vlastní implementaci. Po nějaké době bylo možné umístit značku na první vydání.
Základní možnosti:
Přidejte své oblíbené kanály a seznamy skladeb – budou uloženy a indexovány v místní databázi
Vypněte další videa v přidaných seznamech videí, pokud je nepotřebujete
Seznam doporučení je náhodně generován pouze z kanálů a seznamů skladeb přidaných do aplikace
Následuje podrobnější přehled hlavních funkcí a několik technických podrobností o tom, jak přehrávat videa YouTube v aplikaci pro Android bez použití rozhraní Google API a webových obalů.
Na hlavní obrazovce a na obrazovce přehrávače: náhodná doporučení z nenáhodných kanálů
Okamžité vyhledávání v místní databázi
=>
Přidejte nový kanál nebo seznam videí
Hledejte podle jména online nebo zadejte známou adresu. Seznam videí kanálu nebo playlistu se uloží do místní databáze, ikony se neukládají do mezipaměti.
Dynamický seznam skladeb – přehrávání výsledků vyhledávání
=>
V doporučeních pod videem budou pouze videa, která vyhovují vyhledávacímu dotazu.
Podobně, pokud otevřete video z nastavení seznamu videí, v seznamu doporučení se zobrazí pouze videa ze stejného seznamu videí.
Playlisty a kanály lze dočasně vypnout a znovu zapnout
Poznámka: videa ze zakázaného seznamu videí zmizí také z výsledků vyhledávání, historie procházení a ze seznamu oblíbených. Ale nebojte se, objeví se tam znovu ihned po opětovném zapnutí playlistu.
Video na černé listině
Zablokované video se nezobrazí v doporučeních, ve výsledcích vyhledávání, zmizí ze seznamu oblíbených a z historie sledování. Video bude stále viditelné v nastavení seznamu videí.
Zobrazit černou listinu a znovu povolit omylem zablokované položky: Nastavení > nabídka záhlaví > Černá listina
Oblíbená videa a historie sledování
Oblíbená videa na obrazovce přehrávače jsou označena hvězdičkou v pravém horním rohu.
Kontextové nabídky v názvu obrazovky a při dlouhém kliknutí v galeriích a seznamech
Zkopírujte název nebo adresu videa nebo seznamu videí na obrazovce sledování nebo v libovolném seznamu.
Rychlý start – přidejte doporučené kanály a seznamy skladeb
=>
Aplikace bude okamžitě vypadat jako na snímcích výše.
Nepotřebné kanály a seznamy stop lze v nastavení vypnout nebo smazat.
Není na Googleplay a v blízké budoucnosti nebude (Google zakazuje aplikace, které obcházejí API a analyzují jejich stránky, včetně výše zmíněného seznamu povolených kanálů nebo přehrávače NewPipe)
Mějte na paměti, že přepínání mezi různými verzemi z různých zdrojů na stejném zařízení nebude fungovat kvůli různým signaturám souboru apk, před instalací verze z nového zdroje budete muset nejprve smazat nainstalovanou verzi spolu s daty - mezipaměť seznamu skladeb a historii procházení (nebo zjistit, jak tyto údaje přenášejí).
Technické údaje
Nevyžaduje účet Google / YouTube, je potřeba pouze internet, využívá knihovny:
knihovna Nový PipeExtractor - projekt pomocníka hráče NewPipe, umožňuje stáhnout seznam videí pro zadaný kanál nebo seznam videí, stáhnout podrobné informace o slavném videu (co je vidět na webové stránce videa), získat adresu ikony videa a také získat adresu video stream.
Kód pro načítání playlistu je trochu těžkopádný, takže ho sem nebudu uvádět, pro ty, které to zajímá - podívejte se na zdroj, je to v podstatě třída ContentLoader.
Podívejme se, jak získat adresu videostreamu z adresy veřejné stránky videa a přehrát jej v přehrávači.
Je zvláštní, že poté to stále nelze použít, protože. příklady si budou stěžovat na chybějící třídu Downloader. Lze jej zkopírovat do projektu z adresáře automatických testů NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funguje pro verzi 0.17.4 (zdá se, že tato část byla přepracována v novější verzi knihovny, ale stále je třeba ji zkontrolovat).
Získejte adresu video streamu z adresy stránky videa na webu YouTube:
Hráč bude explayer od samotného Googlu. Nejedná se o webový obal přes YouTube, ale o skutečný vložitelný přehrávač pro přehrávání jakýchkoli videí, poměrně flexibilní a přizpůsobitelný. Včetně ví, jak přehrávat video streamy z YouTube, pokud pro něj zadáte správnou adresu. Právě jsme obdrželi adresu streamu, takže se podívejme, jak ji odeslat do přehrávače.
Nebudeme zvažovat všechny nuance umístění komponenty přehrávače na obrazovku aplikace (můžete to vidět v příkladech na webu projektu nebo v kódu), podíváme se pouze na to, jak začít přehrávat videa z YouTube v přehrávači na výše získaná adresa:
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);
}
}
Známé problémy
Nepřehraje videa s věkovým omezením, která vyžadují přihlášení k účtu Google/YouTube
rada: přidejte taková videa na černou listinu nebo požádejte autora videa, aby omylem nastavené omezení odstranil.
Některá vysílaná videa, u kterých služba vrací nulovou délku, se nepřehrají (u takových videí je délka v seznamech a galerii označena jako „[dur undef]“).
Videa, která jsou dostupná pouze prostřednictvím přímých odkazů, nemusí být zahrnuta do místního seznamu videí, i když si stáhnete všechna videa uživatele
Pokud narazíte na veřejné video, které nevyžaduje přihlášení, přehrává se v prohlížeči, ale nepřehrává se v přehrávači, pošlete hlášení o chybě (je to docela možné, problém je již v nové verzi opraven Nový PipeExtractor a budete muset aktualizovat sestavu pouze touto verzí, například).
Rozhraní může zpomalit pomalý (ale nevypnutý) internet
V důsledku toho,
Syn přešel z tabletu na chytrou televizi Samsung, na které neumí spustit aplikace pro Android. Proto je nejlepší rodičovská kontrola stále osobní.
Ale aplikace se ukázala jako dostatečně pohodlná na to, abych ji začal používat sám. První dojem z raných pracovních verzí byl, že jsem se dostal do jiného světa. Veškerý obsah se stahuje z YouTube, ale tohle už není YouTube, ale něco jiného, bezpečného a kontrolovaného, jako byste si z oka vyndali stonožku a vložili ji do skleněné nádoby. A vše je o doporučeních.