La introducción es breve: quiero hablar sobre el reproductor en línea de YouTube para Android con listas de reproducción locales, canales y recomendaciones.

La introducción es detallada.
Hace algún tiempo, enfrenté exactamente el mismo problema que el autor de la maravillosa aplicación Channel Whitelist , y determiné exactamente la misma actitud hacia ella: quiero poder darle a mi hijo una tableta o teléfono inteligente con dibujos animados de vez en cuando, pero no estoy completamente feliz, donde en 2-3 clics el niño obtiene una lista de recomendaciones en aplicaciones estándar: clientes de YouTube.
Desafortunadamente, después de instalar la aplicación Channel Whitelist, ya descubrió otra falla más prosaica pero aún fatal: NIH (y, lo más importante, su hijo) no encontró su interfaz muy conveniente, especialmente después de la costumbre de usar el reproductor YouTube Kids.
En general, después de algún tiempo maduré para hacer mi implementación. Después de un tiempo, se hizo posible poner la etiqueta en el primer lanzamiento.
Características clave:
- Agregue sus canales y listas de reproducción favoritos: se guardarán e indexarán en la base de datos local
- Desactiva los videos adicionales dentro de las listas de reproducción agregadas si no los necesitas
- La lista de recomendaciones se genera aleatoriamente solo a partir de canales y listas de reproducción agregadas a la aplicación.
Las fuentes están abiertas, licencia GPLv3: https://github.com/sadr0b0t/yashlang/
Además, una descripción general de las características principales con más detalle, además de algunos detalles técnicos sobre cómo reproducir videos de YouTube en su aplicación de Android sin usar API de Google y envoltorios web.
En la pantalla principal y en la pantalla del reproductor: recomendaciones aleatorias de canales no aleatorios






Búsqueda instantánea de base de datos local
=> 
Agregar nuevo canal o lista de reproducción


Busque por nombre en línea o inserte una dirección conocida. La lista de clips de canales o listas de reproducción se guarda en la base de datos local, los iconos no se almacenan en caché.
Lista de reproducción dinámica - reproducir resultados de búsqueda
=> 


En las recomendaciones debajo del video solo habrá videos que satisfagan la consulta de búsqueda.
Del mismo modo, si abre un video desde la configuración de la lista de reproducción, solo los clips de la misma lista de reproducción estarán en la lista de recomendaciones.
Las listas de reproducción y los canales se pueden desactivar y activar temporalmente

Tenga en cuenta que los videos de la lista de reproducción desactivada también desaparecerán de los resultados de búsqueda, el historial de navegación y su lista de favoritos. Pero no se preocupe, aparecerán allí nuevamente inmediatamente después de que se vuelva a activar la lista de reproducción.
Lista negra

Un clip bloqueado no aparecerá en las recomendaciones, en los resultados de búsqueda, desaparecerá de su lista de favoritos y de su historial de navegación. El video seguirá siendo visible en la configuración de la lista de reproducción.
Vea la lista negra y vuelva a habilitar los elementos bloqueados por error:
Configuración> menú de encabezado> Lista negra

Videos favoritos e historial de reproducciones

Los videos favoritos en la pantalla del reproductor están marcados con un asterisco en la esquina superior derecha.
Menús contextuales en el título de la pantalla y clic largo en galerías y listas

