Ievads ir Ä«ss: es vÄlos runÄt par YouTube tieÅ”saistes atskaÅotÄju Android ierÄ«cÄm ar vietÄjiem atskaÅoÅ”anas sarakstiem, kanÄliem un ieteikumiem.

IzvÄrsts ievads:
Pirms kÄda laika saskÄros ar tieÅ”i tÄdu paÅ”u problÄmu kÄ brÄ«niŔķīgas aplikÄcijas autors , un noteicu sev tieÅ”i tÄdu paÅ”u attieksmi pret to: es gribu ik pa laikam bÄrnam uzdÄvinÄt planÅ”etdatoru vai viedtÄlruni ar multenÄm, bet mani nepavisam neapmierina tas, kur pÄc 2-3 klikŔķiem parÄdÄs saraksts ieteikumu standarta lietojumprogrammÄs - YouTube klienti - Åem bÄrnu.
DiemžÄl pÄc Channel Whitelist aplikÄcijas instalÄÅ”anas tika atklÄts vÄl viens prozaiskÄks, bet tomÄr liktenÄ«gs trÅ«kums ā NIH I (un, galvenais, manam dÄlam) tÄ interfeiss Ŕķita ne pÄrÄk Ärts, it Ä«paÅ”i pÄc ieraduma lietot YouTube Kids atskaÅotÄju.
KopumÄ pÄc kÄda laika es biju gatavs veikt savu realizÄciju. PÄc kÄda laika kļuva iespÄjams ievietot tagu pirmajam laidienam.
GalvenÄs iezÄ«mes:
- Pievienojiet savus iecienÄ«tÄkos kanÄlus un atskaÅoÅ”anas sarakstus - tie tiks saglabÄti un indeksÄti vietÄjÄ datu bÄzÄ
- Pievienotajos atskaÅoÅ”anas sarakstos izslÄdziet nevajadzÄ«gos videoklipus, ja tie nav nepiecieÅ”ami
- Ieteikumu saraksts tiek Ä£enerÄts nejauÅ”i tikai no lietojumprogrammai pievienotajiem kanÄliem un atskaÅoÅ”anas sarakstiem
AtvÄrtÄ koda, GPLv3 licence:
TÄlÄk ir sniegts sÄ«kÄks pÄrskats par galvenajÄm funkcijÄm, kÄ arÄ« daži tehniski dati par to, kÄ atskaÅot YouTube videoklipus savÄ Android lietojumprogrammÄ, neizmantojot Google API un tÄ«mekļa iesaiÅojumus.
GalvenajÄ ekrÄnÄ un atskaÅotÄja ekrÄnÄ: nejauÅ”i ieteikumi no kanÄliem, kas nav nejauÅ”i izvÄlÄti
TÅ«lÄ«tÄja meklÄÅ”ana vietÄjÄ datu bÄzÄ
=>
Pievienojiet jaunu kanÄlu vai atskaÅoÅ”anas sarakstu
MeklÄjiet pÄc vÄrda tieÅ”saistÄ vai ievietojiet zinÄmu adresi. KanÄla vai atskaÅoÅ”anas saraksta videoklipu saraksts tiek saglabÄts vietÄjÄ datu bÄzÄ; ikonas netiek saglabÄtas keÅ”atmiÅÄ.
Dinamiskais atskaÅoÅ”anas saraksts ā atskaÅojiet meklÄÅ”anas rezultÄtus
=>
Video ieteikumos bÅ«s tikai tie videoklipi, kas apmierinÄs meklÄÅ”anas vaicÄjumu.
TÄpat, ja videoklipu atverat atskaÅoÅ”anas saraksta iestatÄ«jumos, ieteikumu sarakstÄ tiks parÄdÄ«ti tikai videoklipi no tÄ paÅ”a atskaÅoÅ”anas saraksta.
AtskaÅoÅ”anas sarakstus un kanÄlus var Ä«slaicÄ«gi izslÄgt un atkal ieslÄgt
LÅ«dzu, Åemiet vÄrÄ: videoklipi no atspÄjota atskaÅoÅ”anas saraksta arÄ« pazudÄ«s no meklÄÅ”anas rezultÄtiem, skatīŔanÄs vÄstures un izlases saraksta. Bet neuztraucieties, tie atkal parÄdÄ«sies tÅ«lÄ«t pÄc atskaÅoÅ”anas saraksta atkal ieslÄgÅ”anas.
Pievienojiet videoklipu melnajam sarakstam
BloÄ·Äts videoklips netiks rÄdÄ«ts ieteikumos, meklÄÅ”anas rezultÄtos un pazudÄ«s no izlases saraksta un skatīŔanÄs vÄstures. Video joprojÄm bÅ«s redzams atskaÅoÅ”anas saraksta iestatÄ«jumos.
Skatiet melno sarakstu un atkÄrtoti iespÄjojiet kļūdas dÄļ bloÄ·Ätos vienumus:
IestatÄ«jumi > galvenes izvÄlne > Melnais saraksts
IecienÄ«tÄkie videoklipi un skatīŔanÄs vÄsture
IecienÄ«tÄkie videoklipi atskaÅotÄja ekrÄnÄ ir atzÄ«mÄti ar zvaigznÄ«ti augÅ”ÄjÄ labajÄ stÅ«rÄ«.
Konteksta izvÄlnes ekrÄna virsrakstÄ un ilgi noklikŔķiniet galerijÄs un sarakstos
KopÄjiet videoklipa vai atskaÅoÅ”anas saraksta nosaukumu vai adresi skatīŔanÄs ekrÄnÄ vai jebkurÄ sarakstÄ.
Ätrais sÄkums ā pievienojiet ieteiktos kanÄlus un atskaÅoÅ”anas sarakstus
=>
Lietojumprogramma nekavÄjoties izskatÄ«sies kÄ iepriekÅ” redzamajos ekrÄnuzÅÄmumos.
NevajadzÄ«gos kanÄlus un atskaÅoÅ”anas sarakstus var izslÄgt vai dzÄst iestatÄ«jumos.
UzstÄdīŔana
Projekta lapa:
angliski:
izlaidumi:
- Tas nav pieejams pakalpojumÄ Google Play un nebÅ«s arÄ« tuvÄkajÄ nÄkotnÄ (Google aizliedz lietojumprogrammas, kas apiet API un parsÄ viÅu vietni, tostarp minÄto kanÄlu balto sarakstu vai NewPipe atskaÅotÄju)
- Veidot no avotiem:
- LejupielÄdÄjiet apk no izlaidumu sadaļas:
- Ceru, ka pÄc kÄda laika parÄdÄ«sies katalogÄ (, bet jau gandrÄ«z mÄnesi nav pÄrcÄlies tÄlÄk), bet vÄl ne
Å emiet vÄrÄ, ka pÄrslÄgÅ”anÄs starp dažÄdÄm versijÄm no dažÄdiem avotiem vienÄ un tajÄ paÅ”Ä ierÄ«cÄ nedarbosies, jo apk failam ir dažÄdi paraksti; pirms versijas instalÄÅ”anas no jauna avota vispirms bÅ«s jÄizdzÄÅ” instalÄtÄ versija kopÄ ar datiem. atskaÅoÅ”anas saraksta keÅ”atmiÅu un pÄrlÅ«koÅ”anas vÄsturi (vai izdomÄjiet, kÄ pÄrsÅ«tÄ«t datus).
TehniskÄs detaļas
Nav nepiecieÅ”ams Google/YouTube konts, nepiecieÅ”ams tikai internets, tiek izmantotas Å”Ädas bibliotÄkas:
- lai saÅemtu datus no pakalpojuma YouTube un
- lai atskaÅotu video.
AtvÄrtÄ koda, bezmaksas GPLv3 licence.
jautÄjums: vai vispÄr ir likumÄ«gi notÄ«rÄ«t vietnes bez autoru atļaujas (vai ar nepÄrprotamu aizliegumu)? , kas neizmanto savu API, bet parsÄ savas vietnes, jo viÅi pÄrkÄpj savu lietotÄja lÄ«gumu.
atbilde: protams, tas ir likumÄ«gi, tas ir atkarÄ«gs no jums, kuru rÄ«ku izmantot, lai lasÄ«tu publiski pieejamu informÄciju. TurklÄt: , bet Gulam var bÅ«t cits viedoklis; personÄ«gi man vÄl nav vÄlmes vÄrsties Amerikas tiesÄ, lai viÅus pÄrliecinÄtu.
Kaut kÄds kods
BibliotÄka - spÄlÄtÄju atbalsta projekts , ļauj lejupielÄdÄt noteikta kanÄla vai atskaÅoÅ”anas saraksta videoklipu sarakstu, lejupielÄdÄt detalizÄtu informÄciju par slavenu videoklipu (kas ir redzams videoklipa tÄ«mekļa lapÄ), iegÅ«t video ikonas adresi, kÄ arÄ« iegÅ«t videoklipa adresi. straume.
AtskaÅoÅ”anas saraksta ielÄdes kods ir nedaudz apgrÅ«tinoÅ”s, tÄpÄc es to Å”eit nesniegÅ”u, tiem, kas interesÄjas, ieskatieties avota kodÄ, tÄ bÅ«tÄ«bÄ ir klase .
ApskatÄ«sim, kÄ iegÅ«t video straumes adresi no publiskÄs video lapas adreses un atskaÅot to atskaÅotÄjÄ.
Savienojiet bibliotÄku ar
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Interesanti, ka pÄc tam jÅ«s joprojÄm nevarÄsit to izmantot, jo... piemÄri sÅ«dzÄsies par trÅ«kstoÅ”o Downloader klasi. To var iekopÄt projektÄ no automatizÄto testu direktorija - darbojas versijai 0.17.4 (Ŕķiet, ka Ŕī daļa tika pÄrtaisÄ«ta jaunÄkÄ bibliotÄkas versijÄ, bet mums vÄl ir jÄpÄrbauda).
Iegūstiet video straumes adresi, izmantojot YouTube vietnes video lapas adresi:
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;
}Videoklipa adrese ytVidUrl var bÅ«t jebkura YouTube vietnes videoklipa lapas publiskÄ adrese, piemÄram,
SpÄlÄtÄjs to darÄ«s no paÅ”a Google. Å is nav tÄ«mekļa iesaiÅojums pakalpojumÄ YouTube, bet gan Ä«sts iegults atskaÅotÄjs, kas ir diezgan elastÄ«gs un pielÄgojams jebkÄdu videoklipu atskaÅoÅ”anai. Tas var arÄ« atskaÅot video straumes no YouTube, ja norÄdÄt pareizo adresi. Tikko saÅÄmÄm straumes adresi, tÄpÄc paskatÄ«simies, kÄ to nosÅ«tÄ«t atskaÅotÄjam.
Savienojiet bibliotÄku ar projektu :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}MÄs neapsvÄrsim visas atskaÅotÄja komponenta ievietoÅ”anas lietojumprogrammas ekrÄnÄ nianses (piemÄrus varat apskatÄ«t projekta vietnÄ vai kodÄ), mÄs apskatÄ«sim tikai to, kÄ atskaÅotÄjÄ sÄkt atskaÅot videoklipu no YouTube. iepriekÅ” saÅemtÄ adrese:
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);
}
}ZinÄmÄs problÄmas
- NeatskaÅos videoklipus ar vecuma ierobežojumiem, kuriem ir jÄpiesakÄs jÅ«su Google/YouTube kontÄ
piemÄram: ,
padoms: pievienojiet Å”Ädus videoklipus melnajam sarakstam vai lÅ«dziet videoklipa autoram noÅemt kļūdas dÄļ noteikto ierobežojumu.
- Daži apraides videoklipi, kuriem pakalpojums atgriež nulles garumu, netiks atskaÅoti (Å”Ädiem videoklipiem ilgums sarakstos un galerijÄ ir atzÄ«mÄts kÄ ā[dur undef]ā).
piemÄram: ,
padoms: pievienojiet Å”Ädus videoklipus melnajam sarakstam.
- Videoklipi, kas ir pieejami tikai ar tieÅ”ajÄm saitÄm, var netikt iekļauti vietÄjÄ atskaÅoÅ”anas sarakstÄ, pat ja lejupielÄdÄjat visus lietotÄja videoklipus.
piemÄram:
Ja jÅ«s saskaraties ar publisku video, kuram nav nepiecieÅ”ama pieteikÅ”anÄs, tas tiek atskaÅots pÄrlÅ«kprogrammÄ, bet netiek atskaÅots atskaÅotÄjÄ, nosÅ«tiet kļūdas ziÅojumu (pilnÄ«gi iespÄjams, ka problÄma jau ir novÄrsta jaunajÄ versijÄ JaunsPipeExtractor un jums bÅ«s tikai jÄatjaunina komplekts ar Å”o versiju, ).
Saskarne var palÄninÄties, ja internets ir lÄns (bet nav izslÄgts)
KÄ rezultÄtÄ,
Mans dÄls no planÅ”etdatora pÄrgÄja uz Samsung viedo televizoru, kurÄ nevar palaist Android lietojumprogrammas. TÄpÄc vislabÄkÄ vecÄku kontrole joprojÄm ir personiska.
Bet aplikÄcija izrÄdÄ«jÄs pietiekami Ärta, lai es pati sÄktu to lietot. Pirmais iespaids no agrÄ«najÄm darba versijÄm bija tÄds, ka esmu citÄ pasaulÄ. Viss saturs tiek lejupielÄdÄts no YouTube, bet tas vairs nav YouTube, bet gan kaut kas cits, droÅ”s un kontrolÄts, it kÄ jÅ«s izÅemtu simtkÄju no acs un ieliktu to stikla burkÄ. Un tas viss attiecas uz ieteikumiem.
Avots: www.habr.com
