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.

A morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)

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

Código aberto, licenza GPLv3: https://github.com/sadr0b0t/yashlang/

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

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 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 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?)

Busca instantánea na base de datos local

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?)

Engade unha nova canle ou lista de reprodución

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 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 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 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?)

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

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 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 morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)

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

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 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?)

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

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 morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)

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

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?)

Vídeos favoritos e historial de visualización

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 morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)

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

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 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?)

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 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 morte de Koshchei está na lista de recomendacións (é posible que YouTube sexa acolledor e seguro?)

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.

Instalación

Páxina do proxecto: https://github.com/sadr0b0t/yashlang/
en inglés: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
lanzamentos: https://github.com/sadr0b0t/yashlang/releases

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:

Código aberto, licenza GPLv3 gratuíta.

pregunta: é xeralmente legal raspar sitios web sen permiso (ou cunha prohibición explícita) dos autores? Google elimina aplicacións de Google Play, que non usan a súa API, pero analizan os seus sitios, porque violan o seu acordo de usuario.
resposta: por suposto, é legal, depende de ti que ferramenta usar para ler a información dispoñible publicamente. Ademais: Un tribunal estadounidense legalizou completamente o raspado de sitios web e prohibiu a interferencia técnica con el., pero Gul pode ter unha opinión diferente; persoalmente, aínda non teño ganas de acudir a un tribunal estadounidense para convencelos.

Algún código

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.

Conecta a biblioteca a
app/build.gradle

dependencies {
...
    // NewPipe: youtube parser
    // https://github.com/TeamNewPipe/NewPipeExtractor
    implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}

É 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:

app/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;
    }

O enderezo do vídeo ytVidUrl pode ser o enderezo público da páxina de calquera vídeo do sitio web de YouTube, por exemplo https://www.youtube.com/watch?v=pd2RlatmNRk

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.

Conecta a biblioteca co proxecto app/build.gradle:

dependencies {
...
    // google Exoplayer
    // https://github.com/google/ExoPlayer
    // https://exoplayer.dev/
    implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}

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:

app/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 coñecidos

  • Non reproducirá vídeos con restricións de idade que requiran iniciar sesión na túa conta de Google/YouTube

por exemplo: Ilya Muromets, Mosfilm Cinema Concern, Ruslan e Lyudmila película 1, Mosfilm Film Concern

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]").

por exemplo: Agarda por iso! Todos os números de Soyuzmultfilm HD (debuxos animados para nenos), debuxos animados do estudo Soyuzmultfilm, Principais debuxos animados Soyuzmultfilm, Debuxos animados do estudo Soyuzmultfilm

consello: engade estes vídeos á lista negra.

  • É 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

por exemplo: Taming of Fire Episodio 1, Mosfilm Cinema Concern

  • 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.

Fonte: www.habr.com

Engadir un comentario