Giriş qısadır: Android üçün yerli çalğı siyahıları, kanalları və tövsiyələri olan YouTube onlayn pleyerindən danışmaq istəyirəm.

Genişləndirilmiş giriş:
Bir müddət əvvəl gözəl bir tətbiqin müəllifi ilə eyni problemlə qarşılaşdım , və özüm üçün eyni münasibəti təyin etdim: övladıma vaxtaşırı cizgi filmləri olan planşet və ya smartfon hədiyyə etmək istəyirəm, amma 2-3 klikdən sonra siyahının harada olması məni heç də qane etmir. standart tətbiqlərdə tövsiyələrin - YouTube müştəriləri - uşağı götürür.
Təəssüf ki, Channel Whitelist tətbiqini quraşdırdıqdan sonra daha bir prozaik, lakin hələ də ölümcül qüsur aşkar edildi - NIH I (və ən əsası oğlum) interfeysini, xüsusən də YouTube Kids pleyerindən istifadə etmək vərdişindən sonra o qədər də əlverişli olmadığını tapdı.
Ümumiyyətlə, bir müddət sonra mən öz tətbiqimi etməyə hazır idim. Bir müddət sonra ilk buraxılışa etiket qoymaq mümkün oldu.
Əsas xüsusiyyətlər:
- Sevimli kanallarınızı və çalğı siyahılarınızı əlavə edin - onlar yerli verilənlər bazasında saxlanacaq və indeksləşdiriləcək
- Əlavə edilmiş pleylistlərdə, ehtiyacınız yoxdursa, lazımsız videoları söndürün
- Tövsiyələrin siyahısı yalnız proqrama əlavə edilmiş kanallar və çalğı siyahılarından təsadüfi olaraq yaradılır
Açıq mənbə, GPLv3 lisenziyası:
Aşağıda daha ətraflı əsas funksiyaların icmalı, üstəgəl Google API və veb paketlərindən istifadə etmədən Android tətbiqinizdə YouTube videolarını necə oynatmaq barədə bəzi texniki təfərrüatlar verilmişdir.
Əsas ekranda və oyunçu ekranında: təsadüfi olmayan kanallardan təsadüfi tövsiyələr
Yerli verilənlər bazasında ani axtarış
=>
Yeni kanal və ya pleylist əlavə edin
Onlayn adla axtarın və ya məlum ünvanı daxil edin. Kanalın və ya pleylistin videolarının siyahısı yerli verilənlər bazasında saxlanılır.
Dinamik pleylist - axtarış nəticələrini oynayır
=>
Video tövsiyələrində yalnız axtarış sorğusunu təmin edən videolar olacaq.
Eynilə, pleylist parametrlərindən video açsanız, tövsiyələr siyahısında yalnız eyni pleylistdən olan videolar görünəcək.
Pleylistlər və kanallar müvəqqəti olaraq söndürülə və yenidən yandırıla bilər
Nəzərə alın: əlil pleylistdəki videolar da axtarış nəticələrindən, baxış tarixçəsindən və sevimlilər siyahısından silinəcək. Ancaq narahat olmayın, onlar pleylist yenidən işə salındıqdan dərhal sonra orada yenidən görünəcəklər.
Qara siyahıya video əlavə edin
Bloklanmış video tövsiyələrdə, axtarış nəticələrində göstərilməyəcək və sevimlilər siyahısından və baxış tarixçəsindən silinəcək. Video hələ də pleylist parametrlərində görünəcək.
Qara siyahıya baxın və səhvən bloklanmış elementləri yenidən aktivləşdirin:
Parametrlər > başlıq menyusu > Qara siyahı
Sevimli videolar və baxış tarixçəsi
Pleyer ekranındakı sevimli videolar yuxarı sağ küncdə ulduz işarəsi ilə qeyd olunur.
Ekran başlığında kontekst menyuları və qalereyalarda və siyahılarda uzun klikləyin
Baxış ekranında və ya hər hansı siyahıda video və ya pleylistin adını və ya ünvanını 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əri kimi görünəcək.
Lazımsız kanallar və çalğı siyahıları parametrlərdə söndürülə və ya silinə bilər.
Quraşdırma
Layihə səhifəsi:
ingiliscə:
buraxılışlar:
- Bu, Google Play-də deyil və yaxın gələcəkdə olmayacaq (Google API-dən yan keçən və veb-saytlarını təhlil edən proqramları, o cümlədən qeyd olunan Kanal Ağ Siyahısı və ya NewPipe pleyerini qadağan edir)
- Mənbələrdən qurun:
- Relizlər bölməsindən apk yükləyin:
- Ümid edirəm ki, bir müddət sonra kataloqda görünəcək (, lakin demək olar ki, bir aydır ki, daha da irəli getməyib), lakin hələ də deyil
Yadda saxlayın ki, eyni cihazda müxtəlif mənbələrdən fərqli versiyalar arasında keçid apk faylının fərqli imzalarına görə işləməyəcək, versiyanı yeni mənbədən quraşdırmadan əvvəl ilk növbədə quraşdırılmış versiyanı məlumatlarla birlikdə silməlisiniz; pleylist önbelleği və baxış tarixçəsi (və ya məlumatların necə ötürüləcəyini anlayın).
Texniki detallar
Google/YouTube hesabı tələb etmir, yalnız İnternetə ehtiyacınız var, aşağıdakı kitabxanalardan istifadə edir:
- YouTube xidmətindən məlumat almaq və
- video oynamaq üçün.
Açıq mənbə, pulsuz GPLv3 lisenziyası.
Sual: Müəlliflərin icazəsi olmadan (və ya açıq qadağa ilə) veb saytları qırmaq ümumiyyətlə qanunidirmi? API istifadə etməyən, lakin saytlarını təhlil edən, çünki istifadəçi müqavilələrini pozurlar.
cavab: təbii ki, qanunidir, açıq məlumatı oxumaq üçün hansı alətdən istifadə etmək sizə bağlıdır. Bundan əlavə: , amma Gülün şəxsən fərqli fikri ola bilər, mənim onları razı salmaq üçün hələlik Amerika məhkəməsinə müraciət etmək istəyim yoxdur.
Bəzi kod
kitabxana - oyunçu dəstəyi layihəsi , müəyyən bir kanal və ya pleylist üçün videoların siyahısını endirməyə, məşhur video haqqında ətraflı məlumatı (videonun veb səhifəsində görünənləri) endirməyə, video işarəsinin ünvanını əldə etməyə, həmçinin videonun ünvanını əldə etməyə imkan verir. axın.
Çalğı siyahısını yükləmək üçün kod bir az çətindi, ona görə də burada verməyəcəyəm, maraqlananlar üçün mənbə koduna nəzər salın, bu, əsasən bir sinifdir .
Gəlin ümumi video səhifəsinin ünvanından video axınının ünvanını necə əldə edəcəyimizi və onu pleyerdə oynatmağı görək.
Kitabxananı birləşdirin
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 itkin Downloader sinfindən şikayət edəcək. O, avtomatlaşdırılmış testlər kataloqundan layihəyə kopyalana bilər - 0.17.4 versiyası üçün işləyir (görünür, bu hissə kitabxananın daha yeni versiyasında yenidən işlənib, lakin hələ də yoxlamaq lazımdır).
YouTube saytındakı video səhifəsinin ünvanı ilə video axınının ünvanını əldə edin:
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;
}ytVidUrl video ünvanı YouTube saytında hər hansı bir videonun səhifəsinin ümumi ünvanı ola bilər, məsələn
Oyunçu olacaq Google-un özündən. Bu, YouTube üzərindən veb paketi deyil, hər hansı bir videonu oynamaq üçün olduqca çevik və fərdiləşdirilə bilən real quraşdırılmış oyunçudur. Düzgün ünvan təqdim etsəniz, o, həmçinin YouTube-dan video axınlarını oynata bilər. Biz indicə axın ünvanını aldıq, gəlin onu oyunçuya necə göndərəcəyimizi görək.
Kitabxananı layihəyə qoşun :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Oyunçu komponentinin tətbiq ekranında yerləşdirilməsinin bütün nüanslarını nəzərdən keçirməyəcəyik (layihənin veb saytında və ya kodda nümunələrə baxa bilərsiniz), biz yalnız pleyerdə YouTube-dan video oynatmağa necə başlayacağımıza baxacağıq. yuxarıda alınan ünvan:
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);
}
}Məlum məsələlər
- Google/YouTube hesabınıza giriş tələb edən yaş məhdudiyyətləri olan videoları oynatmayacaq
məsələn: ,
məsləhət: belə videoları qara siyahıya əlavə edin və ya videonun müəllifindən səhvən qoyulmuş məhdudiyyəti aradan qaldırmağı xahiş edin.
- Xidmətin sıfır uzunluğu qaytardığı bəzi yayım videoları oynatılmayacaq (belə videolar üçün siyahılar və qalereyadakı müddət “[dur undef]” kimi qeyd olunur)
məsələn: ,
məsləhət: belə videoları qara siyahıya əlavə edin.
- Yalnız birbaşa keçidlər vasitəsilə əldə edilə bilən videolar, istifadəçinin bütün videolarını endirsəniz belə, yerli pleylistə daxil edilə bilməz.
məsələn:
Giriş tələb etməyən, brauzerdə oynayan, lakin pleyerdə oynatılmayan ictimai videoya rast gəlsəniz, səhv hesabatı göndərin (tam mümkündür ki, problem yeni versiyada artıq həll olunub. NewPipeExtractor və yalnız bu versiya ilə montajı yeniləməlisiniz, ).
İnternet yavaşdırsa (lakin söndürülməyib) interfeys yavaşlaya bilər.
Nəticədə,
Oğlum planşetdən Android proqramlarını işlədə bilməyən Samsung smart televizoruna keçdi. Buna görə də, ən yaxşı valideyn nəzarəti hələ də şəxsidir.
Ancaq tətbiq mənim özüm istifadə etməyə başlamaq üçün kifayət qədər rahat oldu. İlk iş versiyalarından ilk təəssürat başqa bir dünyada olduğum idi. Bütün məzmun YouTube-dan endirilir, lakin bu, artıq YouTube deyil, başqa bir şeydir, təhlükəsiz və idarə olunan bir şeydir, sanki gözündən qırxayaq çıxarıb şüşə qaba qoyursan. Və hər şey tövsiyələrə aiddir.
Mənbə: www.habr.com