Copie el nombre o la dirección del video o la lista de reproducción en la pantalla de visualización o en cualquier lista.
Inicio rápido: agregue canales recomendados y listas de reproducción
=> 
La aplicación se verá inmediatamente como las capturas de pantalla anteriores.
Los canales y listas de reproducción innecesarios se pueden desactivar o eliminar en la configuración.
Instalación
Página del proyecto: https://github.com/sadr0b0t/yashlang/
en inglés: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
lanzamientos: https://github.com/sadr0b0t/yashlang/releases
Tenga en cuenta que el cambio entre diferentes versiones de diferentes fuentes en el mismo dispositivo no funcionará debido a las diferentes firmas del archivo apk, antes de instalar la versión de una nueva fuente, primero deberá eliminar la versión instalada junto con la caché de la lista de reproducción de datos y el historial de navegación (o averiguar cómo estos transferir datos).
Detalles técnicos
No requiere una cuenta de Google / YouTube, solo se necesita Internet, utiliza bibliotecas:
Código abierto, licencia GPLv3 gratuita.
Pregunta: ¿Es legal analizar sitios sin permiso (o con una prohibición explícita) de los autores? Google elimina las aplicaciones de Google que no usan sus API, pero analizan sus sitios, porque violan su acuerdo de usuario.
respuesta: por supuesto, legalmente, depende de usted qué herramienta utilizar para leer la información disponible públicamente. Además: la Corte de EE. UU. Ha legalizado por completo el desguace de sitios web y ha prohibido que sea técnicamente impedido , pero Gul puede tener una opinión diferente, personalmente no deseo ir a la corte estadounidense para convencerlos.
Un poco de código
La biblioteca NewPipeExtractor es un proyecto auxiliar del reproductor NewPipe que le permite descargar una lista de clips para un canal específico o lista de reproducción, descargar información detallada sobre un video conocido (lo que está visible en la página web del video), recibir la dirección del ícono del video y también recibir la dirección de la transmisión del video.
El código para descargar la lista de reproducción es un poco engorroso, por lo que no lo daré aquí, a nadie que esté interesado, mira la fuente, básicamente esta es la clase ContentLoader .
Veamos cómo obtener la dirección de la transmisión de video en la dirección de la página pública del video y reproducirla en el reproductor.
Conectar biblioteca a
app / build.gradle
dependencies { ... // NewPipe: youtube parser // https://github.com/TeamNewPipe/NewPipeExtractor implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4" ... }
Es curioso que después de eso todavía no se pueda usar, porque ejemplos jurarán en la clase Downloader que falta. Se puede copiar al proyecto desde el catálogo de pruebas automáticas NewPipeExtractor / extractor / src / test / java / org / schabi / newpipe / Downloader.java - funciona para la versión 0.17.4 (parece que en la versión más reciente de la biblioteca esta parte se rehizo, pero todavía necesita verificar).
Obtenga la dirección de la transmisión de video en la dirección de la página de video en el sitio web de YouTube:
app / src / main / java / su / sadrobot / yashlang / controller / ContentLoader.java
public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
La dirección de video de ytVidUrl puede ser la dirección pública de la página de cualquier video en el sitio web de YouTube, por ejemplo https://www.youtube.com/watch?v=pd2RlatmNRk
El jugador será ExoPlayer de Google mismo. Este no es un contenedor web sobre YouTube, sino un reproductor real integrado para reproducir cualquier video, bastante flexible y personalizable. Incluyendo la capacidad de reproducir transmisiones de video de YouTube, si especifica la dirección correcta. Acabamos de recibir la dirección de la transmisión, así que veremos cómo enviarla al reproductor.
Conecte la biblioteca al proyecto app / build.gradle :
dependencies { ... // google Exoplayer // https://github.com/google/ExoPlayer // https://exoplayer.dev/ implementation 'com.google.android.exoplayer:exoplayer:2.10.8' ... }
No consideraremos todos los matices de colocar el componente del reproductor en la pantalla de la aplicación (puede ver los ejemplos en el sitio web del proyecto o en el código), solo veremos cómo comenzar a reproducir videos de YouTube en el reproductor en la dirección anterior:
app / src / main / java / su / sadrobot / yashlang / WatchVideoActivity.java
private void playVideoStream(final String streamUrl, final long seekTo) { if (streamUrl == null) {
Problemas conocidos
- No reproducirá videos con restricciones de edad que requieran un inicio de sesión en su cuenta de Google / YouTube
por ejemplo: Ilya Muromets, Mosfilm Film Concern , Ruslan and Lyudmila film series 1 / Ruslan and Lyudmila film 1, Mosfilm Film Concern
Consejo: agregue dichos videos a la lista negra o solicite al autor del video que elimine la restricción establecida por error.
- Algunos videos de transmisión para los cuales el servicio devuelve duración cero no se reproducirán (para tales videos, la duración en las listas y la galería está marcada como "[dur undef]")
Por ejemplo: ¡ Espera un minuto! Todos los temas Soyuzmultfilm HD (Dibujos animados para niños), Dibujos animados Soyuzmultfilm Studios , Mejores dibujos animados Soyuzmultfilm, Dibujos animados Studios Soyuzmultfilm
Consejo: Agregue estos videos a la lista negra.
- Es posible que los videos accesibles solo a través de enlaces directos no entren en la lista de reproducción local, incluso si descarga todos los videos del usuario
por ejemplo: Taming of Fire 1 series, Mosfilm Film Concern
Si ve un video público que no requiere inicio de sesión, se reproduce en el navegador, pero no se reproduce en el reproductor, envíe un informe de error (es muy posible que el problema ya se haya solucionado en la nueva versión de NewPipeExtractor y solo necesita actualizar el ensamblaje con esta versión, por ejemplo ).
La interfaz puede ralentizarse cuando Internet es lento (pero no está apagado)
Al final
El hijo pasó de una tableta a un televisor inteligente Samsung, que no sabe cómo ejecutar aplicaciones de Android. Por lo tanto, el mejor control parental sigue siendo personal.
Pero la aplicación resultó ser lo suficientemente conveniente para comenzar a usarla yo mismo. La primera impresión de las primeras versiones de trabajo fue en otro mundo. Todo el contenido se descarga de YouTube, pero ya no es YouTube, sino algo más, seguro y controlado, como si le quitara un scolopendra del ojo y lo pusiera en un frasco de vidrio. Y está en las recomendaciones.