ProHoster > Blog > nutizie internet > A morte di Koshchei in a lista di cunsiglii (hè pussibule di fà YouTube accogliente è sicuru?)
A morte di Koshchei in a lista di cunsiglii (hè pussibule di fà YouTube accogliente è sicuru?)
L'intruduzioni hè corta: vogliu parlà di u lettore in linea di YouTube per Android cù playlists, canali è cunsiglii lucali.
Introduzione ampliata:
Qualchì tempu fà, aghju affruntatu esattamente u listessu prublema cum'è l'autore di una maravigliosa applicazione Lista bianca di u canali, è determinatu per mè stessu esattamente a listessa attitudine versu ella: vogliu pudè dà à u zitellu una tavuletta o un smartphone cù cartoni di u tempu à u tempu, ma ùn sò micca cuntentu di induve, dopu à 2-3 clics, u lista di ricumandazioni porta u zitellu in applicazioni standard - i clienti YouTube.
Sfortunatamente, dopu avè installatu l'applicazione Channel Whitelist, hà digià avutu un altru difettu più prosaicu, ma ancu fatale - NIH mi pareva (è, più impurtante, à u mo figliolu) a so interfaccia ùn hè micca assai còmuda, soprattuttu dopu l'abitudine di utilizà YouTube Kids. ghjucadore.
In generale, dopu qualchì tempu aghju maturatu per fà a mo propria implementazione. Dopu qualchì tempu, hè diventatu pussibule di mette una tag in a prima liberazione.
Funzioni chjave:
Aghjunghjite i vostri canali è playlists preferiti - seranu salvati è indexati in a basa di dati lucale
Disattiva i video extra in i playlists aghjuntu se ùn ne avete micca bisognu
A lista di cunsiglii hè generata aleatoriamente solu da i canali è i playlists aghjuntu à l'applicazione
Ciò chì seguita hè una panoramica di e funzioni principali in più detail, più alcuni dettagli tecnichi nantu à cumu ghjucà i video di YouTube in a vostra app Android senza utilizà l'API di Google è i wrappers web.
Nantu à u screnu principale è in u screnu di u lettore: cunsiglii aleatorii da i canali non aleatorii
Ricerca immediata in a basa di dati lucale
=>
Aghjunghjite un novu canale o playlist
Cerca per nome in linea o inserisci un indirizzu cunnisciutu. A lista di video di un canale o playlist hè salvatu in una basa di dati lucale, l'icone ùn sò micca cache.
Playlist dinamica - ghjucà i risultati di ricerca
=>
In i cunsiglii sottu u video, ci saranu solu video chì satisfacenu a ricerca di ricerca.
In listessu modu, se apre un video da i paràmetri di a playlist, solu i video da a listessa playlist appariscenu in a lista di cunsiglii.
Playlists è canali ponu esse temporaneamente disattivati è riattivati
Per piacè nutate: i video da a playlist disattivata spariranu ancu da i risultati di ricerca, a storia di navigazione è da a lista di preferiti. Ma ùn vi preoccupate micca, apparisceranu di novu immediatamente dopu chì a playlist hè stata riattivata.
Video di lista negra
Un video bluccatu ùn apparirà micca in i cunsiglii, in i risultati di ricerca, sparirà da a lista di preferiti è da a storia di visualizazione. U video serà sempre visibile in i paràmetri di a playlist.
Vede a lista negra è riattivate l'articuli bluccati per errore: Settings> menù header> Blacklist
Video preferiti è storia di visualizazione
I video preferiti nantu à a pantalla di u lettore sò marcati cù un asteriscu in l'angulu superiore dirittu.
Menu di cuntestu in u titulu di a pantalla è cliccà longu in galerie è liste
Copia u nome o l'indirizzu di un video o playlist in a pantalla di vigilia o qualsiasi lista.
Inizio rapidu - aghjunghje canali è playlists cunsigliatu
=>
L'applicazione sarà immediatamente cum'è i screenshots sopra.
I canali è playlists inutili ponu esse disattivati o sguassati in i paràmetri.
Ùn hè micca in Googleplay è ùn serà micca in un futuru vicinu (Google pruibisce l'applicazioni chì, sguassendu l'API, analizanu u so situ, cumpresu a lista bianca di u Canale sopra citata o u lettore NewPipe)
Tenite in mente chì cambià trà e diverse versioni da diverse fonti nantu à u stessu dispositivu ùn funziona micca per via di e diverse firme di u schedariu apk, prima di stallà a versione da una nova fonte, prima vi tuccherà à sguassà a versione installata cù i dati - cache di playlist è storia di navigazione (o scopre cumu si trasferisce questi dati).
Dettagli tecnichi
Ùn richiede micca un contu Google / YouTube, solu Internet hè necessariu, usa biblioteche:
affairs NewPipeExtractor - prughjettu di l'aiutu di u ghjucatore NewPipe, permette di scaricà una lista di video per u canali o playlist specificati, scaricate infurmazioni detallate nantu à un video famosu (ciò chì hè visibile nantu à a pagina web di u video), uttene l'indirizzu di l'icona di u video, è ancu uttene l'indirizzu di u video. u flussu di video.
U codice per a carica di a playlist hè un pocu ingombrante, per quessa ùn l'aghju micca purtatu quì, per quelli chì anu interessatu - fighjate à a fonte, hè basicamente una classa. ContentLoader.
Videmu cumu uttene l'indirizzu di u flussu di video da l'indirizzu di a pagina di video publicu è ghjucà in u lettore.
Hè curiosu chì dopu ùn pò ancu esse usatu, perchè. l'esempii si lagnaranu di a classa di Downloader mancante. Pò esse copiatu à u prugettu da u repertoriu di teste automatiche NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - travaglia per a versione 0.17.4 (pare chì sta parte hè stata rifatta in una versione più nova di a biblioteca, ma deve esse verificatu).
Ottene l'indirizzu di u flussu di video da l'indirizzu di a pagina di video nantu à u situ di YouTube:
U ghjucatore farà exoplayer da Google stessu. Questu ùn hè micca un wrapper web nantu à YouTube, ma un veru lettore incrustable per ghjucà qualsiasi video, abbastanza flessibile è persunalizabile. Includendu sapi cumu ghjucà i flussi video da YouTube, se specificate l'indirizzu currettu per questu. Avemu appena ricevutu l'indirizzu di u flussu, dunque vedemu cumu mandà à u lettore.
Ùn cunsideremu micca tutte e sfumature di mette u cumpunente di u lettore nantu à a pantalla di l'applicazione (pudete vede in l'esempii nantu à u situ web di u prugettu o in u codice), avemu da vede solu cumu cumincià à ghjucà video da YouTube in u lettore à l'indirizzu ottenutu sopra:
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);
}
}
Issues Cunnisciute
Ùn riproduce micca video cù restrizioni d'età chì necessitanu un login di u contu Google/YouTube
Cunsigliu: aghjunghje tali video à a lista negra o dumandate à l'autore di u video per sguassà a restrizione stabilita per sbagliu.
Certi video broadcast per i quali u serviziu torna a lunghezza zero ùn saranu micca ghjucati (per tali video, a durata in i listi è a galeria hè marcata cum'è "[dur undef]").
I video chì sò dispunibuli solu attraversu ligami diretti ùn ponu micca esse inclusi in a playlist locale, ancu s'è scaricate tutti i video di l'utilizatori.
Sè avete un video publicu chì ùn hà micca bisognu di login, ghjoca in u navigatore, ma ùn ghjoca micca in u lettore, mandate un rapportu di bug (hè abbastanza pussibule, u prublema hè digià risoltu in a nova versione). NewPipeExtractor è avete solu bisognu di aghjurnà l'assemblea cù sta versione, per esempiu).
L'interfaccia pò rallentà cù un Internet lento (ma micca disattivatu).
Par via di cunsiquenza,
U figliolu si trasfirìu da una tableta à una smart TV Samsung, chì ùn pò micca eseguisce l'applicazioni Android. Dunque, u megliu cuntrollu parentale hè sempre persunale.
Ma l'applicazione hè stata abbastanza cunvene per mè per cumincià à aduprà da mè stessu. A prima impressione da e prime versioni di travagliu era chì aghju in un altru mondu. Tuttu u cuntenutu hè telecaricatu da YouTube, ma questu ùn hè più YouTube, ma qualcosa d'altru, sicuru è cuntrullatu, cum'è s'ellu avete pigliatu un centipede da u vostru ochju è u mette in un vasu di vetru. È tuttu hè nantu à i cunsiglii.