A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A introdução é curta: quero falar sobre o player online do YouTube para Android com playlists, canais e recomendações locais.

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Introdução expandida:
Há algum tempo, encontrei exatamente o mesmo problema do autor de um aplicativo maravilhoso Lista de permissões de canais, e determinei para mim mesmo exatamente a mesma atitude em relação a isso: quero poder dar ao meu filho um tablet ou smartphone com desenhos animados de vez em quando, mas não estou nada feliz com onde, depois de 2-3 cliques, a lista de recomendações em aplicativos padrão - clientes do YouTube - leva a criança.

Infelizmente, após a instalação do aplicativo Channel Whitelist, outra falha mais prosaica, mas ainda fatal, foi descoberta - NIH I (e, mais importante, meu filho) achou sua interface pouco conveniente, principalmente após o hábito de usar o player YouTube Kids.

Em geral, depois de algum tempo eu estava pronto para fazer minha própria implementação. Depois de algum tempo, foi possível colocar uma tag no primeiro lançamento.

Principais características:

  • Adicione seus canais e playlists favoritos - eles serão salvos e indexados no banco de dados local
  • Nas listas de reprodução adicionadas, desative os vídeos desnecessários se não precisar deles
  • A lista de recomendações é gerada aleatoriamente apenas a partir de canais e playlists adicionados ao aplicativo

Código aberto, licença GPLv3: https://github.com/sadr0b0t/yashlang/

Abaixo está uma visão geral dos principais recursos com mais detalhes, além de alguns detalhes técnicos sobre como reproduzir vídeos do YouTube em seu aplicativo Android sem usar a API do Google e web wrappers.

Na tela principal e na tela do player: recomendações aleatórias de canais não aleatórios

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Pesquisa instantânea no banco de dados local

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) => A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Adicione um novo canal ou playlist

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Pesquise por nome online ou insira um endereço conhecido. A lista de vídeos de um canal ou playlist é salva no banco de dados local; os ícones não são armazenados em cache.

Playlist dinâmica - reproduza os resultados da pesquisa

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) => A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Nas recomendações de vídeos haverá apenas vídeos que satisfaçam a consulta de pesquisa.

Da mesma forma, se você abrir um vídeo nas configurações da playlist, apenas os vídeos da mesma playlist aparecerão na lista de recomendações.

Listas de reprodução e canais podem ser temporariamente desativados e ativados novamente

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Observação: os vídeos de uma playlist desativada também desaparecerão dos resultados da pesquisa, do histórico de visualização e da lista de favoritos. Mas não se preocupe, eles aparecerão novamente imediatamente após a lista de reprodução ser reativada.

Adicione um vídeo à lista negra

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Um vídeo bloqueado não será exibido nas recomendações, nos resultados da pesquisa e desaparecerá da lista de favoritos e do histórico de visualizações. O vídeo ainda estará visível nas configurações da playlist.

Veja a lista negra e reative os itens bloqueados por engano:
Configurações > menu de cabeçalho > Lista negra

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Vídeos favoritos e histórico de visualização

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Os vídeos favoritos na tela do player são marcados com um asterisco no canto superior direito.

Menus de contexto no título da tela e clique longo em galerias e listas

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

Copie o nome ou endereço de um vídeo ou lista de reprodução na tela de navegação ou em qualquer lista.

Início rápido - adicione canais e playlists recomendados

A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?) => A morte de Koshchei está na lista de recomendações (é possível tornar o YouTube aconchegante e seguro?)

O aplicativo se parecerá imediatamente com as imagens acima.

Canais e listas de reprodução desnecessários podem ser desativados ou excluídos nas configurações.

Instalação

Página do projeto: https://github.com/sadr0b0t/yashlang/
Em inglês: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
lançamentos: https://github.com/sadr0b0t/yashlang/releases

Tenha em mente que alternar entre diferentes versões de diferentes fontes no mesmo dispositivo não funcionará devido às diferentes assinaturas do arquivo apk; antes de instalar a versão de uma nova fonte, primeiro você terá que excluir a versão instalada junto com os dados - o cache da lista de reprodução e o histórico de navegação (ou descubra como transferir dados).

Detalhes técnicos

Não requer conta Google/YouTube, você só precisa de Internet, utiliza as seguintes bibliotecas:

Licença GPLv3 gratuita e de código aberto.

