La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

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 muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Introducción ampliada:
Hace algún tiempo me enfrenté exactamente al mismo problema que el autor de una maravillosa aplicación. Lista blanca de canales, y determiné exactamente la misma actitud hacia ella: quiero poder darle al niño una tableta o un teléfono inteligente con dibujos animados de vez en cuando, pero no estoy del todo satisfecho con dónde, después de 2-3 clics, el lista de recomendaciones lleva al niño en aplicaciones estándar - clientes de YouTube.

Desafortunadamente, después de instalar la aplicación Channel Whitelist, ya tenía otro defecto más prosaico, pero aún fatal: NIH me pareció (y, lo más importante, a mi hijo) su interfaz no muy conveniente, especialmente después del hábito de usar YouTube Kids jugador.

En general, después de un tiempo maduré para hacer mi propia implementación. Después de un tiempo, fue posible poner una etiqueta en el primer lanzamiento.

Características principales:

  • Agregue sus canales y listas de reproducción favoritos: se guardarán e indexarán en la base de datos local
  • Desactive los videos adicionales dentro de las listas de reproducción agregadas si no los necesita
  • La lista de recomendaciones se genera aleatoriamente solo a partir de los canales y listas de reproducción agregados a la aplicación

Las fuentes son abiertas, licencia GPLv3: https://github.com/sadr0b0t/yashlang/

Lo que sigue es una descripción general de las funciones 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 las API de Google y los envoltorios web.

En la pantalla principal y en la pantalla del reproductor: recomendaciones aleatorias de canales no aleatorios

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Búsqueda instantánea en la base de datos local

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) => La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Agregar un nuevo canal o lista de reproducción

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Busque por nombre en línea o inserte una dirección conocida. La lista de videos de un canal o lista de reproducción se guarda en una base de datos local, los íconos no se almacenan en caché.

Lista de reproducción dinámica: reproducir resultados de búsqueda

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) => La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

En las recomendaciones debajo del video, solo habrá videos que satisfagan la consulta de búsqueda.

De manera similar, si abre un video desde la configuración de la lista de reproducción, solo los videos de la misma lista de reproducción aparecerán en la lista de recomendaciones.

Las listas de reproducción y los canales se pueden apagar y encender temporalmente

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Tenga en cuenta: los videos de la lista de reproducción deshabilitada también desaparecerán de los resultados de búsqueda, del historial de navegación y de la lista de favoritos. Pero no se preocupe, volverán a aparecer allí inmediatamente después de que se vuelva a encender la lista de reproducción.

vídeo de la lista negra

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Un video bloqueado no aparecerá en las recomendaciones, en los resultados de búsqueda, desaparecerá de la lista de favoritos y del historial de visualización. El video seguirá siendo visible en la configuración de la lista de reproducción.

Ver la lista negra y volver a habilitar los elementos bloqueados por error:
Ajustes > menú de cabecera > Lista negra

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Videos favoritos e historial de visualización

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

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 al hacer clic largo en galerías y listas

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

Copie el nombre o la dirección de un video o una lista de reproducción en la pantalla del reloj o en cualquier lista.

Inicio rápido: agregue canales y listas de reproducción recomendados

La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?) => La muerte de Koshchei en la lista de recomendaciones (¿es posible hacer que YouTube sea acogedor y seguro?)

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 cambiar 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 los datos: caché de lista de reproducción e historial de navegación (o descubra cómo transfieren estos datos).

Detalles tecnicos

No requiere cuenta de Google/YouTube, solo se necesita Internet, utiliza bibliotecas:

Código abierto, licencia libre GPLv3.

Pregunta: ¿Es generalmente legal el scraping de sitios sin el permiso (o con una prohibición explícita) de los autores? Google elimina aplicaciones de Google Play, que no usan su API, pero analizan sus sitios, porque. violan su acuerdo de usuario.
Respuesta: Claro, legal, tú decides qué herramienta usar para leer la información pública. Además: El tribunal de EE. UU. Legalizó por completo el scraping de sitios web y prohibió que se obstruyera técnicamente., pero Gul puede tener una opinión diferente, personalmente no tengo ningún deseo de ir a un tribunal estadounidense para convencerlos.

