ProHoster > Blog > balita sa internet > Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)
Ang pagkamatay ni Koshchei ay nasa listahan ng mga rekomendasyon (posible bang gawing komportable at ligtas ang YouTube?)
Ang panimula ay maikli: Gusto kong pag-usapan ang YouTube online player para sa Android na may mga lokal na playlist, channel at rekomendasyon.
Pinalawak na pagpapakilala:
Ilang oras na ang nakalipas nakatagpo ako ng eksaktong parehong problema bilang ang may-akda ng isang kahanga-hangang application Whitelist ng Channel, at natukoy para sa aking sarili ang eksaktong parehong saloobin tungkol dito: Gusto kong mabigyan ang aking anak ng isang tablet o smartphone na may mga cartoon paminsan-minsan, ngunit hindi ako nasisiyahan kung saan, pagkatapos ng 2-3 pag-click, ang listahan ng mga rekomendasyon sa karaniwang mga application - mga kliyente ng YouTube - kumukuha ng bata.
Sa kasamaang palad, pagkatapos i-install ang Channel Whitelist na application, isa pang mas prosaic, ngunit nakamamatay na depekto pa rin ang natuklasan - NIH I (at, higit sa lahat, ang aking anak) ay natagpuan na ang interface nito ay hindi masyadong maginhawa, lalo na pagkatapos ng ugali ng paggamit ng YouTube Kids player.
Sa pangkalahatan, pagkaraan ng ilang oras ay handa na akong gumawa ng sarili kong pagpapatupad. Pagkaraan ng ilang oras, naging posible na maglagay ng tag sa unang release.
Mga pangunahing tampok:
Idagdag ang iyong mga paboritong channel at playlist - mase-save at mai-index ang mga ito sa lokal na database
Sa mga idinagdag na playlist, i-off ang mga hindi kinakailangang video kung hindi mo kailangan ang mga ito
Ang listahan ng mga rekomendasyon ay random na nabuo lamang mula sa mga channel at playlist na idinagdag sa application
Nasa ibaba ang isang pangkalahatang-ideya ng mga pangunahing tampok nang mas detalyado, kasama ang ilang teknikal na detalye sa kung paano mag-play ng mga video sa YouTube sa iyong Android application nang hindi gumagamit ng Google API at mga web wrapper.
Sa pangunahing screen at sa screen ng player: mga random na rekomendasyon mula sa mga hindi random na channel
Instant na paghahanap sa lokal na database
=>
Magdagdag ng bagong channel o playlist
Maghanap ayon sa pangalan online o maglagay ng kilalang address. Ang listahan ng mga video ng isang channel o playlist ay naka-save sa lokal na database; ang mga icon ay hindi naka-cache.
Dynamic na playlist - i-play ang mga resulta ng paghahanap
=>
Sa mga rekomendasyon sa video magkakaroon lamang ng mga video na nakakatugon sa query sa paghahanap.
Katulad nito, kung magbubukas ka ng video mula sa mga setting ng playlist, ang mga video lang mula sa parehong playlist ang lalabas sa listahan ng mga rekomendasyon.
Maaaring pansamantalang i-off at i-on muli ang mga playlist at channel
Pakitandaan: ang mga video mula sa isang hindi pinaganang playlist ay mawawala rin sa mga resulta ng paghahanap, kasaysayan ng panonood at mula sa listahan ng mga paborito. Ngunit huwag mag-alala, lilitaw silang muli doon pagkatapos na muling i-on ang playlist.
Magdagdag ng video sa blacklist
Ang isang naka-block na video ay hindi ipapakita sa mga rekomendasyon, sa mga resulta ng paghahanap, at mawawala sa listahan ng mga paborito at mula sa kasaysayan ng panonood. Makikita pa rin ang video sa mga setting ng playlist.
Tingnan ang blacklist at muling paganahin ang mga item na na-block nang hindi sinasadya: Mga Setting > menu ng header > Blacklist
Mga paboritong video at kasaysayan ng panonood
Ang mga paboritong video sa screen ng player ay minarkahan ng asterisk sa kanang sulok sa itaas.
Mga menu ng konteksto sa pamagat ng screen at pag-click nang matagal sa mga gallery at listahan
Kopyahin ang pangalan o address ng isang video o playlist sa screen ng panonood o sa anumang listahan.
Mabilis na pagsisimula - magdagdag ng mga inirerekomendang channel at playlist
=>
Ang application ay magiging kamukha kaagad ng mga screenshot sa itaas.
Ang mga hindi kinakailangang channel at playlist ay maaaring i-off o tanggalin sa mga setting.
Wala ito sa Google Play at hindi na sa malapit na hinaharap (pinagbabawal ng Google ang mga application na nag-bypass sa API at nag-parse ng kanilang website, kasama ang nabanggit na Channel Whitelist o ang NewPipe player)
Tandaan na ang paglipat sa pagitan ng iba't ibang mga bersyon mula sa iba't ibang mga mapagkukunan sa parehong device ay hindi gagana dahil sa iba't ibang mga lagda ng apk file; bago i-install ang bersyon mula sa isang bagong pinagmulan, kailangan mo munang tanggalin ang naka-install na bersyon kasama ang data - ang cache ng playlist at kasaysayan ng pagba-browse (o alamin kung paano maglipat ng data).
Mga detalyeng teknikal
Hindi nangangailangan ng Google/YouTube account, kailangan mo lang ng Internet, ginagamit ang mga sumusunod na library:
BagongPipeExtractor upang makatanggap ng data mula sa serbisyo ng YouTube at
tanong: Sa pangkalahatan ba ay legal na mag-scrape ng mga website nang walang pahintulot (o may tahasang pagbabawal) mula sa mga may-akda? Inaalis ng Google ang mga app sa Google Play, na hindi gumagamit ng kanilang API, ngunit nag-parse ng kanilang mga site, dahil nilalabag nila ang kanilang kasunduan sa gumagamit. sagot: siyempre, ito ay legal, nasa iyo kung aling tool ang gagamitin upang basahin ang impormasyong magagamit sa publiko. At saka: Ganap na ginawang legal ng isang korte sa US ang pag-scrape ng website at ipinagbabawal ang teknikal na panghihimasok dito., ngunit maaaring may ibang opinyon si Gul; sa personal, wala pa akong pagnanais na pumunta sa korte ng Amerika para kumbinsihin sila.
Ilang code
Aklatan BagongPipeExtractor - proyekto ng suporta sa manlalaro Newpipe, ay nagbibigay-daan sa iyong mag-download ng listahan ng mga video para sa isang tinukoy na channel o playlist, mag-download ng detalyadong impormasyon tungkol sa isang sikat na video (kung ano ang nakikita sa web page ng video), kunin ang address ng icon ng video, at makuha din ang address ng video stream.
Ang code para sa paglo-load ng playlist ay medyo mahirap, kaya hindi ko ito ibibigay dito, para sa mga interesado, tingnan ang source code, ito ay karaniwang isang klase ContentLoader.
Tingnan natin kung paano kunin ang address ng isang video stream mula sa address ng pampublikong pahina ng video at i-play ito sa player.
Nakakapagtaka na pagkatapos nito ay hindi mo pa rin magagamit ito, dahil... ang mga halimbawa ay magrereklamo tungkol sa nawawalang klase ng Downloader. Maaari itong kopyahin sa proyekto mula sa direktoryo ng mga awtomatikong pagsubok NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - gumagana para sa bersyon 0.17.4 (tila ang bahaging ito ay muling ginawa sa isang mas bagong bersyon ng library, ngunit kailangan pa rin nating suriin).
Kunin ang address ng video stream sa pamamagitan ng address ng page ng video sa website ng YouTube:
Gagawin ng manlalaro exoplayer mula mismo sa Google. Ito ay hindi isang web wrapper sa YouTube, ngunit isang tunay na naka-embed na player para sa paglalaro ng anumang mga video, medyo flexible at nako-customize. Maaari rin itong mag-play ng mga video stream mula sa YouTube kung bibigyan mo ito ng tamang address. Kakatanggap lang namin ng stream address, kaya tingnan natin kung paano ipadala ito sa player.
Hindi namin isasaalang-alang ang lahat ng mga nuances ng paglalagay ng bahagi ng player sa screen ng application (maaari mong tingnan ang mga halimbawa sa website ng proyekto o sa code), titingnan lamang namin kung paano magsimulang mag-play ng isang video mula sa YouTube sa player sa ang address na natanggap sa itaas:
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);
}
}
Mga Kilalang Isyu
Hindi magpe-play ng mga video na may mga paghihigpit sa edad na nangangailangan ng pag-login sa iyong Google/YouTube account
payo: magdagdag ng mga ganitong video sa blacklist o hilingin sa may-akda ng video na alisin ang paghihigpit na hindi sinasadyang itinakda.
Ang ilang mga broadcast na video kung saan ang serbisyo ay nagbabalik ng zero na haba ay hindi magpe-play (para sa mga naturang video, ang tagal sa mga listahan at gallery ay minarkahan bilang "[dur undef]")
payo: magdagdag ng mga ganitong video sa blacklist.
Maaaring hindi maisama sa lokal na playlist ang mga video na available lang sa pamamagitan ng mga direktang link, kahit na i-download mo ang lahat ng video ng user
Kung nakatagpo ka ng isang pampublikong video na hindi nangangailangan ng pag-login, nagpe-play sa browser, ngunit hindi nagpe-play sa player, magpadala ng ulat ng bug (posible na ang problema ay naayos na sa bagong bersyon BagongPipeExtractor at kakailanganin mo lamang na i-update ang pagpupulong gamit ang bersyong ito, halimbawa).
Maaaring bumagal ang interface kung mabagal ang Internet (ngunit hindi naka-off)
Bilang isang resulta,
Ang aking anak na lalaki ay lumipat mula sa isang tablet patungo sa isang Samsung smart TV, na hindi maaaring magpatakbo ng mga Android application. Samakatuwid, ang pinakamahusay na kontrol ng magulang ay personal pa rin.
Ngunit ang application ay naging sapat na maginhawa para sa akin upang simulan ang paggamit nito sa aking sarili. Ang unang impresyon mula sa mga naunang gumaganang bersyon ay nasa ibang mundo ako. Ang lahat ng nilalaman ay dina-download mula sa YouTube, ngunit ito ay hindi na YouTube, ngunit iba pa, ligtas at kontrolado, na parang kinuha mo ang isang alupihan sa iyong mata at inilagay ito sa isang garapon. At lahat ito ay tungkol sa mga rekomendasyon.