ProHoster > Blog > internet nyheder > Koshcheis død på listen over anbefalinger (er det muligt at gøre YouTube hyggeligt og sikkert?)
Koshcheis død på listen over anbefalinger (er det muligt at gøre YouTube hyggeligt og sikkert?)
Introduktionen er kort: Jeg vil gerne tale om YouTube online-afspilleren til Android med lokale afspilningslister, kanaler og anbefalinger.
Udvidet introduktion:
For nogen tid siden stod jeg over for præcis det samme problem som forfatteren til en vidunderlig ansøgning Kanalens hvidliste, og bestemte for mig selv præcis samme holdning til hende: Jeg vil gerne kunne give barnet en tablet eller smartphone med tegnefilm fra tid til anden, men jeg er slet ikke tilfreds med, hvor der efter 2-3 klik liste over anbefalinger fører barnet i standardapplikationer - YouTube-klienter.
Desværre, efter installation af Channel Whitelist-applikationen, havde den allerede en anden mere prosaisk, men stadig fatal fejl - NIH forekom mig (og vigtigst af alt for min søn) at dens grænseflade ikke var særlig bekvem, især efter vanen med at bruge YouTube Kids spiller.
Generelt modnes jeg efter nogen tid til at lave min egen implementering. Efter noget tid blev det muligt at sætte et tag på den første udgivelse.
Nøglefunktioner:
Tilføj dine yndlingskanaler og afspilningslister - de vil blive gemt og indekseret i den lokale database
Slå ekstra videoer fra i de tilføjede afspilningslister, hvis du ikke har brug for dem
Listen over anbefalinger genereres kun tilfældigt fra de kanaler og afspilningslister, der er føjet til applikationen
Det følgende er en oversigt over de vigtigste funktioner mere detaljeret, plus nogle tekniske detaljer om, hvordan du afspiller YouTube-videoer i din Android-app uden at bruge Google API'er og web-wrappers.
På hovedskærmen og på afspillerskærmen: tilfældige anbefalinger fra ikke-tilfældige kanaler
Øjeblikkelig søgning i den lokale database
=>
Tilføj en ny kanal eller afspilningsliste
Søg på navn online eller indsæt en kendt adresse. Listen over videoer fra en kanal eller afspilningsliste gemmes i en lokal database, ikoner gemmes ikke i cache.
Dynamisk afspilningsliste - afspil søgeresultater
=>
I anbefalingerne under videoen vil der kun være videoer, der opfylder søgeforespørgslen.
På samme måde, hvis du åbner en video fra afspilningslisteindstillingerne, vil kun videoer fra den samme afspilningsliste blive vist på listen med anbefalinger.
Afspilningslister og kanaler kan midlertidigt slås fra og til igen
Bemærk venligst: videoer fra den deaktiverede afspilningsliste forsvinder også fra søgeresultaterne, browserhistorikken og fra favoritlisten. Men bare rolig, de vises der igen umiddelbart efter, at afspilningslisten er tændt igen.
Sortliste video
En blokeret video vises ikke i anbefalinger, i søgeresultater, forsvinder fra listen over favoritter og fra visningshistorikken. Videoen vil stadig være synlig i playlisteindstillingerne.
Se sortlisten, og genaktiver elementer, der er blokeret ved en fejl: Indstillinger > overskriftsmenu > Sortliste
Yndlingsvideoer og visningshistorik
Favoritvideoer på afspillerskærmen er markeret med en stjerne i øverste højre hjørne.
Kontekstmenuer i skærmtitlen og ved langt klik i gallerier og lister
Kopiér navnet eller adressen på en video eller afspilningsliste på visningsskærmen eller en hvilken som helst liste.
Hurtig start - tilføj anbefalede kanaler og afspilningslister
=>
Applikationen vil straks se ud som skærmbillederne ovenfor.
Unødvendige kanaler og afspilningslister kan slås fra eller slettes i indstillingerne.
Ikke på Googleplay og vil ikke være det i den nærmeste fremtid (Google forbyder applikationer, der uden om API'en analyserer deres websted, inklusive den førnævnte kanalhvidliste eller NewPipe-afspilleren)
Husk, at skift mellem forskellige versioner fra forskellige kilder på den samme enhed ikke vil fungere på grund af forskellige signaturer af apk-filen, før du installerer versionen fra en ny kilde, skal du først slette den installerede version sammen med dataene - playliste-cache og browserhistorik (eller find ud af, hvordan disse overfører data).
Tekniske detaljer
Kræver ikke en Google / YouTube-konto, kun internettet er nødvendigt, bruger biblioteker:
Spørgsmål: Er skrabesteder uden forfatternes tilladelse (eller med et eksplicit forbud) generelt lovligt? Google fjerner apps fra Google Play, som ikke bruger deres API, men parser deres websteder, pga. de overtræder deres brugeraftale. Svar: Selvfølgelig er det lovligt, det er op til dig, hvilket værktøj du skal bruge til at læse offentlig information. Desuden: Den amerikanske domstol legaliserede fuldstændigt skrabning af hjemmesider og forbød, at den blev teknisk blokeret, men Gul kan have en anden mening, personligt har jeg ikke lyst til at gå til en amerikansk domstol for at overbevise dem.
Noget kode
bibliotek NewPipeExtractor - spillerhjælperprojekt NewPipe, giver dig mulighed for at downloade en liste over videoer til den angivne kanal eller afspilningsliste, downloade detaljerede oplysninger om en berømt video (hvad der er synligt på videoens webside), få adressen på videoikonet og også få adressen på videostrømmen.
Koden til at indlæse afspilningslisten er lidt besværlig, så jeg vil ikke bringe den her, for dem der er interesserede - se på kilden, det er dybest set en klasse ContentLoader.
Lad os se, hvordan du får adressen på videostrømmen fra adressen på den offentlige videoside og afspiller den i afspilleren.
Det er mærkeligt, at det efter det stadig ikke kan bruges, fordi. eksemplerne vil klage over den manglende Downloader-klasse. Det kan kopieres til projektet fra biblioteket for automatiske tests NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - virker til version 0.17.4 (det ser ud til, at denne del er blevet lavet om i en nyere version af biblioteket, men skal stadig kontrolleres).
Hent adressen på videostrømmen fra adressen på videosiden på YouTube-webstedet:
Spilleren vil exospiller fra Google selv. Dette er ikke en web-indpakning over YouTube, men en rigtig indlejrbar afspiller til afspilning af alle videoer, ret fleksibel og kan tilpasses. Herunder ved, hvordan man afspiller videostreams fra YouTube, hvis du angiver den korrekte adresse til det. Vi har netop modtaget streamadressen, så lad os se, hvordan vi sender den til afspilleren.
Vi vil ikke overveje alle nuancerne ved at placere afspillerkomponenten på applikationsskærmen (du kan se det i eksemplerne på projektets hjemmeside eller i koden), vi vil kun se på, hvordan man begynder at afspille videoer fra YouTube i afspilleren på ovenstående adresse:
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);
}
}
kendte problemer
Vil ikke afspille videoer med aldersbegrænsninger, der kræver et Google/YouTube-kontologin
råd: føj sådanne videoer til sortlisten, eller bed forfatteren af videoen om at fjerne den begrænsning, der er angivet ved en fejl.
Nogle udsendelsesvideoer, for hvilke tjenesten returnerer nul længde, afspilles ikke (for sådanne videoer er varigheden i listerne og galleriet markeret som "[dur undef]").
Videoer, der kun er tilgængelige via direkte links, er muligvis ikke inkluderet i den lokale afspilningsliste, selvom du downloader alle brugerens videoer
Hvis du støder på en offentlig video, der ikke kræver et login, afspilles i browseren, men ikke afspiller i afspilleren, så send en fejlrapport (det er meget muligt, problemet er allerede blevet rettet i den nye version NewPipeExtractor og du behøver kun at opdatere samlingen med denne version, for eksempel).
Grænsefladen kan blive langsommere med et langsomt (men ikke slukket) internet
Som følge heraf
Sønnen flyttede fra en tablet til et Samsung-smart-tv, som ikke kan køre Android-applikationer. Derfor er den bedste forældrekontrol stadig personlig.
Men applikationen viste sig at være praktisk nok til, at jeg selv kunne begynde at bruge den. Det første indtryk fra de tidlige arbejdsversioner var, at jeg kom ind i en anden verden. Alt indhold downloades fra YouTube, men det er ikke længere YouTube, men noget andet, sikkert og kontrolleret, som om man tog en tusindben ud af øjet og puttede den i en glaskrukke. Og det handler om anbefalingerne.