Utangulizi ni mfupi: Ninataka kuzungumza kuhusu kichezaji mtandaoni cha YouTube cha Android na orodha za kucheza za ndani, vituo na mapendekezo.

Utangulizi uliopanuliwa:
Wakati fulani uliopita nilikutana na shida sawa na mwandishi wa programu nzuri , na niliamua mwenyewe mtazamo sawa juu yake: Ninataka kuwa na uwezo wa kumpa mtoto wangu kibao au smartphone na katuni mara kwa mara, lakini sifurahii kabisa ambapo, baada ya kubofya 2-3, orodha. ya mapendekezo katika programu za kawaida - wateja wa YouTube - huchukua mtoto.
Kwa bahati mbaya, baada ya kusanikisha programu ya Orodha iliyoidhinishwa ya Channel, dosari nyingine zaidi ya prosaic, lakini bado mbaya iligunduliwa - NIH I (na, muhimu zaidi, mwanangu) ilipata kiolesura chake sio rahisi sana, haswa baada ya tabia ya kutumia kicheza YouTube Kids.
Kwa ujumla, baada ya muda fulani nilikuwa tayari kufanya utekelezaji wangu mwenyewe. Baada ya muda, iliwezekana kuweka lebo kwenye toleo la kwanza.
Vipengele muhimu:
- Ongeza vituo na orodha zako za kucheza uzipendazo - zitahifadhiwa na kuorodheshwa katika hifadhidata ya karibu nawe
- Ndani ya orodha za kucheza zilizoongezwa, zima video zisizo za lazima ikiwa huzihitaji
- Orodha ya mapendekezo inatolewa bila mpangilio pekee kutoka kwa vituo na orodha za kucheza zilizoongezwa kwenye programu
Chanzo huria, leseni ya GPLv3:
Ufuatao ni muhtasari wa vipengele vikuu kwa undani zaidi, pamoja na baadhi ya maelezo ya kiufundi kuhusu jinsi ya kucheza video za YouTube katika programu yako ya Android bila kutumia API ya Google na kanga za wavuti.
Kwenye skrini kuu na kwenye skrini ya mchezaji: mapendekezo ya nasibu kutoka kwa njia zisizo za nasibu
Utafutaji wa papo hapo katika hifadhidata ya ndani
=>
Ongeza kituo kipya au orodha ya kucheza
Tafuta kwa jina mtandaoni au weka anwani inayojulikana. Orodha ya video za kituo au orodha ya kucheza huhifadhiwa kwenye hifadhidata ya ndani; aikoni hazijahifadhiwa.
Orodha ya kucheza yenye nguvu - cheza matokeo ya utafutaji
=>
Katika mapendekezo ya video kutakuwa na video zinazokidhi hoja ya utafutaji pekee.
Vile vile, ukifungua video kutoka kwa mipangilio ya orodha ya kucheza, ni video tu kutoka kwa orodha moja ya kucheza zitaonekana kwenye orodha ya mapendekezo.
Orodha za kucheza na vituo vinaweza kuzimwa kwa muda na kuwashwa tena
Tafadhali kumbuka: video kutoka kwa orodha ya kucheza iliyozimwa pia zitatoweka kutoka kwa matokeo ya utafutaji, historia ya kutazama na kutoka kwa orodha ya vipendwa. Lakini usijali, zitaonekana hapo tena mara baada ya orodha ya kucheza kuwashwa tena.
Ongeza video kwenye orodha iliyoidhinishwa
Video iliyozuiwa haitaonyeshwa katika mapendekezo, katika matokeo ya utafutaji, na itatoweka kutoka kwenye orodha ya vipendwa na kutoka kwa historia ya kutazama. Video bado itaonekana katika mipangilio ya orodha ya kucheza.
Tazama orodha iliyoidhinishwa na uwashe tena vipengee vilivyozuiwa kimakosa:
Mipangilio > menyu ya vichwa > Orodha nyeusi
Video unazopenda na historia ya kutazama
Video unazopenda kwenye skrini ya kichezaji zimewekwa alama ya nyota kwenye kona ya juu kulia.
Menyu za muktadha katika kichwa cha skrini na ubofye kwa muda mrefu kwenye maghala na orodha
Nakili jina au anwani ya video au orodha ya kucheza kwenye skrini ya kutazama au katika orodha yoyote.
Anza haraka - ongeza vituo na orodha za kucheza zinazopendekezwa
=>
Programu itaonekana mara moja kama picha za skrini hapo juu.
Vituo na orodha za kucheza zisizohitajika zinaweza kuzimwa au kufutwa katika mipangilio.
Ufungaji
Ukurasa wa mradi:
kwa Kingereza:
matoleo:
- Haiko kwenye Google Play na haitakuwa katika siku za usoni (Google inapiga marufuku programu ambazo hupita API na kuchanganua tovuti yao, ikijumuisha Orodha iliyoidhinishwa ya Idhaa iliyotajwa au kicheza NewPipe)
- Jenga kutoka kwa vyanzo:
- Pakua apk kutoka sehemu ya matoleo:
- Natumai itaonekana kwenye orodha baada ya muda (, lakini haijasonga zaidi kwa karibu mwezi mmoja), lakini bado
Kumbuka kwamba kubadilisha kati ya matoleo tofauti kutoka kwa vyanzo tofauti kwenye kifaa kimoja haitafanya kazi kwa sababu ya saini tofauti za faili ya apk; kabla ya kusakinisha toleo kutoka kwa chanzo kipya, itabidi kwanza ufute toleo lililosakinishwa pamoja na data - kache ya orodha ya kucheza na historia ya kuvinjari (au tambua jinsi ya kuhamisha data).
Maelezo ya kiufundi
Haihitaji akaunti ya Google/YouTube, unahitaji mtandao pekee, hutumia maktaba zifuatazo:
- kupokea data kutoka kwa huduma ya YouTube na
- kucheza video.
Chanzo huria, leseni ya GPLv3 ya bure.
swali: Je, ni halali kwa ujumla kufuta tovuti bila ruhusa (au kwa marufuku ya wazi) kutoka kwa waandishi? , ambazo hazitumii API zao, lakini huchanganua tovuti zao, kwa sababu wanakiuka makubaliano ya mtumiaji.
jibu: bila shaka, ni halali, ni juu yako ni chombo gani cha kutumia kusoma habari zinazopatikana kwa umma. Zaidi ya hayo: , lakini Gul anaweza kuwa na maoni tofauti; binafsi, bado sina hamu ya kwenda kwenye mahakama ya Marekani ili kuwashawishi.
Baadhi ya kanuni
maktaba - Mradi wa usaidizi wa mchezaji , hukuruhusu kupakua orodha ya video kwa kituo maalum au orodha ya kucheza, pakua maelezo ya kina kuhusu video maarufu (inayoonekana kwenye ukurasa wa wavuti wa video), pata anwani ya ikoni ya video, na pia upate anwani ya video. mkondo.
Nambari ya kupakia orodha ya kucheza ni ngumu kidogo, kwa hivyo sitaitoa hapa, kwa wale wanaopenda, angalia msimbo wa chanzo, kimsingi ni darasa. .
Hebu tuone jinsi ya kupata anwani ya mtiririko wa video kutoka kwa anwani ya ukurasa wa video ya umma na kuicheza kwenye kichezaji.
Unganisha maktaba kwa
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Inashangaza kwamba baada ya hii bado hautaweza kuitumia, kwa sababu ... mifano italalamika juu ya kukosa darasa la Upakuaji. Inaweza kunakiliwa kwa mradi kutoka kwa saraka ya majaribio ya kiotomatiki - inafanya kazi kwa toleo la 0.17.4 (inaonekana kwamba sehemu hii ilifanywa upya katika toleo jipya la maktaba, lakini bado tunahitaji kuangalia).
Pata anwani ya mtiririko wa video kwa anwani ya ukurasa wa video kwenye tovuti ya YouTube:
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;
}Anwani ya video ytVidUrl inaweza kuwa anwani ya umma ya ukurasa wa video yoyote kwenye tovuti ya YouTube, kwa mfano.
Mchezaji atakuwa kutoka kwa Google yenyewe. Hiki si kibandiko cha wavuti juu ya YouTube, lakini ni kichezaji halisi kilichopachikwa cha kucheza video zozote, kinachonyumbulika kabisa na kinachoweza kubinafsishwa. Inaweza pia kucheza mitiririko ya video kutoka YouTube ikiwa utaipa anwani sahihi. Tumepokea anwani ya mtiririko, kwa hivyo hebu tuone jinsi ya kuituma kwa kichezaji.
Unganisha maktaba kwenye mradi :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Hatutazingatia nuances yote ya kuweka sehemu ya kicheza kwenye skrini ya programu (unaweza kuangalia mifano kwenye wavuti ya mradi au kwa nambari), tutaangalia tu jinsi ya kuanza kucheza video kutoka YouTube kwenye kicheza. anwani iliyopokelewa hapo juu:
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);
}
}Maswala Yanayojulikana
- Haitacheza video zilizo na vikwazo vya umri vinavyohitaji kuingia kwenye akaunti yako ya Google/YouTube
kwa mfano: ,
ushauri: ongeza video kama hizi kwenye orodha iliyoidhinishwa au muulize mwandishi wa video hiyo kuondoa kizuizi ambacho kiliwekwa kimakosa.
- Baadhi ya video za utangazaji ambazo huduma hurejesha urefu wa sifuri hazitacheza (kwa video kama hizo, muda katika orodha na ghala huwekwa alama kama “[dur undef]”)
kwa mfano: ,
ushauri: ongeza video kama hizo kwenye orodha isiyoruhusiwa.
- Video zinazopatikana kupitia viungo vya moja kwa moja pekee haziwezi kujumuishwa kwenye orodha ya kucheza ya ndani, hata kama utapakua video zote za mtumiaji.
kwa mfano:
Ukikutana na video ya umma ambayo haihitaji kuingia, inacheza kwenye kivinjari, lakini haichezi kwenye kichezaji, tuma ripoti ya hitilafu (inawezekana kabisa kwamba tatizo tayari limerekebishwa katika toleo jipya. NewPipeExtractor na utahitaji tu kusasisha kusanyiko na toleo hili, ).
Kiolesura kinaweza kupunguza kasi ikiwa Mtandao ni wa polepole (lakini haujazimwa)
Mwishowe
Mwanangu alihama kutoka kompyuta kibao hadi Samsung smart TV, ambayo haiwezi kuendesha programu za Android. Kwa hiyo, udhibiti bora wa wazazi bado ni wa kibinafsi.
Lakini programu iligeuka kuwa rahisi kutosha kwangu kuanza kuitumia mwenyewe. Hisia ya kwanza kutoka kwa matoleo ya awali ya kazi ilikuwa kwamba nilikuwa katika ulimwengu mwingine. Maudhui yote yanapakuliwa kutoka YouTube, lakini hii si YouTube tena, bali ni kitu kingine, salama na kinachodhibitiwa, kana kwamba umetoa kipenyo kwenye jicho lako na kuiweka kwenye chupa ya glasi. Na yote ni kuhusu mapendekezo.
Chanzo: mapenzi.com
