Koščejaus mirtis yra rekomendacijų sąraše (ar įmanoma „YouTube“ padaryti jaukią ir saugią?)
Įžanga trumpa: noriu pakalbėti apie „YouTube“ internetinį grotuvą, skirtą „Android“, su vietiniais grojaraščiais, kanalais ir rekomendacijomis.
Išplėstas įvadas:
Prieš kurį laiką susidūriau su lygiai ta pačia problema, kaip ir nuostabios programos autorius Baltasis kanalų sąrašas, ir nusprendžiau sau lygiai tokį patį požiūrį į tai: noriu karts nuo karto vaikui padovanoti planšetę ar išmanųjį telefoną su animaciniais filmukais, bet visai nesidžiaugiu, kur po 2-3 paspaudimų atsiras sąrašas rekomendacijų standartinėse programose – YouTube klientai – paima vaiką.
Deja, įdiegus „Channel Whitelist“ aplikaciją, buvo aptiktas dar vienas proziškesnis, bet vis tiek lemtingas trūkumas – NIH I (ir, svarbiausia, mano sūnui) jos sąsaja pasirodė ne itin patogi, ypač po įpročio naudotis „YouTube Kids“ grotuvu.
Apskritai, po kurio laiko buvau pasiruošęs įgyvendinti savo. Po kurio laiko atsirado galimybė uždėti žymą pirmajam leidimui.
Pagrindinės savybės:
Pridėkite mėgstamus kanalus ir grojaraščius – jie bus išsaugoti ir indeksuojami vietinėje duomenų bazėje
Pridėtuose grojaraščiuose išjunkite nereikalingus vaizdo įrašus, jei jų nereikia
Rekomendacijų sąrašas generuojamas atsitiktinai tik iš kanalų ir grojaraščių, įtrauktų į programą
Toliau pateikiama išsamesnė pagrindinių funkcijų apžvalga, taip pat kai kurios techninės informacijos apie tai, kaip leisti „YouTube“ vaizdo įrašus „Android“ programoje nenaudojant „Google“ API ir žiniatinklio paketų.
Pagrindiniame ekrane ir grotuvo ekrane: atsitiktinės rekomendacijos iš neatsitiktinių kanalų
Greita paieška vietinėje duomenų bazėje
=>
Pridėkite naują kanalą arba grojaraštį
Ieškokite internete pagal vardą arba įveskite žinomą adresą. Kanalo ar grojaraščio vaizdo įrašų sąrašas išsaugomas vietinėje duomenų bazėje, piktogramos nesaugomos talpykloje.
Vaizdo įrašų rekomendacijose bus tik tie vaizdo įrašai, kurie atitinka paieškos užklausą.
Panašiai, jei atidarysite vaizdo įrašą iš grojaraščio nustatymų, rekomendacijų sąraše bus rodomi tik vaizdo įrašai iš to paties grojaraščio.
Grojaraščius ir kanalus galima laikinai išjungti ir vėl įjungti
Atkreipkite dėmesį: vaizdo įrašai iš išjungto grojaraščio taip pat dings iš paieškos rezultatų, žiūrėjimo istorijos ir mėgstamiausiųjų sąrašo. Tačiau nesijaudinkite, jie vėl pasirodys iškart po to, kai vėl bus įjungtas grojaraštis.
Įtraukite vaizdo įrašą į juodąjį sąrašą
Užblokuotas vaizdo įrašas nebus rodomas rekomendacijose, paieškos rezultatuose, dings iš mėgstamiausių sąrašo ir žiūrėjimo istorijos. Vaizdo įrašas vis tiek bus matomas grojaraščio nustatymuose.
Peržiūrėkite juodąjį sąrašą ir iš naujo įgalinkite per klaidą užblokuotus elementus: Nustatymai > antraštės meniu > Juodasis sąrašas
Mėgstamiausi vaizdo įrašai ir žiūrėjimo istorija
Mėgstamiausi vaizdo įrašai grotuvo ekrane pažymėti žvaigždute viršutiniame dešiniajame kampe.
Kontekstiniai meniu ekrano pavadinime ir ilgas paspaudimas galerijose ir sąrašuose
Nukopijuokite vaizdo įrašo arba grojaraščio pavadinimą arba adresą peržiūros ekrane arba bet kuriame sąraše.
Greita pradžia – pridėkite rekomenduojamus kanalus ir grojaraščius
=>
Programa iš karto atrodys kaip aukščiau pateiktos ekrano nuotraukos.
Nereikalingus kanalus ir grojaraščius galima išjungti arba ištrinti nustatymuose.
Jo nėra „Google Play“ ir artimiausiu metu nebus („Google“ uždraudžia programas, kurios apeina API ir analizuoja jų svetainę, įskaitant minėtą kanalų baltąjį sąrašą arba „NewPipe“ grotuvą)
Atminkite, kad perjungimas tarp skirtingų versijų iš skirtingų šaltinių tame pačiame įrenginyje neveiks dėl skirtingų apk failo parašų; prieš diegdami versiją iš naujo šaltinio, pirmiausia turėsite ištrinti įdiegtą versiją kartu su duomenimis - grojaraščio talpyklą ir naršymo istoriją (arba išsiaiškinkite, kaip perkelti duomenis).
Techninės detalės
Nereikia Google/YouTube paskyros, reikia tik interneto, naudoja šias bibliotekas:
klausimas: ar apskritai yra teisėta iškrapštyti svetaines be autorių leidimo (arba su aišku uždraudimu)? „Google“ pašalina programas iš „Google Play“., kurios nenaudoja savo API, bet analizuoja savo svetaines, nes jie pažeidžia savo vartotojo sutartį. atsakymas: žinoma, tai yra teisėta, tik jūs turite nuspręsti, kokiu įrankiu skaityti viešai prieinamą informaciją. Be to: JAV teismas visiškai įteisino interneto svetainių išgraužimą ir uždraudė techninius kišimosi į juos., bet Gul gali turėti kitokią nuomonę; asmeniškai aš dar neturiu noro kreiptis į Amerikos teismą, kad juos įtikinčiau.
Kažkoks kodas
biblioteka Naujas vamzdžių ištraukėjas - žaidėjų paramos projektas NewPipe, leidžia atsisiųsti nurodyto kanalo ar grojaraščio vaizdo įrašų sąrašą, atsisiųsti išsamią informaciją apie garsų vaizdo įrašą (kas matoma vaizdo įrašo tinklalapyje), gauti vaizdo įrašo piktogramos adresą, taip pat gauti vaizdo įrašo adresą. srautas.
Grojaraščio įkėlimo kodas yra šiek tiek sudėtingas, todėl čia jo nepateiksiu, kam įdomu, pažiūrėkite į šaltinio kodą, tai iš esmės yra klasė „ContentLoader“..
Pažiūrėkime, kaip gauti vaizdo srauto adresą iš viešojo vaizdo įrašo puslapio adreso ir paleisti jį grotuve.
Įdomu, kad po to vis tiek negalėsite juo naudotis, nes... pavyzdžiai skųsis dėl trūkstamos Downloader klasės. Jį galima nukopijuoti į projektą iš automatinių testų katalogo NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - veikia 0.17.4 versijai (atrodo, kad ši dalis buvo perdaryta naujesnėje bibliotekos versijoje, bet dar reikia patikrinti).
Gaukite vaizdo įrašo srauto adresą naudodami vaizdo įrašo puslapio adresą „YouTube“ svetainėje:
Žaidėjas bus „ExoPlayer“ iš pačios Google. Tai ne „YouTube“ žiniatinklio paketas, o tikras įterptasis grotuvas, skirtas leisti bet kokius vaizdo įrašus, gana lankstus ir pritaikomas. Jis taip pat gali leisti vaizdo įrašų srautus iš „YouTube“, jei pateikiate teisingą adresą. Ką tik gavome srauto adresą, tad pažiūrėkime, kaip nusiųsti jį grotuvui.
Mes nenagrinėsime visų grotuvo komponento pateikimo programos ekrane niuansų (pavyzdžius galite peržiūrėti projekto svetainėje arba kode), mes tik pažiūrėsime, kaip grotuve pradėti leisti vaizdo įrašą iš „YouTube“ adresu aukščiau gautas adresas:
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);
}
}
žinomos problemos
Neleis vaizdo įrašų su amžiaus apribojimais, kuriems reikia prisijungti prie „Google“ / „YouTube“ paskyros
patarimas: įtraukite tokius vaizdo įrašus į juodąjį sąrašą arba paprašykite vaizdo įrašo autoriaus pašalinti per klaidą nustatytą apribojimą.
Kai kurie transliuojami vaizdo įrašai, kuriems paslauga grąžina nulinį ilgį, nebus paleisti (tokiems vaizdo įrašams trukmė sąrašuose ir galerijoje pažymėta kaip „[dur undef]“).
patarimas: įtraukite tokius vaizdo įrašus į juodąjį sąrašą.
Vaizdo įrašai, pasiekiami tik naudojant tiesiogines nuorodas, gali būti neįtraukti į vietinį grojaraštį, net jei atsisiunčiate visus naudotojo vaizdo įrašus
Jei aptikote viešą vaizdo įrašą, kuriam nereikia prisijungimo, jis paleidžiamas naršyklėje, bet nerodomas grotuve, atsiųskite pranešimą apie klaidą (visai gali būti, kad problema jau išspręsta naujoje versijoje Naujas vamzdžių ištraukėjas ir jums reikės tik atnaujinti agregatą naudojant šią versiją, pavyzdžiui).
Sąsaja gali sulėtėti, jei internetas lėtas (bet neišjungtas)
Kaip rezultatas,
Mano sūnus iš planšetinio kompiuterio perėjo prie „Samsung“ išmaniojo televizoriaus, kuriame negalima paleisti „Android“ programų. Todėl geriausia tėvų kontrolė vis tiek yra asmeninė.
Tačiau aplikacija pasirodė pakankamai patogi, kad galėčiau pati pradėti ją naudoti. Pirmasis įspūdis iš ankstyvųjų darbinių versijų buvo toks, kad buvau kitame pasaulyje. Visas turinys parsisiunčiamas iš „YouTube“, bet tai jau ne „YouTube“, o kažkas kito, saugaus ir kontroliuojamo, tarsi šimtakojį ištrauktum iš akies ir įdėtum į stiklinį indelį. Ir viskas priklauso nuo rekomendacijų.