Një hyrje e shkurtër: dua të flas për një lojtar online YouTube për Android me lista lokale, kanale dhe rekomandime.

Një hyrje e zgjeruar:
Disa kohĂ« mĂ« parĂ«, u ndesha me njĂ« problem tĂ« tillĂ« si autori i aplikacionit tĂ« mrekullueshĂ«m. , dhe pĂ«rcaktova pĂ«r veten time pikĂ«risht po atĂ« ndjenjĂ«: dua tĂ« kem mundĂ«sinĂ« nga hera nĂ« herĂ« t'i jap fĂ«mijĂ«s tabletin ose smartfonin me filma, por nuk mĂ« pĂ«lqen aspak se ku e çon fĂ«mijĂ«n lista e rekomandimeve nĂ« aplikacionet standarde â klientĂ«t YouTube, pas 2-3 klikimeve.
FatkeqĂ«sisht, pas instalimit tĂ« aplikacionit Channel Whitelist, ishte zbuluar njĂ« mangĂ«si tjetĂ«r mĂ« prozaike, por megjithatĂ« fatale â NIH mĂ« (dhe, mbi tĂ« gjitha, djalit tim) nuk i dukej shumĂ« i pĂ«rshtatshĂ«m nĂ« ndĂ«rfaqen e tij, veçanĂ«risht pasi m'u mĂ«sua pĂ«rdorimi i lojtarit YouTube Kids.
Pra, pas një kohe, unë u përgatita për të bërë realizimin tim. Pas një kohe tjetër, u bë e mundur të vendoset një etiketë në lëshimin e parë.
Karakteristikat kryesore:
- Shtoni kanalet dhe listat e preferuara â ato do tĂ« ruhen dhe indeksohen nĂ« bazĂ«n lokale.
- Në brendësi të listave të shtuar, fikni videot e panevojshme nëse nuk ju duhen.
- Lista e rekomandimeve gjenerohet rastësisht vetëm nga kanalet dhe listat e shtuar në aplikacion.
Burimet janë të hapura, licenca GPLv3:
Më tej, një përmbledhje më e detajuar e mundësive kryesore, plus disa detaje teknike se si të luani video nga YouTube në aplikacionin tuaj në Android pa përdorur API-në e Google dhe mbështjellësit e uebit.
Në ekranin kryesor dhe në ekranin e lojtarit: rekomandime rastësore nga kanale jo rastësore.
Kërkesa e menjëhershme në bazën lokale.
=>
Shtoni një kanal ose listë të re.
Kërkoni me emër online ose ngjitni një adresë të njohur. Lista e videove të kanalit ose listës ruhen në bazën lokale, ikonat nuk ruhen në cache.
Lista dinamike â luani rezultatet e kĂ«rkimit.
=>
Në rekomandimet poshtë videos do të jenë vetëm videot që i përmbahen kërkesës së kërkimit.
Po ashtu, nëse hapni një video nga cilësimet e listës, në listën e rekomandimeve do të jenë vetëm videot nga kjo listë.
Listat dhe kanalet mund të fikën përkohësisht dhe të rinisin.
Kujdes: videot nga playlista e fikur do të zhduken gjithashtu nga rezultatet e kërkimit, historia e shikimeve dhe lista e preferuar. Por mos u shqetësoni, ato do të shfaqen përsëri menjëherë sapo playlista të rinisë.
Shto videon në listën e zezë
Videot e bllokuara nuk do të shfaqen në rekomandime, në rezultatet e kërkimit, do të zhduken nga lista e preferuar dhe nga historia e shikimeve. Videoja do të jetë akoma e dukshme në cilësimet e playlists.
Shiko listën e zezë dhe riaktivizo elementet e bllokuara gabimisht:
Cilësimet > menuja në titull > Lista e zezë
Videot e preferuara dhe historia e shikimeve
Videot e preferuara në ekranin e luajtësit shënohen me një yll në këndin e sipërm të djathtë.
Menuja kontekstuale në titullin e ekranit dhe gjatë një klikimi të gjatë në galerive dhe lista
Kopjoni emrin ose adresën e videos ose playlistas në ekranin e shikimit ose në çdo listë.
Fillim i shpejtë - shtoni kanalet dhe playlistat e rekomanduara
=>
Aplikacioni do të duket menjëherë si në skemat e mësipërme.
Kanalet dhe playlistat e panevojshme mund të fikeshin ose fshihen në cilësime.
Instalimi
Faqja e projektit:
në anglisht:
lëshime:
- Nuk ka në Google Play dhe nuk do të ketë për një kohë të afërt (Google ndalon aplikacionet që parsojnë faqen e tyre në mënyrë të përshtatshme, duke përfshirë Channel Whitelist ose playerin NewPipe)
- Krijoni nga burimet:
- Shkarkoni apk nga seksioni me lëshime:
- Shpresoj që për një kohë do të shfaqet në katalogun (, por nuk është lëvizur më tej për pothuajse një muaj), por akoma jo
Kujdes qĂ« tĂ« kalosh midis versione tĂ« ndryshme nga burime tĂ« ndryshme nĂ« njĂ« pajisje nuk do tĂ« funksionojĂ« pĂ«r shkak tĂ« nĂ«nshkrimeve tĂ« ndryshme tĂ« skedarit apk, para se tĂ« instalosh versionin nga njĂ« burim tĂ« ri duhet tĂ« fshish versionin e instaluar sĂ« pari, bashkĂ« me tĂ« dhĂ«nat â cache e playlists dhe historia e shikimeve (ose tĂ« gjejmĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« transferuar kĂ«to tĂ« dhĂ«na).
Detajet teknike
Nuk kërkohet një llogari Google/YouTube, është e nevojshme vetëm interneti, përdor libraritë:
- për të marrë të dhëna nga shërbimi YouTube dhe
- për luajtjen e videove.
Kod i hapur, licencë e lirë GPLv3.
Pyetje: A është e ligjshme të parsohet faqet pa leje (ose me një ndalim të qartë) të autorëve? , që nuk përdorin API-të e tyre, por i nxjerrin informacionet nga faqet e tyre, pasi shkelin marrëveshjen e përdorimit.
Përgjigja: sigurisht, është e ligjshme, është puna juaj se cilin mjet të përdorni për të lexuar informacionin e aksesueshëm publik. Më shumë se kaq: , por Gula mund të ketë një mendim tjetër; personalisht, nuk kam dëshirë të shkoj në gjykatën amerikane për t'i bindur ata.
Pak kod
Biblioteka â njĂ« projekt ndihmĂ«s pĂ«r player-in , lejon shkarkimin e listĂ«s sĂ« videove pĂ«r kanalin ose listĂ«n e luajtjes sĂ« dhĂ«nĂ«, tĂ« shkarkojĂ« informacion tĂ« detajuar rreth njĂ« videoje tĂ« njohur (ato qĂ« shihen nĂ« faqe), tĂ« marrĂ« adresĂ«n e ikonĂ«s sĂ« videos, si dhe tĂ« marrĂ« adresĂ«n e rrjedhĂ«s sĂ« videos.
Kodi pĂ«r shkarkimin e listĂ«s sĂ« luajtjes Ă«shtĂ« paksa i vĂ«shtirĂ«, prandaj nuk do ta sjell kĂ«tu; ata qĂ« janĂ« tĂ« interesuar â shihni burimet, kryesisht Ă«shtĂ« klasa .
Le të shohim si të marrim adresën e rrjedhës së videos nga adresa e faqes publike të videos dhe ta luajmë atë në player.
Shtoja bibliotekën në
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}ĂshtĂ« interesante qĂ« pas kĂ«saj, ajo ende nuk mund tĂ« pĂ«rdoret, pasi shembujt do tĂ« kenĂ« njĂ« gabim pĂ«r klasĂ«n e munguar Downloader. Ajo mund tĂ« kopjohet nĂ« projekt nga katalogu i testeve automatike â funksionon pĂ«r versionin 0.17.4 (duket se nĂ« versionin mĂ« tĂ« ri tĂ« bibliotekĂ«s kjo pjesĂ« Ă«shtĂ« ndryshuar, por duhet tĂ« kontrollohet mĂ« tej).
Merrni adresën e rrjedhës së videos nga adresa e faqes së videos në YouTube:
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;
// për (final VideoStream stream : extractor.getVideoStreams()) {
// stream.getUrl();
// }
return streamUrl;
}Si adresë videosh, ytVidUrl mund të jetë adresa publike e faqes së çdo videoje në YouTube, për shembull
Player-i do të jetë nga nga Google. Kjo nuk është një mbështjellës web mbi YouTube, por një player i vërtetë i integruar për të luajtur çdo video, mjaft fleksibël dhe i konfigurueshëm. Ai gjithashtu mund të luajë rrjedha video nga YouTube nëse i jepni adresën e saktë. Ne sapo e morëm adresën e rrjedhës, kështu që do të shohim si ta dërgojmë në player.
Përfshini bibliotekën në projekt :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Nuk do të merremi me të gjitha detajet e vendosjes së komponentit të player-it në ekranin e aplikacionit (mund të shihni shembujt në faqen e projektit ose në kod), do të shohim vetëm se si të fillojmë luajtjen e videos nga YouTube në player me adresën e siguruar më sipër:
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// stop playing the current video if it was loaded
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);
// Pause the old video while preparing the new one
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// If we pause here after the player itself has paused, finishing
// playing the video, we will get a second STATE_ENDED event here,
// so we need special verification.
// The getPlayWhenReady() value will still be true, so we check the state.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// Prepare the player with the source.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// Indicate the current position immediately upon loading the video
// (comments mention something about data sources supporting or not supporting
// seek transitions upon loading, it seems this is nonsense - we just do seek right after loading)
// 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
// at this point, normal duration is still not available, so we won't check it
//if(seekTo > 0 && seekTo 0) {
// 5 seconds earlier
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}Problemet e njohura
- Nuk do të luajë video që kanë kufizime moshe, të cilat kërkojnë login në llogarinë Google/Youtube
p.sh.: ,
këshillë: shtoni këto video në listën e zezë ose kërkoni nga autori i videos të heqë kufizimin, i vendosur gabimisht.
- Nuk do të luajë disa videorik televizive, për të cilat shërbimi kthen një gjatësi zero (për këto video, gjatësi në lista dhe galeri shënohet si '[dur undef]')
p.sh.: ,
këshillë: shtoni këto video në listën e zezë.
- Videot që janë të qasshme vetëm me lidhje të drejta, mund të mos shfaqen në listën lokale, edhe nëse po ngarkoni të gjitha videot e përdoruesit.
p.sh.:
Nëse ndeshni një video publike, që nuk kërkon login, luan në shfletues, por nuk luan në lojtar, dërgoni një raport problemi (është e mundur që problemi tashmë është rregulluar në versionin e ri), NewPipeExtractor dhe do të duhet vetëm të azhurnoni versionin me këtë version. ).
Interfaci mund të vonojë në internet të ngadaltë (por jo të fikur).
NĂ« fund
Djali kaloi nga tableti në smart TV Samsung, i cili nuk di të nisë aplikacione Android. Prandaj, kontrolli më i mirë prindëror është gjithmonë personal.
Por aplikacioni doli mjaft i pĂ«rshtatshĂ«m sa unĂ« fillova ta pĂ«rdor vetĂ«. PĂ«rshtypja e parĂ« nga versionet e hershme tĂ« punĂ«s â ndihesha sikur isha nĂ« njĂ« botĂ« tjetĂ«r. TĂ« gjitha pĂ«rmbajtjet ngarkohen nga YouTube, por kjo nuk Ă«shtĂ« mĂ« YouTube, por diçka tjetĂ«r, tĂ« sigurt dhe tĂ« kontrolluar, si tĂ« kishe nxjerrĂ« njĂ« gjarpĂ«r nga syri dhe ta kishe vendosur nĂ« njĂ« bankĂ« tĂ« qelqtĂ«. Dyshimi Ă«shtĂ« te rekomandimet.
Burimi: habr.com