algo de codigo

Biblioteca NuevoPipeExtractor - proyecto de ayudante de jugador NewPipe, le permite descargar una lista de videos para el canal o la lista de reproducción especificados, descargar información detallada sobre un video famoso (lo que se ve en la página web del video), obtener la dirección del ícono del video y también obtener la dirección de la transmisión de vídeo.

El código para cargar la lista de reproducción es un poco engorroso, por lo que no lo traeré aquí, para aquellos que estén interesados: miren la fuente, es básicamente una clase cargador de contenido.

Veamos cómo obtener la dirección de la transmisión de video desde la dirección de la página de video pública y reproducirla en el reproductor.

Conectar la 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. los ejemplos se quejarán de la falta de la clase Downloader. Se puede copiar al proyecto desde el directorio de pruebas automáticas NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funciona para la versión 0.17.4 (parece que esta parte se ha rehecho en una versión más nueva de la biblioteca, pero aún debe verificarse).

Obtenga la dirección de la transmisión de video de la dirección de la página de video en el sitio web de YouTube:

aplicación/src/main/java/su/sadrobot/yashlang/controller/ContentLoader.java

    public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
        // https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
        NewPipe.init(Downloader.getInstance(), new Localization("GB", "en"));
        final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
                .getStreamExtractor(ytVidUrl);
        extractor.fetchPage();
        final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
//        for (final VideoStream stream : extractor.getVideoStreams()) {
//            stream.getUrl();
//        }
        return streamUrl;
    }

La dirección de video ytVidUrl puede ser la dirección pública de la página de cualquier video en el sitio de YouTube, por ejemplo https://www.youtube.com/watch?v=pd2RlatmNRk

el jugador ExoPlayer del propio Google. Este no es un envoltorio web sobre YouTube, sino un verdadero reproductor integrable para reproducir cualquier video, bastante flexible y personalizable. Incluyendo sabe cómo reproducir secuencias de video de YouTube, si especifica la dirección correcta para ello. Acabamos de recibir la dirección de transmisión, así que veamos cómo enviarla al reproductor.

Conectar 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 verlo en 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 obtenida arriba:

aplicación/src/main/java/su/sadrobot/yashlang/WatchVideoActivity.java

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 conocidos

  • No reproducirá videos con restricciones de edad que requieran iniciar sesión en una cuenta de Google/YouTube

por ejemplo: Ilya Muromets, Mosfilm Cinema Concern, Ruslan y Lyudmila 1ra serie / Ruslan y Lyudmila película 1, Mosfilm Cinema 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 transmitidos para los cuales el servicio devuelve una duración cero no se reproducirán (para dichos videos, la duración en las listas y la galería está marcada como "[dur undef]")

por ejemplo: ¡Espéralo! Todos los números Soyuzmultfilm HD (Dibujos animados para niños), Dibujos animados del estudio Soyuzmultfilm, Top dibujos animados Soyuzmultfilm, Estudio de dibujos animados Soyuzmultfilm

consejo: agregue tales videos a la lista negra.

  • Es posible que los videos que solo están disponibles a través de enlaces directos no se incluyan en la lista de reproducción local, incluso si descarga todos los videos del usuario.

por ejemplo: Domar el fuego Episodio 1, Mosfilm Cinema Concern

  • Si encuentra 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, el problema ya se solucionó en la nueva versión NuevoPipeExtractor y solo necesitarás actualizar el ensamblado con esta versión, por ejemplo).

  • La interfaz puede ralentizarse con un Internet lento (pero no apagado)

Como resultado,

El hijo pasó de una tableta a un televisor inteligente Samsung, que no puede ejecutar aplicaciones de Android. Por lo tanto, el mejor control parental sigue siendo personal.

Pero la aplicación resultó ser lo suficientemente conveniente como para comenzar a usarla yo mismo. La primera impresión de las primeras versiones de trabajo fue que me metí en otro mundo. Todo el contenido se descarga de YouTube, pero esto ya no es YouTube, sino otra cosa, segura y controlada, como si te sacaras un ciempiés del ojo y lo metieras en un bote de cristal. Y todo se trata de las recomendaciones.

Fuente: habr.com

Añadir un comentario