ProHoster > Blog > noticias de internet > A morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)
A morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)
A introdución é breve: quero falar do reprodutor en liña de YouTube para Android con listas de reprodución locais, canles e recomendacións.
Introdución ampliada:
Hai algún tempo atopeime exactamente co mesmo problema que o autor dunha aplicación marabillosa Lista branca da canle, e determino por min mesmo exactamente a mesma actitude cara a iso: quero poder regalarlle ao meu fillo unha tableta ou un teléfono intelixente con debuxos animados de cando en vez, pero non estou nada contento con onde, despois de 2-3 clics, aparece a lista. de recomendacións en aplicacións estándar - clientes de YouTube - leva o neno.
Desafortunadamente, despois de instalar a aplicación Lista branca de canles, descubriuse outro fallo máis prosaico, pero aínda fatal: NIH I (e, o máis importante, o meu fillo) considerou que a súa interface non era moi cómoda, especialmente despois do hábito de usar o reprodutor YouTube Kids.
En xeral, despois dun tempo estaba preparado para facer a miña propia implementación. Despois dun tempo, fíxose posible poñer unha etiqueta no primeiro lanzamento.
Características clave:
Engade as túas canles e listas de reprodución favoritas: gardaranse e indexaranse na base de datos local
Dentro das listas de reprodución engadidas, desactiva os vídeos innecesarios se non os necesitas
A lista de recomendacións xérase de forma aleatoria só a partir de canles e listas de reprodución engadidas á aplicación
A continuación móstrase unha visión xeral das principais características con máis detalle, ademais de algúns detalles técnicos sobre como reproducir vídeos de YouTube na súa aplicación de Android sen utilizar a API de Google e os envoltorios web.
Na pantalla principal e na pantalla do reprodutor: recomendacións aleatorias de canles non aleatorias
Busca instantánea na base de datos local
=>
Engade unha nova canle ou lista de reprodución
Busca por nome en liña ou introduce un enderezo coñecido. A lista de vídeos dunha canle ou lista de reprodución gárdase na base de datos local; as iconas non se almacenan na memoria caché.
Lista de reprodución dinámica: reproduce os resultados da busca
=>
Nas recomendacións de vídeos só haberá vídeos que satisfagan a consulta de busca.
Do mesmo xeito, se abres un vídeo desde a configuración da lista de reprodución, só aparecerán na lista de recomendacións os vídeos da mesma lista de reprodución.
As listas de reprodución e as canles pódense desactivar e activar de novo temporalmente
Ten en conta: os vídeos dunha lista de reprodución desactivada tamén desaparecerán dos resultados da busca, do historial de visualización e da lista de favoritos. Pero non te preocupes, aparecerán alí de novo inmediatamente despois de que se active de novo a lista de reprodución.
Engade un vídeo á lista negra
Un vídeo bloqueado non se mostrará nas recomendacións, nos resultados de busca e desaparecerá da lista de favoritos e do historial de visualización. O vídeo seguirá sendo visible na configuración da lista de reprodución.
Consulta a lista negra e reactiva os elementos bloqueados por erro: Configuración > menú de cabeceira > Lista negra
Vídeos favoritos e historial de visualización
Os vídeos favoritos na pantalla do reprodutor están marcados cun asterisco na esquina superior dereita.
Menús contextuales no título da pantalla e clic longo nas galerías e listas
Copia o nome ou o enderezo dun vídeo ou lista de reprodución na pantalla de visualización ou en calquera lista.
Inicio rápido: engade canles e listas de reprodución recomendadas
=>
A aplicación parecerase inmediatamente ás capturas de pantalla anteriores.
As canles e listas de reprodución non necesarias pódense desactivar ou eliminar na configuración.
Non está en Google Play e non estará nun futuro próximo (Google prohibe as aplicacións que ignoran a API e analizan o seu sitio web, incluíndo a lista branca de canles mencionada ou o reprodutor NewPipe)
Teña en conta que o cambio de versións de diferentes fontes no mesmo dispositivo non funcionará debido ás diferentes sinaturas do ficheiro apk; antes de instalar a versión dunha nova fonte, primeiro terás que eliminar a versión instalada xunto cos datos - a caché da lista de reprodución e o historial de navegación (ou descubrir como transferir datos).
Detalles técnicos
Non require unha conta de Google/YouTube, só precisa de Internet, utiliza as seguintes bibliotecas:
biblioteca NewPipeExtractor - proxecto de apoio ao xogador Newpipe, permítelle descargar unha lista de vídeos para unha canle ou lista de reprodución especificada, descargar información detallada sobre un vídeo famoso (o que está visible na páxina web do vídeo), obter o enderezo da icona do vídeo e tamén obter o enderezo do vídeo corrente.
O código para cargar a lista de reprodución é un pouco engorroso, así que non o vou dar aquí, para os interesados, bótalle un ollo ao código fonte, basicamente é unha clase ContentLoader.
Vexamos como obter o enderezo dunha emisión de vídeo desde o enderezo da páxina de vídeo pública e reproducilo no reprodutor.
É curioso que despois disto aínda non poidas usalo, porque... os exemplos queixaranse da falta da clase Downloader. Pódese copiar no proxecto desde o directorio de probas automatizadas NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funciona para a versión 0.17.4 (parece que esta parte foi feita de novo nunha versión máis nova da biblioteca, pero aínda hai que comprobalo).
Obtén o enderezo do fluxo de vídeo polo enderezo da páxina do vídeo no sitio web de YouTube:
O xogador será exoplayer do propio Google. Este non é un envoltorio web sobre YouTube, senón un reprodutor integrado real para reproducir calquera vídeo, bastante flexible e personalizable. Tamén pode reproducir fluxos de vídeo de YouTube se lle proporcionas o enderezo correcto. Acabamos de recibir o enderezo da emisión, así que imos ver como envialo ao reprodutor.
Non teremos en conta todos os matices de colocar o compoñente do reprodutor na pantalla da aplicación (podes ver os exemplos na páxina web do proxecto ou no código), só miraremos como comezar a reproducir un vídeo de YouTube no reprodutor en o enderezo recibido arriba:
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);
}
}
Problemas coñecidos
Non reproducirá vídeos con restricións de idade que requiran iniciar sesión na túa conta de Google/YouTube
consello: engade estes vídeos á lista negra ou pídelle ao autor do vídeo que elimine a restrición que se estableceu por erro.
Non se reproducirán algúns vídeos de emisión para os que o servizo devolve unha duración cero (para estes vídeos, a duración nas listas e na galería márcase como "[dur undef]").
É posible que os vídeos que só están dispoñibles mediante ligazóns directas non se inclúan na lista de reprodución local, aínda que descargues todos os vídeos do usuario
Se atopas un vídeo público que non require inicio de sesión, reproduce no navegador, pero non se reproduce no reprodutor, envía un informe de erro (é moi posible que o problema xa se solucionou na nova versión NewPipeExtractor e só terás que actualizar a montaxe con esta versión, por exemplo).
A interface pode ralentizarse se a Internet é lenta (pero non está desactivada)
Como resultado,
O meu fillo pasou dunha tableta a un televisor intelixente Samsung, que non pode executar aplicacións de Android. Polo tanto, o mellor control parental segue sendo persoal.
Pero a aplicación resultou o suficientemente cómoda para que comece a usala eu. A primeira impresión das primeiras versións de traballo foi que estaba noutro mundo. Todo o contido descárgase de YouTube, pero isto xa non é YouTube, senón outra cousa, segura e controlada, coma se quitase un ciempiés do ollo e o meteses nun frasco de vidro. E todo é sobre as recomendacións.