ProHoster > Bloc > notícies d'internet > La mort de Koshchei a la llista de recomanacions (és possible que YouTube sigui acollidor i segur?)
La mort de Koshchei a la llista de recomanacions (és possible que YouTube sigui acollidor i segur?)
La introducció és breu: vull parlar del reproductor en línia de YouTube per a Android amb llistes de reproducció locals, canals i recomanacions.
Introducció ampliada:
Fa un temps em vaig enfrontar exactament al mateix problema que l'autor d'una meravellosa aplicació Llista blanca del canal, i vaig decidir per mi mateix exactament la mateixa actitud cap a ella: vull poder regalar al nen una tauleta o un telèfon intel·ligent amb dibuixos animats de tant en tant, però no estic gens satisfet amb on, després de 2-3 clics, el llista de recomanacions porta el nen en aplicacions estàndard: clients de YouTube.
Malauradament, després d'instal·lar l'aplicació Channel Whitelist, ja tenia un altre defecte més prosaic, però encara fatal: NIH em va semblar (i, el més important, al meu fill), la seva interfície no era gaire convenient, sobretot després de l'hàbit d'utilitzar YouTube Kids. jugador.
En general, després d'un temps vaig madurar per fer la meva pròpia implementació. Després d'un temps, va ser possible posar una etiqueta a la primera versió.
Característiques clau:
Afegeix els teus canals i llistes de reproducció preferides: es desaran i s'indexaran a la base de dades local
Desactiveu els vídeos addicionals a les llistes de reproducció afegides si no els necessiteu
La llista de recomanacions es genera aleatòriament només a partir dels canals i llistes de reproducció afegits a l'aplicació
El que segueix és una visió general de les funcions principals amb més detall, a més d'alguns detalls tècnics sobre com reproduir vídeos de YouTube a la vostra aplicació per a Android sense utilitzar les API de Google i els embolcalls web.
A la pantalla principal i a la pantalla del reproductor: recomanacions aleatòries de canals no aleatoris
Cerca instantània a la base de dades local
=>
Afegeix un nou canal o llista de reproducció
Cerqueu per nom en línia o inseriu una adreça coneguda. La llista de vídeos d'un canal o llista de reproducció es desa a una base de dades local, les icones no s'emmagatzemen a la memòria cau.
Llista de reproducció dinàmica: reprodueix els resultats de la cerca
=>
A les recomanacions del vídeo, només hi haurà vídeos que compleixin la consulta de cerca.
De la mateixa manera, si obriu un vídeo des de la configuració de la llista de reproducció, només apareixeran a la llista de recomanacions els vídeos de la mateixa llista de reproducció.
Les llistes de reproducció i els canals es poden desactivar i tornar a activar temporalment
Tingueu en compte: els vídeos de la llista de reproducció desactivada també desapareixeran dels resultats de la cerca, de l'historial de navegació i de la llista de preferits. Però no us preocupeu, apareixeran allà de nou immediatament després que la llista de reproducció torni a activar-se.
Vídeo de llista negra
Un vídeo bloquejat no apareixerà a les recomanacions, als resultats de la cerca, desapareixerà de la llista de favorits i de l'historial de visualitzacions. El vídeo encara serà visible a la configuració de la llista de reproducció.
Consulta la llista negra i torna a activar els elements bloquejats per error: Configuració > menú de capçalera > Llista negra
Vídeos preferits i historial de visualitzacions
Els vídeos preferits a la pantalla del reproductor estan marcats amb un asterisc a la cantonada superior dreta.
Menús contextuals al títol de la pantalla i fent clic llarg a les galeries i llistes
Copia el nom o l'adreça d'un vídeo o llista de reproducció a la pantalla de visualització o a qualsevol llista.
Inici ràpid: afegeix canals i llistes de reproducció recomanades
=>
L'aplicació semblarà immediatament a les captures de pantalla anteriors.
Els canals i les llistes de reproducció innecessàries es poden desactivar o suprimir a la configuració.
No a Googleplay i no ho serà en un futur proper (Google prohibeix les aplicacions que, sense passar per alt l'API, analitzen el seu lloc, inclosa la llista blanca de canals esmentada o el reproductor NewPipe)
Tingueu en compte que canviar entre diferents versions de diferents fonts al mateix dispositiu no funcionarà a causa de les diferents signatures del fitxer apk, abans d'instal·lar la versió des d'una font nova, primer haureu d'eliminar la versió instal·lada juntament amb les dades - memòria cau de llistes de reproducció i historial de navegació (o esbrineu com transfereixen les dades).
Detalls tècnics
No requereix un compte de Google/Youtube, només es necessita Internet, utilitza biblioteques:
Biblioteca NewPipeExtractor - Projecte d'ajuda al jugador Newpipe, us permet descarregar una llista de vídeos per al canal o llista de reproducció especificada, descarregar informació detallada sobre un vídeo famós (el que és visible a la pàgina web del vídeo), obtenir l'adreça de la icona del vídeo i també obtenir l'adreça de el flux de vídeo.
El codi per carregar la llista de reproducció és una mica complicat, així que no el portaré aquí, per a aquells que estiguin interessats: mireu la font, bàsicament és una classe ContentLoader.
Vegem com obtenir l'adreça del flux de vídeo des de l'adreça de la pàgina de vídeo pública i reproduir-la al reproductor.
És curiós que després encara no es pugui utilitzar, perquè. els exemples es queixaran de la falta de classe Downloader. Es pot copiar al projecte des del directori de proves automàtiques NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funciona per a la versió 0.17.4 (sembla que aquesta part s'ha tornat a fer en una versió més nova de la biblioteca, però encara s'ha de comprovar).
Obteniu l'adreça del flux de vídeo a l'adreça de la pàgina de vídeo al lloc web de YouTube:
El jugador ho farà ExoPlayer del mateix Google. Aquest no és un embolcall web a YouTube, sinó un veritable reproductor incrustable per reproduir qualsevol vídeo, bastant flexible i personalitzable. Inclou sap com reproduir fluxos de vídeo de YouTube, si especifiqueu l'adreça correcta. Acabem de rebre l'adreça del flux, així que anem a veure com enviar-la al reproductor.
No tindrem en compte tots els matisos de col·locar el component del reproductor a la pantalla de l'aplicació (pots veure'l als exemples del lloc web del projecte o al codi), només mirarem com començar a reproduir vídeos de YouTube al reproductor a l'adreça obtinguda anteriorment:
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);
}
}
Problemes coneguts
No reproduirà vídeos amb restriccions d'edat que requereixin iniciar sessió al compte de Google/YouTube
consell: afegiu aquests vídeos a la llista negra o demaneu a l'autor del vídeo que elimini la restricció establerta per error.
Alguns vídeos d'emissió per als quals el servei retorna una durada zero no es reproduiran (per a aquests vídeos, la durada a les llistes i la galeria està marcada com a "[dur undef]").
És possible que els vídeos que només estan disponibles mitjançant enllaços directes no s'incloguin a la llista de reproducció local, encara que baixeu tots els vídeos de l'usuari.
Si us trobeu amb un vídeo públic que no requereix un inici de sessió, es reprodueix al navegador, però no es reprodueix al reproductor, envieu un informe d'error (és molt possible, el problema ja s'ha solucionat a la nova versió NewPipeExtractor i només caldrà actualitzar el muntatge amb aquesta versió, per exemple).
La interfície pot alentir-se amb una Internet lenta (però no apagada).
Com a resultat, els
El fill va passar d'una tauleta a un televisor intel·ligent de Samsung, que no pot executar aplicacions d'Android. Per tant, el millor control parental segueix sent personal.
Però l'aplicació va resultar prou convenient per començar a utilitzar-la jo mateix. La primera impressió de les primeres versions de treball va ser que vaig entrar en un altre món. Tot el contingut es descarrega de YouTube, però això ja no és YouTube, sinó una altra cosa, segura i controlada, com si us traguéssiu un centpeus de l'ull i el fiquessis en un pot de vidre. I tot és qüestió de recomanacions.