pergunta: Geralmente é legal copiar sites sem permissão (ou com proibição explícita) dos autores? Google remove aplicativos do Google Play, que não usam sua API, mas analisam seus sites, porque eles violam seu contrato de usuário.
resposta: claro, é legal, depende de você qual ferramenta usar para ler as informações disponíveis publicamente. Além disso: Um tribunal dos EUA legalizou completamente a raspagem de sites e proibiu a interferência técnica nele., mas Gul pode ter uma opinião diferente; pessoalmente, ainda não tenho vontade de ir a um tribunal americano para convencê-los.

Algum código

Biblioteca NovoPipeExtrator - projeto de suporte ao jogador NewPipe, permite baixar uma lista de vídeos de um canal ou playlist específica, baixar informações detalhadas sobre um vídeo famoso (o que está visível na página do vídeo), obter o endereço do ícone do vídeo e também obter o endereço do vídeo fluxo.

O código para carregar a playlist é um pouco complicado, então não vou dar aqui, para quem tiver interesse, dê uma olhada no código fonte, é basicamente uma classe Carregador de conteúdo.

Vamos ver como obter o endereço de um stream de vídeo do endereço da página pública do vídeo e reproduzi-lo no player.

Conecte 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 depois disso você ainda não consiga usá-lo, porque... exemplos reclamarão da falta da classe Downloader. Ele pode ser copiado para o projeto do diretório de testes automatizados NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - funciona para a versão 0.17.4 (parece que essa parte foi refeita em uma versão mais recente da biblioteca, mas ainda precisamos verificar).

Obtenha o endereço do stream de vídeo pelo endereço da página do vídeo no site do 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 endereço do vídeo ytVidUrl pode ser o endereço público da página de qualquer vídeo no site do YouTube, por exemplo https://www.youtube.com/watch?v=pd2RlatmNRk

O jogador será exoplayer do próprio Google. Este não é um web wrapper do YouTube, mas um verdadeiro player incorporado para reproduzir qualquer vídeo, bastante flexível e personalizável. Ele também pode reproduzir fluxos de vídeo do YouTube se você fornecer o endereço correto. Acabamos de receber o endereço do stream, então vamos ver como enviá-lo ao player.

Conecte a biblioteca ao projeto app / build.gradle:

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

Não consideraremos todas as nuances de colocar o componente player na tela do aplicativo (você pode ver os exemplos no site do projeto ou no código), apenas veremos como iniciar a reprodução de um vídeo do YouTube no player em o endereço recebido acima:

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 Conhecidos

  • Não reproduzirá vídeos com restrições de idade que exijam login em sua conta do Google/YouTube

eg Ilya Muromets, Mosfilm Cinema Concern, Ruslan e Lyudmila filme 1, Mosfilm Film Concern

conselho: adicione esses vídeos à lista negra ou peça ao autor do vídeo para remover a restrição que foi definida por engano.

  • Alguns vídeos transmitidos para os quais o serviço retorna duração zero não serão reproduzidos (para tais vídeos, a duração nas listas e na galeria é marcada como “[dur undef]”)

eg Espere por isso! Todas as edições da Soyuzmultfilm HD (desenhos animados para crianças), desenhos animados do estúdio Soyuzmultfilm, Principais desenhos animados Soyuzmultfilm, desenhos animados do estúdio Soyuzmultfilm

conselho: adicione esses vídeos à lista negra.

  • Vídeos disponíveis apenas por meio de links diretos podem não ser incluídos na playlist local, mesmo que você baixe todos os vídeos do usuário

eg Domada do Fogo Episódio 1, Mosfilm Cinema Concern

  • Se você se deparar com um vídeo público que não requer login, reproduz no navegador, mas não reproduz no player, envie um relatório de bug (é bem possível que o problema já tenha sido corrigido na nova versão NovoPipeExtrator e você só precisará atualizar o assembly com esta versão, por exemplo).

  • A interface pode ficar lenta se a Internet estiver lenta (mas não desligada)

Como resultado,

Meu filho mudou de um tablet para uma smart TV Samsung, que não roda aplicativos Android. Portanto, o melhor controle parental ainda é o pessoal.

Mas o aplicativo acabou sendo conveniente o suficiente para eu começar a usá-lo sozinho. A primeira impressão das primeiras versões de trabalho foi que eu estava em outro mundo. Todo o conteúdo é baixado do YouTube, mas isso não é mais o YouTube, mas outra coisa, segura e controlada, como se você tirasse uma centopéia do olho e a colocasse em uma jarra de vidro. E é tudo uma questão de recomendações.

Fonte: habr.com

Adicionar um comentário