ProHoster > Blog > ynternet nijs > De dea fan Koshchei is op 'e list mei oanbefellings (is it mooglik om YouTube gesellich en feilich te meitsjen?)
De dea fan Koshchei is op 'e list mei oanbefellings (is it mooglik om YouTube gesellich en feilich te meitsjen?)
De ynlieding is koart: ik wol prate oer de YouTube online spiler foar Android mei lokale playlists, kanalen en oanbefellings.
Utwreide ynlieding:
In skoft lyn kaam ik krekt itselde probleem tsjin as de skriuwer fan in prachtige applikaasje Kanaal Whitelist, en foar mysels krekt deselde hâlding dêrfoar fêststeld: ik wol myn bern sa no en dan in tablet of smartphone mei tekenfilms jaan kinne, mar ik bin hielendal net bliid mei wêr't, nei 2-3 klikken, de list fan oanbefellings yn standert applikaasjes - YouTube kliïnten - nimt it bern.
Spitigernôch, nei it ynstallearjen fan 'e Channel Whitelist-applikaasje, waard in oare mear prozaïske, mar noch fatale flater ûntdutsen - NIH I (en, it wichtichste, myn soan) fûn syn ynterface net heul handich, foaral nei de gewoante om de YouTube Kids-spieler te brûken.
Yn 't algemien wie ik nei in skoft klear om myn eigen ymplemintaasje te meitsjen. Nei ferrin fan tiid waard it mooglik om in tag op de earste release te setten.
Key features:
Foegje jo favorite kanalen en playlists ta - se sille wurde bewarre en yndeksearre yn 'e lokale databank
Skeakelje ûnnedige fideo's út as jo se net nedich binne binnen tafoege playlists
De list mei oanbefellings wurdt allinich willekeurich generearre fan kanalen en playlists tafoege oan 'e applikaasje
Hjirûnder is in oersjoch fan 'e haadfunksjes yn mear detail, plus wat technyske details oer hoe't jo YouTube-fideo's kinne spielje yn jo Android-applikaasje sûnder de Google API en webwrappers te brûken.
Op it haadskerm en op it spilerskerm: willekeurige oanbefellings fan net-willekeurige kanalen
Direkt sykjen yn lokale databank
=>
Foegje in nij kanaal of playlist ta
Sykje op namme online of foegje in bekend adres yn. De list mei fideo's fan in kanaal of playlist wurdt bewarre yn 'e lokale databank; ikoanen wurde net yn it cache bewarre.
Dynamyske playlist - spielje sykresultaten
=>
Yn 'e fideo-oanbefellings sille d'r allinich fideo's wêze dy't de sykfraach befredigje.
Lykas, as jo in fideo iepenje fanút de playlistynstellingen, sille allinich fideo's fan deselde playlist ferskine yn 'e list mei oanbefellings.
Playlists en kanalen kinne tydlik út- en wer ynskeakele wurde
Tink derom: fideo's fan in útskeakele playlist sille ek ferdwine út sykresultaten, sjochskiednis en út 'e list mei favoriten. Mar meitsje jo gjin soargen, se sille der daliks wer ferskine nei't de playlist wer ynskeakele is.
Foegje in fideo ta oan 'e swarte list
In blokkearre fideo sil net werjûn wurde yn oanbefellings, yn sykresultaten, en sil ferdwine út 'e list mei favoriten en út' e besjenskiednis. De fideo sil noch sichtber wêze yn 'e playlist-ynstellingen.
Besjoch de swarte list en aktivearje items opnij ynskeakelje per flater blokkearre: Ynstellings> kopmenu> Swarte list
Favoriete fideo's en besjenskiednis
Favorite fideo's op it spielerskerm binne markearre mei in asterisk yn 'e rjochter boppeste hoeke.
Kontekstmenu's yn 'e skermtitel en langklikke yn galeryen en listen
Kopiearje de namme of adres fan in fideo of playlist yn it werjaanskerm as yn elke list.
Fluch start - foegje oanrikkemandearre kanalen en playlists ta
=>
De applikaasje sil daliks lykje op 'e skermôfbyldings hjirboppe.
Net-nedige kanalen en playlists kinne wurde útskeakele of wiske yn 'e ynstellings.
It is net op Google Play en sil net yn 'e heine takomst wêze (Google ferbiedt applikaasjes dy't de API omgean en har webside parse, ynklusyf de neamde Channel Whitelist as de NewPipe-spieler)
Hâld der rekken mei dat it wikseljen tusken ferskate ferzjes fan ferskate boarnen op itselde apparaat net sil wurkje fanwegen ferskillende hantekeningen fan it apk-bestân; foardat jo de ferzje fan in nije boarne ynstallearje, moatte jo earst de ynstalleare ferzje wiskje tegearre mei de gegevens - de playlist-cache en blêdzjeskiednis (of útfine hoe't jo gegevens oerdrage).
Technyske details
Hat gjin Google/YouTube-akkount nedich, jo hawwe allinich it ynternet nedich, brûkt de folgjende biblioteken:
NewPipeExtractor om gegevens te ûntfangen fan 'e YouTube-tsjinst en
fraach: Is it oer it algemien legaal te scrape websiden sûnder tastimming (of mei in eksplisite ferbod) út de skriuwers? Google ferwideret apps fan Google Play, dy't har API net brûke, mar har siden analysearje, om't se skeine harren brûkersoerienkomst. antwurdzje: fansels, it is legaal, it is oan jo hokker ark te brûken foar in lêzen iepenbier beskikber ynformaasje. Fierder: In Amerikaanske rjochtbank hat it skrappen fan websiden folslein legalisearre en technyske ynterferinsje dêrmei ferbean., mar Gul kin in oare miening hawwe, persoanlik haw ik noch net de winsk om nei in Amerikaanske rjochtbank te gean om har te oertsjûgjen.
Guon koade
Bibleteek NewPipeExtractor - projekt foar spielerstipe Newpipe, kinne jo in list mei fideo's downloade foar in spesifisearre kanaal of playlist, detaillearre ynformaasje downloade oer in ferneamde fideo (wat is sichtber op 'e webside fan' e fideo), it adres fan it fideo-ikoan krije, en ek it adres fan 'e fideo krije stream.
De koade foar it laden fan de playlist is in bytsje omslachtich, dus ik sil it hjir net jaan, foar belangstellenden, besjoch de boarnekoade, it is yn prinsipe in klasse ContentLoader.
Litte wy sjen hoe't jo it adres fan in fideostream krije fan it adres fan 'e iepenbiere fideoside en it spielje yn' e spiler.
It is nijsgjirrich dat jo it dêrnei noch net brûke kinne, om't ... foarbylden sille kleie oer de ûntbrekkende Downloader klasse. It kin wurde kopieare nei it projekt út 'e automatyske testmap NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - wurket foar ferzje 0.17.4 (it liket derop dat dit diel is opnij makke yn in nijere ferzje fan 'e bibleteek, mar wy moatte noch kontrolearje).
Krij it adres fan 'e fideostream troch it adres fan' e fideoside op 'e YouTube-webside:
De spiler sil wêze exoplayer fan Google sels. Dit is gjin webwrapper oer YouTube, mar in echte ynbêde spiler foar it spieljen fan alle fideo's, frij fleksibel en oanpasber. It kin ek fideostreams fan YouTube spielje as jo it it juste adres leverje. Wy hawwe krekt it streamadres krigen, dus litte wy sjen hoe't jo it nei de spiler kinne stjoere.
Wy sille net beskôgje alle nuânses fan it pleatsen fan de spiler komponint op it applikaasje skerm (jo kinne sjen nei de foarbylden op de projekt webside of yn de koade), wy sille allinne sjen nei hoe't te begjinnen mei it spieljen fan in fideo fan YouTube yn de spiler by it hjirboppe ûntfongen adres:
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);
}
}
Bekende problemen
Sil gjin fideo's spielje mei leeftydsbeperkingen dy't oanmelde by jo Google/YouTube-akkount fereaskje
advys: foegje sokke fideo's ta oan 'e swarte list of freegje de skriuwer fan 'e fideo om de beheining te ferwiderjen dy't per fersin ynsteld is.
Guon útstjoerfideo's wêrfoar de tsjinst nul lingte jout, sille net spielje (foar sokke fideo's is de doer yn 'e listen en galery markearre as "[dur undef]").
advys: foegje sokke fideo's ta oan 'e swarte list.
Fideo's dy't allinich beskikber binne fia direkte keppelings meie net opnommen wurde yn 'e lokale playlist, sels as jo alle fideo's fan 'e brûker downloade
As jo in iepenbiere fideo tsjinkomme dy't gjin oanmelding fereasket, spielet yn 'e browser, mar net spielet yn' e spiler, stjoer dan in brekrapport (it is heul mooglik dat it probleem al is reparearre yn 'e nije ferzje NewPipeExtractor en jo sille allinich de gearkomste moatte bywurkje mei dizze ferzje, bygelyks).
De ynterface kin fertrage as it ynternet traach is (mar net útskeakele)
As gefolch,
Myn soan ferhuze fan in tablet nei in Samsung smart TV, dy't gjin Android-applikaasjes kin útfiere. Dêrom is de bêste âlderlike kontrôle noch persoanlik.
Mar de applikaasje die bliken handich genôch te wêzen foar my om it sels te begjinnen te brûken. De earste yndruk fan 'e iere wurkferzjes wie dat ik yn in oare wrâld wie. Alle ynhâld wurdt ynladen fan YouTube, mar dit is net mear YouTube, mar wat oars, feilich en kontrolearre, as soe jo nimme in centipede út dyn each en sette it yn in glêzen pot. En it is alles oer de oanbefellings.