Entwodiksyon an se kout: Mwen vle pale sou jwè a sou entènèt YouTube pou Android ak lis lokal, chanèl ak rekòmandasyon.

Entwodiksyon elaji:
Kèk tan de sa mwen te rankontre egzakteman menm pwoblèm ak otè a nan yon aplikasyon bèl bagay , ak detèmine pou tèt mwen egzakteman menm atitid la anvè li: Mwen vle kapab bay pitit mwen an yon tablèt oswa smartphone ak desen anime de tan zan tan, men mwen pa ditou kontan ak kote, apre 2-3 klik, lis la. nan rekòmandasyon nan aplikasyon estanda - kliyan YouTube - pran timoun nan.
Malerezman, apre yo fin enstale aplikasyon Channel Whitelist la, yo te dekouvri yon lòt defo ki pi prozaik, men ki toujou fatal - NIH mwen (epi pi enpòtan an, pitit gason m nan) te jwenn koòdone li pa trè pratik, sitou apre abitid itilize jwè YouTube Kids la.
An jeneral, apre kèk tan mwen te pare pou fè pwòp aplikasyon mwen. Apre kèk tan, li te vin posib yo mete yon tag sou premye lage a.
Karakteristik prensipal:
- Ajoute chanèl ou ak lis pi renmen yo - yo pral sove ak endis nan baz done lokal la
- Nan lis ajoute, fèmen videyo ki pa nesesè si ou pa bezwen yo
- Lis rekòmandasyon yo pwodwi owaza sèlman nan chanèl ak lis ki te ajoute nan aplikasyon an
Sous louvri, lisans GPLv3:
Anba la a se yon apèsi sou karakteristik prensipal yo an plis detay, plis kèk detay teknik sou kòman yo jwe videyo YouTube nan aplikasyon android ou san yo pa itilize API Google ak anbalaj entènèt.
Sou ekran prensipal la ak sou ekran jwè a: rekòmandasyon o aza soti nan chanèl ki pa o aza
Rechèch enstantane nan baz done lokal yo
=>
Ajoute yon nouvo chanèl oswa playlist
Chèche pa non sou entènèt oswa mete yon adrès li te ye. Lis videyo yon chanèl oswa yon playlist sove nan baz done lokal la; ikon yo pa kache.
Playlist dinamik - jwe rezilta rechèch la
=>
Nan rekòmandasyon videyo yo pral sèlman videyo ki satisfè rechèch rechèch la.
Menm jan an tou, si ou louvri yon videyo ki soti nan paramèt playlist yo, sèlman videyo ki soti nan menm lis la ap parèt nan lis rekòmandasyon yo.
Playlists ak chanèl yo ka tanporèman etenn epi limen ankò
Tanpri sonje: videyo ki soti nan yon playlist ki andikape yo pral disparèt tou nan rezilta rechèch la, gade istwa ak nan lis favorites yo. Men, pa enkyete, yo pral parèt la ankò imedyatman apre lis la se vire sou ankò.
Ajoute yon videyo sou lis nwa a
Yon videyo bloke pa pral parèt nan rekòmandasyon, nan rezilta rechèch, epi yo pral disparèt nan lis la nan favorites ak nan istwa a gade. Videyo a ap toujou vizib nan paramèt playlist yo.
Gade lis nwa a ak re-pèmèt atik bloke pa erè:
Anviwònman> meni header> Lis nwa
Videyo pi renmen ak istwa gade
Videyo pi renmen sou ekran jwè a make ak yon asterisk nan kwen anwo dwat.
Meni kontèks nan tit ekran an epi klike long nan galri ak lis
Kopi non oswa adrès yon videyo oswa playlist nan ekran an gade oswa nan nenpòt lis.
Kòmanse rapid - ajoute chanèl rekòmande ak lis
=>
Aplikasyon an pral imedyatman sanble ak Ekran ki anwo yo.
Chanèl ak lis ki pa nesesè yo ka fèmen oswa efase nan paramèt yo.
Enstalasyon
Paj pwojè:
an Anglè:
lage:
- Li pa sou Google Play epi li pa pral nan fiti prè (Google entèdi aplikasyon ki kontoune API a epi analize sit entènèt yo, ki gen ladan lis chanèl mansyone oswa jwè NewPipe)
- Konstwi soti nan sous:
- Telechaje apk nan seksyon an degaje:
- Mwen espere ke li pral parèt nan katalòg la apre kèk tan (, men li pa deplase pi lwen pou prèske yon mwa), men poko
Kenbe nan tèt ou ke chanje ant diferan vèsyon ki soti nan diferan sous sou menm aparèy la pa pral travay akòz siyati diferan nan fichye apk la; anvan ou enstale vèsyon an soti nan yon nouvo sous, ou pral premye oblije efase vèsyon an enstale ansanm ak done yo - kachèt playlist la ak istwa Navigasyon (oswa konnen ki jan yo transfere done).
Detay teknik
Pa mande pou yon kont Google/YouTube, ou sèlman bezwen entènèt la, sèvi ak bibliyotèk sa yo:
- pou resevwa done nan sèvis YouTube la ak
- pou jwe videyo.
Sous louvri, lisans GPLv3 gratis.
kesyon: Èske li jeneralman legal yo grate sit entènèt san pèmisyon (oswa avèk yon entèdiksyon eksplisit) nan men otè yo? , ki pa sèvi ak API yo, men analize sit yo, paske yo vyole akò itilizatè yo.
repons: nan kou, li legal, se ou menm ki zouti yo itilize pou li enfòmasyon ki disponib piblikman. Anplis de sa: , men Gul ka gen yon opinyon diferan; pèsonèlman, mwen poko gen dezi pou ale nan yon tribinal Ameriken pou konvenk yo.
Kèk kòd
bibliyotèk - pwojè sipò jwè , pèmèt ou telechaje yon lis videyo pou yon chanèl espesifye oswa playlist, telechaje enfòmasyon detaye sou yon videyo pi popilè (sa ki vizib sou paj wèb videyo a), jwenn adrès ikòn videyo a, epi tou jwenn adrès videyo a. kouran.
Kòd pou chaje playlist la se yon ti kras ankonbran, kidonk mwen pa pral bay li isit la, pou moun ki enterese, gade nan kòd sous la, se fondamantalman yon klas. .
Ann wè ki jan yo jwenn adrès la nan yon kouran videyo soti nan adrès la nan paj videyo piblik la epi jwe li nan jwè a.
Konekte bibliyotèk la
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Li kirye ke apre sa ou toujou p ap kapab sèvi ak li, paske... egzanp yo pral plenyen sou klas Downloader ki manke a. Li ka kopye nan pwojè a soti nan anyè tès otomatik yo - travay pou vèsyon 0.17.4 (li sanble ke pati sa a te refè nan yon vèsyon pi nouvo nan bibliyotèk la, men nou toujou bezwen tcheke).
Jwenn adrès videyo a pa adrès paj videyo a sou sit entènèt YouTube la:
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;
}Adrès videyo ytVidUrl kapab adrès piblik la nan paj nenpòt videyo sou sit entènèt YouTube la, pou egzanp.
Jwè a pral soti nan Google tèt li. Sa a se pa yon wrapper entènèt sou YouTube, men yon reyèl jwè entegre pou jwe nenpòt videyo, byen fleksib ak customizable. Li kapab tou jwe kouran videyo soti nan YouTube si ou bay li ak adrès ki kòrèk la. Nou jis resevwa adrès kouran an, kidonk ann wè ki jan yo voye li bay jwè a.
Konekte bibliyotèk la ak pwojè a :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Nou pa pral konsidere tout nuans yo nan mete eleman jwè a sou ekran aplikasyon an (ou ka gade egzanp yo sou sit entènèt pwojè a oswa nan kòd la), nou pral sèlman gade nan ki jan yo kòmanse jwe yon videyo soti nan YouTube nan jwè a nan adrès ou resevwa pi wo a:
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);
}
}Konnen Pwoblèm
- Pa pral jwe videyo ki gen restriksyon laj ki mande pou konekte sou kont Google/YouTube ou
pa egzanp: ,
konsèy: ajoute videyo sa yo nan lis nwa a oswa mande otè videyo a pou retire restriksyon ki te mete pa erè a.
- Gen kèk videyo emisyon pou ki sèvis la retounen zewo longè pa pral jwe (pou videyo sa yo, dire a nan lis yo ak galri yo make kòm "[dur undef]").
pa egzanp: ,
konsèy: ajoute videyo sa yo nan lis nwa a.
- Videyo ki disponib sèlman atravè lyen dirèk yo ka pa enkli nan playlist lokal la, menm si w telechaje tout videyo itilizatè a.
pa egzanp:
Si ou rankontre yon videyo piblik ki pa mande pou yon login, jwe nan navigatè a, men li pa jwe nan jwè a, voye yon rapò ensèk (li se byen posib ke pwoblèm nan te deja fiks nan nouvo vèsyon an NewPipeExtractor epi w ap sèlman bezwen mete ajou asanble a ak vèsyon sa a, ).
Koòdone a ka ralanti si Entènèt la dousman (men li pa fèmen)
Nan fen an
Pitit gason m 'te deplase soti nan yon grenn nan yon televizyon entelijan Samsung, ki pa ka kouri aplikasyon pou android. Se poutèt sa, pi bon kontwòl paran an toujou pèsonèl.
Men, aplikasyon an te tounen ase pratik pou mwen kòmanse sèvi ak li tèt mwen. Premye enpresyon ki soti nan vèsyon yo k ap travay byen bonè se ke mwen te nan yon lòt mond. Tout kontni telechaje soti nan YouTube, men sa a se pa YouTube ankò, men yon lòt bagay, san danje epi kontwole, kòm si ou te pran yon santipèd soti nan je ou epi mete l 'nan yon bokal an vè. Epi li se tout sou rekòmandasyon yo.
Sous: www.habr.com
