Giriş qısa: Android üçün lokal playlistlər, kanallar və tövsiyələrlə YouTube onlayn oyunçusu haqqında danışmaq istəyirəm.

Giriş ətraflı:
Bir müddət əvvəl mən yazıçı kimi mükəmməl tətbiqdə olduğu kimi eyni problemin qarşısına çıxdım. , və bu problemə gerçəkdən eyni münasibətim var: vaxt-və-vakti ilə uşağa planşet və ya smartfon verib cizgi filmləri göstərmək istəyirəm, amma 2-3 klikdən sonra standart YouTube müştərilərində uşağı hansı tövsiyələrə aparacağını heç cür qəbul etmirəm.
Təəssüf ki, Channel Whitelist tətbiqini quraşdırdıqdan sonra onun başqa bir daha prozaik, ancaq yenə də fatal bir çatışmazlığı aşkar olundu — NIH mənim (və, ən əsası, oğlumun) interfeysini, xüsusilə YouTube Kids oyuncusuna alışdıqdan sonra, çox rahat olmadı.
Ümumilikdə, bir müddət sonra öz icramı etmək üçün hazır oldum. Hələ bir müddət sonra ilk versiyaya etiket qoymaq mümkün oldu.
Əsas imkanlar:
- Sevimli kanallarınızı və playlistlərinizi əlavə edin — onlar saxlanacaq və lokal bazada indekslənəcək.
- Əlavə olunmuş playlistlərin içində, lazım olmayan videoları söndərə bilərsiniz.
- Tövsiyə siyahısı yalnız tətbiqə əlavə olunmuş kanallardan və playlistlərdən təsadüfi olaraq generasiya edilir.
Mənbə kodları açıqdır, lisenziya GPLv3:
Sonra əsas imkanların daha ətraflı icmalı, eləcə də, Andaroid tətbiqinizdə YouTube-dan video oynatmanın texniki detallarını təqdim edəcək.
Baş ekran və oyunçunun ekranında: təsadüfi tövsiyələr qeyri-təsadüfi kanallardan
Lokal bazada anlıq axtarış
=>
Yeni kanal və ya playlist əlavə et
İnternetdə adla axtarın və ya tanınmış adresi daxil edin. Kanalın və ya playlistin video siyahısı lokal bazaya saxlanılır, ikonlar keşlənmir.
Dinamik playlist — axtarış nəticələrini oynat
=>
Videonun altında olan tövsiyələr yalnız axtarış sorğusuna cavab verən videolar olacaq.
Eyni şəkildə, əgər playlistin parametrlərindən bir videonu açsanız, tövsiyə siyahısında yalnız həmin playlistdakı videolar olacaq.
Playlistlər və kanallar müvəqqəti olaraq söndürülebilir və yenidən aktivləşdirilə bilər.
Qeyd edin: söndürüldüyü playlistdən olan videolar axtarış nəticələrindən, baxış tarixçəsindən və sevimlilər siyahısından da silinəcək. Lakin narahat olmayın, playlist yenidən aktivləşdirildikdən dərhal sonra orada təkrar görünəcək.
Videonu qara siyahıya əlavə et
Bloklanmış video tövsiyələrdə, axtarış nəticələrində görünməyəcək, sevimlilər siyahısından silinəcək və baxış tarixçəsindən itəcək. Video hələ də playlist parametrlərində görünəcək.
Qara siyahını nəzərdən keçirin və səhvən bloklanan elementləri yenidən aktivləşdirin:
Parametrlər > başlıqda menyu > Qara siyahı
Sevimli videolar və izləmə tarixçəsi
Pleyerdəki sevimli videolar sağ yuxarı küncdə ulduzla işarələnir.
Ekranın üstündə kontekst menyuları və qalereyalarda, siyahılarda uzun basma ilə açıla bilər.
Videonun və ya pleylistin adını və ünvanını izləmə ekranında və ya hər hansı bir siyahıda kopyalayın.
Tez başlanğıc — tövsiyə olunan kanalları və pleylistləri əlavə edin
=>
Tətbiq dərhal yuxarıdakı ekran görüntülərində olduğu kimi görünəcək.
Lazımsız kanalları və pleylistləri parametrlərdə söndürə və ya silə bilərsiniz.
Quraşdırma
Layihə səhifəsi:
ingilis dilində:
buraxılışlar:
- Google Play-də yoxdur və yaxın zamanda olmayacaq (Google, API-dən qaçaraq saytlarını parçalayan tətbiqləri qadağan edir, o cümlədən adı çəkilən Channel Whitelist və pleyer NewPipe)
- Mənbələrdən toplayın:
- Buraxılışlar bölməsindən apk yükləyin:
- Ümid edirəm ki, bir müddət sonra kataloqda olacaq (, amma artıq demək olar ki, bir ay irəliləməyə səbəb olmur), amma hələ də yoxdur
Müxtəlif versiyalar arasında keçidin eyni cihazda mümkün olmayacağını nəzərə alın, çünki apk faylının imzaları fərqlidir; yeni mənbədən versiyanı quraşdırmadan əvvəl mövcud versiyanı silməli və məlumatları — pleylistlərin və izləmə tarixinin keşini — tamamilə silməlisiniz (ya da bu məlumatları necə ötürəcəyinizi fikirləşməlisiniz).
Texniki detallar
Google/YouTube hesabı tələb etmir, yalnız internet lazımdır; istifadə olunan kitabxanalar:
- YouTube xidmətindən məlumat əldə etmək üçün və
- videoları oynatmaq üçün.
Açıq mənbə kodu, GPLv3 pulsuz lisenziyası.
sual: İcazəsiz (ya da açıq qadağanla) müəlliflərin saytlardan parçalaması qanunidirmi? cavab: əlbəttə ki, qanunidir; açıq məlumatı oxumaq üçün hansı alətdən istifadə etmək sizin işinizdir. Daha da:
ABŞ məhkəməsi saytların paralanmasını tamamilə qanuniləşdirmiş və texniki olaraq buna mane olmağı qadağan etmişdir Bir az kod
— pleyer üçün köməkçi layihə
Kitabxana NewPipe Pleylist yükləmək üçün kod bir az mürəkkəbdir, ona görə burada onu verməyəcəyəm; maraqlananlar mənbələrə baxsın, əsasən bu,
ContentLoader .
Gəlin, videonun açıq səhifəsindən video axını üçün ünvanı necə əldə edəcəyimizi və bunu pleyerdə necə oynatacağımızı baxaq.
Kitabı əlavə et
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Maraqlıdır ki, bundan sonra hələ də istifadə edə bilməyəcəksiniz, çünki nümunələr itkən Downloader sinfi səbəbindən xətalar verəcək. Bu sinfi avtomatik testlər kataloqundan layihəyə köçürə bilərsiniz. — 0.17.4 versiyası üçün işləyir (görünür, kitabxananın daha yeni versiyasında bu hissə yenidən yazılıb, amma hələ də yoxlamaq lazımdır).
Youtube-da videonun səhifə ünvanı vasitəsilə video axını ünvanını alın:
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;
}Bir video ünvanı olaraq ytVidUrl, Youtube saytındakı istənilən videonun açıq səhifə ünvanı ola bilər, məsələn,
Pleyer Google-dan. Bu, Youtube-un üzərindəki veb qabıq deyil, istənilən videonu oynatmaq üçün tamamilə həqiqi inteqrasiya olunan pleyerdir, kifayət qədər çevik və konfiqurasiya edilə biləndir. Ayrıca, düzgün ünvan göstərildiyi təqdirdə Youtube-dan video axınlarını oynatmaq bacarığına malikdir. Təkcə axının ünvanını yeni əldə etdik, ona görə də onu pleyerə necə göndərəcəyimizi gözdən keçirək.
Layihəyə kitabxanını əlavə et :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Pleyer komponentinin tətbiq ekranında yerləşdirilməsi ilə bağlı bütün incəlikləri nəzərdən keçirməyəcəyik (layihə saytındakı nümunələrə və ya kodda baxa bilərsiniz), yalnız yuxarıda əldə olunan ünvan vasitəsilə Youtube-dan videonu pleyerdə necə oynatacağımıza baxacağıq:
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// cari halədə mövcud video dayandırılırsa
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);
// Köhnə videonu dayandırırıq, yeni video hazırlanarkən
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// Əgər burada dayandırırıqsa, pleyer özündə oynatmağı dayandırıbsa, bir daha STATE_ENDED hadisəsi alacağıq,
// buna görə xüsusi yoxlama lazımdır.
// Bu zaman getPlayWhenReady() dəyəri true qalacaq, ona görə də, məhz vəziyyəti yoxlayırıq.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// İzləməyi mənbə ilə hazırlayın.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// Videonu yüklədikdə cari mövqeyi dərhal verəcəyik
// (şərhlərdə bəzi datayla bağlı şeylər yazılır, yükləmə zamanı seek əmrlərini dəstəkləyir ya dəstəkləmir,
// görünür bu bir şeydir - sadəcə olaraq yükləndikdən sonra dərhal seek edirik)
// Exoplayer yeni Playlist'i əvvəlindən başlayır, təqdim olunan mövqedən deyil
// https://github.com/google/ExoPlayer/issues/4375
// Arzu olunan mövqedə streaming necə yüklənir? #2197
// https://github.com/google/ExoPlayer/issues/2197
// burada normal müddət hələ əlçatan deyil, ona görə də, yoxlamırıq
//if(seekTo > 0 && seekTo 0) {
// 5 saniyə əvvələ
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}Məşhur problemlər
- Yaş məhdudiyyəti olan videolar, Google/YouTube hesabına giriş tələb edir, oynanmayacaq
məsələn: ,
məsləhət: belə videoları qara siyahıya əlavə edin ya da müəllifdən səhvən qoyulmuş məhdudiyyətin aradan qaldırılmasını istəyin.
- Müəyyən videoların yayımları, xidmətin sıfır uzunluq qaytardığı üçün oynanmayacaq (bu cür videoların uzunluğu siyahılarda və qalereyada "[dur undef]" olaraq qeyd olunur)
məsələn: ,
məsləhət: belə videoları qara siyahıya əlavə edin.
- Yalnız birbaşa linklərlə əldə edilə bilən videolar, istifadəçinin bütün videolarını yüklədikdə yerli oynatma siyahısına düşə bilməz
məsələn:
Əgər bir video varsa, o, qeyri-şəxsi video olur, hesabınız tələb olunmur, lakin brauzerdə oynayır, lakin pleyerdə oynanmır, qarışıq rapor göndərin (bu, yeni versiyada problem həll olunubsa, onda yalnız o versiyanı yeniləmək lazım olacaq, NewPipeExtractor və yalnız o versiya ilə yenilənmək lazımdır, ).
İnterfeys yavaş (amma bağlı olmayan) internetdə zəif işləyə bilər.
Nəticədə
Oğlum planşetdən Android tətbiqlərini işlətməyən Samsung smart tv-yə keçdi. Buna görə də, ən yaxşı valideyn nəzarəti hələ də şəxsidir.
Amma tətbiq kifayət qədər rahatdır ki, özüm də istifadə etməyə başladım. Əvvəlki versiyalardan olan ilk təəssürat — başqa bir dünyaya keçmişəm. Bütün məzmun YouTube-dan yüklənir, amma bu artıq YouTube deyil, fərqli, təhlükəsiz və idarə olunan bir şeydir, sanki gözümün içinə qaraqabaq mənzərə qoyulub və onu şüşə bankaya yerləşdirmişəm. Burada işin mərkəzində məsləhətlər dayanır.
Mənbə: habr.com
