ProHoster > Блог > интернет новини > Смъртта на Кошчей в списъка с препоръки (възможно ли е да направите YouTube уютен и безопасен?)
Смъртта на Кошчей в списъка с препоръки (възможно ли е да направите YouTube уютен и безопасен?)
Въведението е кратко: искам да говоря за онлайн плейъра YouTube за Android с локални плейлисти, канали и препоръки.
Разширено въведение:
Преди време се сблъсках със същия проблем като автора на едно чудесно приложение Белият списък на каналите, и определих за себе си абсолютно същото отношение към нея: Искам да мога да давам на детето таблет или смартфон с анимационни филми от време на време, но никак не съм доволен от това, къде след 2-3 клика списък с препоръки води детето в стандартни приложения - клиенти на YouTube.
За съжаление, след инсталирането на приложението Whitelist на канали, то вече имаше друг по-прозаичен, но все пак фатален недостатък - NIH ми се стори (и най-важното на сина ми) интерфейсът му не много удобен, особено след навика да използвам YouTube Kids играч.
Като цяло след известно време узрях да направя собствена реализация. След известно време стана възможно да поставите етикет на първото издание.
Основни возможности:
Добавете любимите си канали и плейлисти - те ще бъдат запазени и индексирани в локалната база данни
В добавените плейлисти изключете ненужните видеоклипове, ако нямате нужда от тях
Списъкът с препоръки се генерира на случаен принцип само от каналите и плейлистите, добавени към приложението
Това, което следва, е по-подробен преглед на основните функции, плюс някои технически подробности за това как да възпроизвеждате видеоклипове в YouTube във вашето приложение за Android, без да използвате API на Google и уеб обвивки.
На главния екран и на екрана на плейъра: произволни препоръки от неслучайни канали
Незабавно търсене в локалната база данни
=>
Добавете нов канал или плейлист
Търсете по име онлайн или въведете известен адрес. Списъкът с видеоклипове на канал или плейлист се запазва в локалната база данни; иконите не се кешират.
Динамичен плейлист - възпроизвеждане на резултати от търсене
=>
В препоръките под видеоклипа ще има само видеоклипове, които отговарят на заявката за търсене.
По същия начин, ако отворите видеоклип от настройките на плейлиста, само видеоклипове от същия плейлист ще се показват в списъка с препоръки.
Плейлистите и каналите могат да бъдат временно изключени и включени отново
Моля, обърнете внимание: видеоклиповете от деактивирания плейлист също ще изчезнат от резултатите от търсенето, хронологията на сърфирането и от списъка с любими. Но не се притеснявайте, те ще се появят отново там веднага след като плейлистът бъде включен отново.
Видео в черния списък
Блокиран видеоклип няма да се показва в препоръките, в резултатите от търсенето, ще изчезне от списъка с любими и от историята на гледане. Видеоклипът ще продължи да се вижда в настройките на плейлиста.
Вижте черния списък и активирайте отново блокираните по погрешка елементи: Настройки > горно меню > Черен списък
Любими видеоклипове и история на гледане
Любимите видеоклипове на екрана на плейъра са маркирани със звездичка в горния десен ъгъл.
Контекстни менюта в заглавието на екрана и при дълго щракване в галерии и списъци
Копирайте името или адреса на видеоклип или плейлист в екрана за гледане или който и да е списък.
Бърз старт - добавете препоръчани канали и плейлисти
=>
Приложението веднага ще изглежда като екранните снимки по-горе.
Ненужните канали и плейлисти могат да бъдат изключени или изтрити в настройките.
Не е в Googleplay и няма да бъде в близко бъдеще (Google забранява приложения, които, заобикаляйки API, анализират техния сайт, включително гореспоменатия бял списък на канали или плейъра NewPipe)
Имайте предвид, че превключването между различни версии от различни източници на едно и също устройство няма да работи поради различни сигнатури на apk файла, преди да инсталирате версията от нов източник, първо трябва да изтриете инсталираната версия заедно с данните - кеш на плейлисти и история на сърфиране (или разберете как те прехвърлят данни).
Технически подробности
Не изисква акаунт в Google / YouTube, необходим е само интернет, използва библиотеки:
Въпрос: Като цяло законно ли е изтриването на сайтове без разрешение (или с изрична забрана) на авторите? Google премахва приложения от Google Play, които не използват своя API, но анализират сайтовете си, т.к. те нарушават своето потребителско споразумение. Отговор: Разбира се, правно, зависи от вас кой инструмент да използвате за четене на публична информация. Освен това: Американски съд напълно легализира скрейпинга на уебсайтове и забрани техническата намеса в него., но Гюл може да е на друго мнение, лично аз нямам желание да ходя в американски съд да ги убеждавам.
Някакъв код
Библиотека NewPipeExtractor - проект за помощник на играча NewPipe, ви позволява да изтеглите списък с видеоклипове за посочения канал или плейлист, да изтеглите подробна информация за известен видеоклип (какво се вижда на уеб страницата на видеоклипа), да получите адреса на иконата на видеото, както и да получите адреса на видео потока.
Кодът за зареждане на плейлиста е малко тромав, така че няма да го представя тук, за тези, които се интересуват - погледнете източника, това е основно клас ContentLoader.
Нека видим как да вземем адреса на видеопотока от адреса на публичната видео страница и да го възпроизведем в плейъра.
Любопитно е, че след това все още не може да се използва, т.к. примерите ще се оплакват от липсващия клас Downloader. Може да се копира в проекта от директорията за автоматични тестове NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - работи за версия 0.17.4 (изглежда, че тази част е преработена в по-нова версия на библиотеката, но все още трябва да се провери).
Вземете адреса на видео потока от адреса на видео страницата на уебсайта на YouTube:
Играчът ще екзоплейър от самия Google. Това не е уеб обвивка на YouTube, а истински вграден плейър за възпроизвеждане на всякакви видеоклипове, доста гъвкав и персонализиран. Включително знае как да възпроизвежда видео потоци от YouTube, ако посочите правилния адрес за него. Току-що получихме адреса на потока, така че нека видим как да го изпратим на плейъра.
Няма да разглеждаме всички нюанси на поставяне на компонента на плейъра на екрана на приложението (можете да го видите в примерите на уебсайта на проекта или в кода), ще разгледаме само как да започнете да възпроизвеждате видеоклипове от 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 и ще трябва само да актуализирате сборката с тази версия, например).
Интерфейсът може да се забави с бавен (но не изключен) интернет
В резултат на това
Синът ми премина от таблет към смарт телевизор Samsung, който не може да стартира Android приложения. Следователно най-добрият родителски контрол все още е личният.
Но приложението се оказа достатъчно удобно, за да започна да го използвам сам. Първото впечатление от ранните работни версии беше, че попаднах в друг свят. Цялото съдържание се изтегля от YouTube, но това вече не е YouTube, а нещо друго, безопасно и контролирано, сякаш сте извадили стоножка от окото си и я сложили в стъклен буркан. И всичко е въпрос на препоръки.