Кіріспе қысқаша: жергілікті ойнату тізімдері, арналары және ұсыныстары бар Android үшін YouTube онлайн ойнатқышы туралы айтқым келеді.

Кеңейтілген кіріспе:
Біраз уақыт бұрын мен керемет қосымшаның авторы сияқты проблемаға тап болдым , және өзім үшін дәл осындай көзқарасты анықтадым: мен балама мультфильмдері бар планшетті немесе смартфонды мезгіл-мезгіл сыйлағым келеді, бірақ 2-3 рет басқаннан кейін тізімнің қай жерде болатынына мүлдем риза емеспін. стандартты қолданбалардағы ұсыныстардың - YouTube клиенттері - баланы қабылдайды.
Өкінішке орай, Channel Whitelist қолданбасын орнатқаннан кейін тағы бір прозалық, бірақ әлі де өлімге әкелетін кемшілік анықталды - NIH I (және, ең бастысы, менің ұлым) оның интерфейсін өте ыңғайлы емес деп тапты, әсіресе YouTube Kids ойнатқышын пайдалану әдетінен кейін.
Жалпы, біраз уақыттан кейін мен өзімді жүзеге асыруға дайын болдым. Біраз уақыттан кейін бірінші шығарылымға тег қою мүмкін болды.
Негізгі ерекшеліктері:
- Таңдаулы арналар мен ойнату тізімдерін қосыңыз - олар жергілікті дерекқорда сақталады және индекстеледі
- Қосылған ойнату тізімдерінде қажет болмаса, қажет емес бейнелерді өшіріңіз
- Ұсыныстар тізімі қолданбаға қосылған арналар мен ойнату тізімдерінен ғана кездейсоқ түрде жасалады
Ашық бастапқы код, GPLv3 лицензиясы:
Төменде толығырақ негізгі мүмкіндіктерге шолу, сонымен қатар Android қолданбасында YouTube бейнелерін Google API және веб орауыштарын пайдаланбай ойнату жолының кейбір техникалық мәліметтері берілген.
Негізгі экранда және ойнатқыш экранында: кездейсоқ емес арналардан кездейсоқ ұсыныстар
Жергілікті дерекқорда жылдам іздеу
=>
Жаңа арна немесе ойнату тізімін қосыңыз
Желіде аты бойынша іздеңіз немесе белгілі мекенжайды енгізіңіз. Арнаның немесе ойнату тізімінің бейнелерінің тізімі жергілікті дерекқорға сақталады, белгішелер кэштелмейді.
Динамикалық ойнату тізімі - іздеу нәтижелерін ойнату
=>
Бейне ұсыныстарында іздеу сұрауын қанағаттандыратын бейнелер ғана болады.
Сол сияқты, ойнату тізімінің параметрлерінен бейнені ашсаңыз, ұсыныстар тізімінде тек бір ойнату тізіміндегі бейнелер ғана пайда болады.
Ойнату тізімдері мен арналарды уақытша өшіріп, қайта қосуға болады
Назар аударыңыз: өшірілген ойнату тізіміндегі бейнелер де іздеу нәтижелерінен, көру тарихынан және таңдаулылар тізімінен жоғалады. Бірақ алаңдамаңыз, олар ойнату тізімі қайта қосылғаннан кейін бірден пайда болады.
Бейнені қара тізімге қосыңыз
Блокталған бейне ұсыныстарда, іздеу нәтижелерінде көрсетілмейді және таңдаулылар тізімінен және көру тарихынан жоғалады. Бейне ойнату тізімінің параметрлерінде әлі де көрінетін болады.
Қара тізімді қараңыз және қате бұғатталған элементтерді қайта қосыңыз:
Параметрлер > тақырып мәзірі > Қара тізім
Таңдаулы бейнелер және көру тарихы
Ойнатқыш экранындағы таңдаулы бейнелер жоғарғы оң жақ бұрышта жұлдызшамен белгіленген.
Экран тақырыбындағы мәтінмәндік мәзірлер және галереялар мен тізімдерді ұзақ басыңыз
Көру экранында немесе кез келген тізімде бейненің немесе ойнату тізімінің атын немесе мекенжайын көшіріңіз.
Жылдам бастау - ұсынылған арналар мен ойнату тізімдерін қосыңыз
=>
Қолданба бірден жоғарыдағы скриншоттарға ұқсайды.
Қажет емес арналар мен ойнату тізімдерін параметрлерде өшіруге немесе жоюға болады.
параметр
Жоба беті:
ағылшын тілінде:
шығарылымдары:
- Ол Google Play-де жоқ және жақын арада болмайды (Google API-ны айналып өтетін және олардың веб-сайттарын талдайтын қолданбаларға, соның ішінде аталған арналардың ақ тізімі немесе NewPipe ойнатқышы) тыйым салады)
- Дереккөздерден құрастыру:
- Шығарылымдар бөлімінен apk жүктеп алыңыз:
- Біраз уақыттан кейін каталогта пайда болады деп үміттенемін (, бірақ бір айға жуық уақыт бойы одан әрі қозғалмады), бірақ әлі емес
Бір құрылғыдағы әртүрлі көздерден алынған әртүрлі нұсқалар арасында ауысу apk файлының әртүрлі қолтаңбаларына байланысты жұмыс істемейтінін есте сақтаңыз; жаңа көзден нұсқаны орнатпас бұрын, алдымен орнатылған нұсқаны деректермен бірге жоюыңыз керек - ойнату тізімінің кэші және шолу журналы (немесе деректерді беру жолын анықтаңыз).
Техникалық мәліметтер
Google/YouTube тіркелгісін қажет етпейді, сізге тек Интернет қажет, келесі кітапханаларды пайдаланады:
- YouTube қызметінен деректерді алу үшін және
- бейнені ойнату үшін.
Ашық бастапқы коды, тегін GPLv3 лицензиясы.
сұрақ: Веб-сайттарды авторлардың рұқсатынсыз (немесе нақты тыйымсыз) қырып тастау заңды ма? , олар API қолданбайды, бірақ олардың сайттарын талдайды, өйткені олар пайдаланушы келісімін бұзады.
жауап: әрине, бұл заңды, жалпыға қолжетімді ақпаратты оқу үшін қандай құралды пайдалану сізге байланысты. Бұдан басқа: , бірақ Гүлдің пікірі басқа болуы мүмкін; жеке менің оларды көндіру үшін американдық сотқа баруға әлі ниетім жоқ.
Кейбір код
Кітапхана - ойыншыны қолдау жобасы , көрсетілген арна немесе ойнату тізімі үшін бейнелер тізімін жүктеп алуға, әйгілі бейне туралы толық ақпаратты жүктеп алуға (бейненің веб-бетінде не көрінеді), бейне белгішесінің мекенжайын алуға, сондай-ақ бейненің мекенжайын алуға мүмкіндік береді. ағын.
Ойнату тізімін жүктеу коды сәл қиын, сондықтан мен оны мұнда бермеймін, қызығушылық танытқандар үшін бастапқы кодты қараңыз, бұл негізінен сынып .
Жалпыға ортақ бейне бетінің мекенжайынан бейне ағынының мекенжайын қалай алуға болатынын және оны ойнатқышта ойнатуды көрейік.
Кітапхананы келесіге қосыңыз
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Осыдан кейін сіз оны әлі де пайдалана алмайтыныңыз қызық, өйткені... мысалдар жоқ Downloader сыныбына шағымданады. Оны жобаға автоматтандырылған сынақтар каталогынан көшіруге болады - 0.17.4 нұсқасы үшін жұмыс істейді (бұл бөлік кітапхананың жаңарақ нұсқасында қайта жасалған сияқты, бірақ біз әлі де тексеруіміз керек).
Бейне ағынының мекенжайын 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;
}ytVidUrl бейне мекенжайы YouTube веб-сайтындағы кез келген бейне бетінің жалпыға ортақ мекенжайы болуы мүмкін, мысалы
Ойыншы болады Google-дың өзінен. Бұл YouTube сайтындағы веб-орам емес, бірақ кез келген бейнелерді ойнатуға арналған, өте икемді және теңшеуге болатын нақты енгізілген ойнатқыш. Сондай-ақ, дұрыс мекенжайды көрсетсеңіз, ол YouTube-тен бейне ағындарын ойната алады. Біз ағындық мекенжайды жаңа ғана алдық, сондықтан оны ойнатқышқа қалай жіберуге болатынын көрейік.
Кітапхананы жобаға қосыңыз :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Біз ойнатқыш компонентін қолданба экранында орналастырудың барлық нюанстарын қарастырмаймыз (мысалдарды жоба веб-сайтында немесе кодта қарауға болады), біз тек ойнатқышта YouTube-тен бейнені ойнатуды қалай бастау керектігін қарастырамыз. жоғарыда алынған мекенжай:
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);
}
}Белгілі мәселелер
- Google/YouTube есептік жазбаңызға кіруді талап ететін жас шектеулері бар бейнелерді ойнатпайды
мысалы: ,
кеңес: мұндай бейнелерді қара тізімге қосыңыз немесе бейне авторынан қате орнатылған шектеуді алып тастауды сұраңыз.
- Қызмет нөлдік ұзындықты қайтаратын кейбір таратылатын бейнелер ойнатылмайды (мұндай бейнелер үшін тізімдер мен галереядағы ұзақтық «[dur undef]» ретінде белгіленген)
мысалы: ,
кеңес: мұндай бейнелерді қара тізімге қосыңыз.
- Тікелей сілтемелер арқылы ғана қолжетімді бейнелер, тіпті пайдаланушының барлық бейнелерін жүктеп алсаңыз да, жергілікті ойнату тізіміне қосылмауы мүмкін.
мысалы:
Егер сіз логинді қажет етпейтін, шолғышта ойнатылатын, бірақ ойнатқышта ойнатпайтын жалпыға ортақ бейнені кездестірсеңіз, қате туралы есеп жіберіңіз (жаңа нұсқада мәселе шешілген болуы әбден мүмкін. NewPipeExtractor және сіз тек осы нұсқамен жинақты жаңартуыңыз керек, ).
Интернет баяу болса (бірақ өшірілмесе) интерфейс баяулауы мүмкін.
Нәтижесінде,
Менің ұлым планшеттен Android қолданбаларын іске қоса алмайтын Samsung смарт теледидарына көшті. Сондықтан, ең жақсы ата-ана бақылауы әлі де жеке.
Бірақ қолданба мен оны өзім қолдана бастауға ыңғайлы болды. Алғашқы жұмыс нұсқаларынан алған әсерім басқа әлемде болдым. Барлық мазмұн YouTube-тен жүктеледі, бірақ бұл енді YouTube емес, басқа нәрсе, қауіпсіз және басқарылатын нәрсе, сіз қырықаяқты көзіңізден алып, оны шыны ыдысқа салғандай. Және бәрі ұсыныстарға қатысты.
Ақпарат көзі: www.habr.com
