ProHoster > Blog > internet nuus > Dood van Koshchei in die lys van aanbevelings (is dit moontlik om YouTube knus en veilig te maak?)
Dood van Koshchei in die lys van aanbevelings (is dit moontlik om YouTube knus en veilig te maak?)
Die inleiding is kort: Ek wil praat oor die YouTube-aanlynspeler vir Android met plaaslike snitlyste, kanale en aanbevelings.
Uitgebreide inleiding:
'n Tyd gelede het ek presies dieselfde probleem ondervind as die skrywer van 'n wonderlike toepassing Kanaalwitlys, en het vir myself presies dieselfde houding teenoor haar bepaal: ek wil van tyd tot tyd vir die kind 'n tablet of slimfoon met spotprente kan gee, maar ek is glad nie tevrede met waar, na 2-3 klikke, die lys van aanbevelings lei die kind in standaard toepassings - YouTube kliënte.
Ongelukkig, nadat die Channel Whitelist-toepassing geïnstalleer is, het dit reeds 'n ander meer prosaïese, maar steeds noodlottige fout gehad - NIH het vir my (en, bowenal, vir my seun) gelyk of sy koppelvlak nie baie gerieflik was nie, veral na die gewoonte om die YouTube Kids te gebruik speler.
Oor die algemeen het ek na 'n tyd volwasse geword om my eie implementering te maak. Na 'n ruk het dit moontlik geword om 'n merker op die eerste vrystelling te plaas.
Belangrikste kenmerke:
Voeg jou gunsteling kanale en snitlyste by - hulle sal in die plaaslike databasis gestoor en geïndekseer word
Skakel ekstra video's binne die bygevoegde snitlyste af as jy dit nie nodig het nie
Die lys aanbevelings word net lukraak gegenereer uit die kanale en snitlyste wat by die toepassing gevoeg is
Wat volg is 'n oorsig van die hoofkenmerke in meer besonderhede, plus 'n paar tegniese besonderhede oor hoe om YouTube-video's in jou Android-toepassing te speel sonder om die Google API's en webomhulsels te gebruik.
Op die hoofskerm en op die spelerskerm: ewekansige aanbevelings van nie-ewekansige kanale
Onmiddellike soektog in die plaaslike databasis
=>
Voeg 'n nuwe kanaal of snitlys by
Soek op naam aanlyn of voeg 'n bekende adres in. Die lys video's van 'n kanaal of snitlys word op 'n plaaslike databasis gestoor, ikone word nie in die kas gekas nie.
Dinamiese snitlys - speel soekresultate
=>
In die aanbevelings onder die video sal daar slegs video's wees wat aan die soektog voldoen.
Net so, as jy 'n video vanaf die snitlysinstellings oopmaak, sal slegs video's van dieselfde snitlys in die aanbevelingslys verskyn.
Snitlyste en kanale kan tydelik afgeskakel en weer aangeskakel word
Let wel: video's van die gedeaktiveerde snitlys sal ook uit die soekresultate, blaaigeskiedenis en uit die gunstelinglys verdwyn. Maar moenie bekommerd wees nie, hulle sal weer daar verskyn onmiddellik nadat die snitlys weer aangeskakel is.
Swartlys video
'n Geblokkeerde video sal nie in aanbevelings verskyn nie, in soekresultate, sal uit die lys gunstelinge en uit die kykgeskiedenis verdwyn. Die video sal steeds in die snitlysinstellings sigbaar wees.
Bekyk die swartlys en heraktiveer items wat per ongeluk geblokkeer is: Instellings > kopkieslys > Swartlys
Gunsteling video's en kykgeskiedenis
Gunstelingvideo's op die spelerskerm word met 'n asterisk in die regter boonste hoek gemerk.
Kontekskieslyste in die skermtitel en op lang klik in galerye en lyste
Kopieer die naam of adres van 'n video of snitlys in die kykskerm of enige lys.
Vinnige begin - voeg aanbevole kanale en snitlyste by
=>
Die toepassing sal onmiddellik soos die skermkiekies hierbo lyk.
Onnodige kanale en snitlyste kan in die instellings afgeskakel of uitgevee word.
Nie op Googleplay nie en sal nie in die nabye toekoms wees nie (Google verbied toepassings wat die API omseil, hul werf ontleed, insluitend die voorgenoemde kanaalwitlys of die NewPipe-speler)
Hou in gedagte dat om te skakel tussen verskillende weergawes van verskillende bronne op dieselfde toestel nie sal werk nie as gevolg van verskillende handtekeninge van die apk-lêer, voordat u die weergawe vanaf 'n nuwe bron installeer, sal u eers die geïnstalleerde weergawe saam met die data moet uitvee - snitlyskas en blaaigeskiedenis (of vind uit hoe hierdie data oordra).
Tegniese besonderhede
Vereis nie 'n Google / YouTube-rekening nie, slegs die internet is nodig, gebruik biblioteke:
Vraag: Is skraapplekke sonder die toestemming (of met 'n uitdruklike verbod) van die skrywers oor die algemeen wettig? Google verwyder programme van Google Play af, wat nie hul API gebruik nie, maar hul werwe ontleed, want. hulle oortree hul gebruikersooreenkoms. Antwoord: Sekerlik, wettig, dit is aan jou watter instrument om te gebruik om publieke inligting te lees. Verder: Die Amerikaanse hof het die skraap van webwerf heeltemal gewettig en verbied dat dit tegnies belemmer word, maar Gul mag dalk 'n ander mening hê, persoonlik het ek geen begeerte om na 'n Amerikaanse hof te gaan om hulle te oortuig nie.
Sommige kode
Biblioteek NewPipeExtractor - speler helper projek Nuwe pyp, laat jou toe om 'n lys video's vir die gespesifiseerde kanaal of snitlys af te laai, gedetailleerde inligting oor 'n bekende video af te laai (wat op die webbladsy van die video sigbaar is), die adres van die video-ikoon te kry, en ook die adres van die videostroom.
Die kode vir die laai van die snitlys is 'n bietjie omslagtig, so ek sal dit nie hierheen bring nie, vir diegene wat belangstel - kyk na die bron, dit is basies 'n klas ContentLoader.
Kom ons kyk hoe om die adres van die videostroom van die adres van die publieke videobladsy te kry en dit in die speler te speel.
Dit is eienaardig dat dit daarna steeds nie gebruik kan word nie, want. die voorbeelde sal kla oor die vermiste Downloader-klas. Dit kan vanaf die outomatiese toetsgids na die projek gekopieer word NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - werk vir weergawe 0.17.4 (dit blyk dat hierdie deel in 'n nuwer weergawe van die biblioteek oorgedoen is, maar nog nagegaan moet word).
Kry die adres van die videostroom vanaf die adres van die videobladsy op die YouTube-webwerf:
Die speler sal eksospeler van Google self. Dit is nie 'n webomhulsel oor YouTube nie, maar 'n regte inbedbare speler om enige video's te speel, redelik buigsaam en aanpasbaar. Insluitend weet hoe om videostrome vanaf YouTube te speel, as jy die korrekte adres daarvoor spesifiseer. Ons het pas die stroomadres ontvang, so kom ons kyk hoe om dit na die speler te stuur.
Ons sal nie al die nuanses van die plasing van die spelerkomponent op die toepassingskerm oorweeg nie (jy kan dit in die voorbeelde op die projekwebwerf of in die kode sien), ons sal net kyk hoe om video's vanaf YouTube in die speler te begin speel by die adres hierbo verkry:
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 probleme
Sal nie video's speel met ouderdomsbeperkings wat 'n Google-/YouTube-rekeningaanmelding vereis nie
raad: voeg sulke video's by die swartlys of vra die skrywer van die video om die beperking wat per abuis gestel is, te verwyder.
Sommige uitsaaivideo's waarvoor die diens nul-lengte teruggee, sal nie speel nie (vir sulke video's is die tydsduur in die lyste en galery gemerk as "[dur undef]").
Video's wat slegs deur direkte skakels beskikbaar is, sal dalk nie by die plaaslike snitlys ingesluit word nie, selfs al laai jy al die gebruiker se video's af
As jy 'n publieke video teëkom wat nie 'n aanmelding vereis nie, in die blaaier speel, maar nie in die speler speel nie, stuur 'n foutverslag (dit is heel moontlik, die probleem is reeds reggestel in die nuwe weergawe NewPipeExtractor en jy hoef net die samestelling met hierdie weergawe op te dateer, byvoorbeeld).
Die koppelvlak kan stadiger word met 'n stadige (maar nie afgeskakel nie) internet
Uiteindelik
Die seun het van 'n tablet na 'n Samsung-slim-TV beweeg, wat nie Android-toepassings kan laat loop nie. Daarom is die beste ouerlike beheer steeds persoonlik.
Maar die toepassing was gerieflik genoeg vir my om dit self te begin gebruik. Die eerste indruk van die vroeë werkweergawes was dat ek in 'n ander wêreld beland het. Alle inhoud word van YouTube afgelaai, maar dit is nie meer YouTube nie, maar iets anders, veilig en beheer, asof jy 'n duisendpoot uit jou oog haal en dit in 'n glasfles sit. En dit gaan alles oor die aanbevelings.