A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Introdução breve: quero falar sobre o player online do YouTube para Android com playlists locais, canais e recomendações.

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Introdução detalhada:
Algum tempo atrás, enfrentei exatamente o mesmo problema que o autor deste maravilhoso aplicativo Channel Whitelist, e cheguei à mesma conclusão: quero poder dar ao meu filho um tablet ou smartphone com desenhos animados de vez em quando, mas não estou nada satisfeito com o que aparece após 2-3 cliques na lista de recomendações nos aplicativos padrão do cliente YouTube.

Infelizmente, após instalar o aplicativo Channel Whitelist, notei que ele tinha outra desvantagem mais prosaica, mas ainda assim fatal — o NIH não me pareceu (e, principalmente, ao meu filho) muito confortável de usar, especialmente depois de me acostumar com o player YouTube Kids.

Em suma, depois de algum tempo, decidi criar minha própria implementação. Após mais algum tempo, foi possível adicionar a tag para o primeiro lançamento.

Principais funcionalidades:

  • Adicione seus canais e playlists favoritos — eles serão salvos e indexados na base de dados local.
  • Dentro das playlists adicionadas, desative os vídeos desnecessários, caso não precise deles.
  • A lista de recomendações é gerada aleatoriamente apenas a partir dos canais e playlists adicionados ao aplicativo.

O código-fonte é aberto, licença GPLv3: https://github.com/sadr0b0t/yashlang/

A seguir, uma visão geral das principais funcionalidades em mais detalhes, além de algumas informações técnicas sobre como reproduzir vídeos do YouTube em seu aplicativo Android sem usar a API do Google e wrappers da web.

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

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Busca instantânea na base de dados local.

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) => A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Adicionar novo canal ou playlist.

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Buscar por nome online ou inserir um endereço conhecido. A lista de vídeos do canal ou da playlist é salva na base de dados local, ícones não são armazenados em cache.

Playlist dinâmica — reproduzir resultados da pesquisa.

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) => A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Nas recomendações abaixo do vídeo, haverá apenas vídeos que atendem à busca realizada.

De maneira semelhante, se você abrir um vídeo a partir das configurações da playlist, na lista de recomendações só aparecerão vídeos dessa mesma playlist.

Playlists e canais podem ser desativados temporariamente e ativados novamente.

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Observe: videos from the disabled playlist will also disappear from search results, viewing history, and favorites. But don't worry, they will reappear there as soon as the playlist is enabled again.

Adicionar vídeo à lista negra

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

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

Visualizar lista negra e reativar itens que foram bloqueados por engano:
Configurações > menu no cabeçalho > Lista negra

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Vídeos favoritos e histórico de visualizações

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

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

Menus contextuais no cabeçalho da tela e com um clique longo nas galerias e listas

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

Copiar o nome ou o endereço do vídeo ou da playlist na tela de visualização ou em qualquer lista.

Início rápido — adicionar canais e playlists recomendados

A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?) => A Morte de Koschei na lista de recomendações (é possível tornar o YouTube mais confortável e seguro?)

O aplicativo imediatamente terá a aparência das capturas de tela acima.

Canais e playlists indesejados podem ser desativados ou removidos 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 não será possível alternar entre diferentes versões de diferentes fontes em um mesmo dispositivo devido a diferentes assinaturas do arquivo apk, antes de instalar a versão de uma nova fonte, você terá que remover a versão instalada junto com os dados — cache de playlists e histórico de visualizações (ou encontrar uma forma de transferir esses dados).

Detalhes técnicos

Não requer conta do Google/YouTube, apenas precisa de internet, utiliza as bibliotecas:

Código aberto, licença livre GPLv3.

pergunta: É legal raspar sites sem permissão (ou com proibição explícita) dos autores? O Google remove do Google Play aplicativos, que não utilizam sua API, mas raspam seus sites, pois violam seu termo de uso.
Resposta: claro, é legal, você pode escolher qual ferramenta usar para ler informações públicas. Mais ainda: O tribunal dos EUA legalizou completamente a extração de dados de sites e proibiu qualquer técnica que obstrua esse processo, mas o Gula pode ter uma opinião diferente, pessoalmente ainda não tenho vontade de ir a um tribunal americano para convencê-los.

Um pouco de código

A biblioteca NewPipeExtractor — um projeto auxiliar do reprodutor NewPipe, permite baixar uma lista de vídeos para um canal ou playlist específicos, obter informações detalhadas sobre um vídeo conhecido (o que é visível na página da web do vídeo), obter o endereço do ícone do vídeo e também acessar o endereço do fluxo de vídeo.

O código para baixar a playlist é um pouco extenso, então não vou incluí-lo aqui, quem tiver interesse — dê uma olhada nos arquivos de origem, principalmente é a classe ContentLoader.

Vamos ver como obter o endereço do fluxo de vídeo a partir do endereço da página pública do vídeo e reproduzi-lo no reprodutor.

Conecte a biblioteca em
app/build.gradle

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

Curiosamente, mesmo após isso, ainda não será possível utilizá-la, pois os exemplos vão acusar a ausência da classe Downloader. Você pode copiá-la para o projeto do diretório de testes automáticos NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funciona para a versão 0.17.4 (parece que em uma versão mais nova da biblioteca essa parte foi reestruturada, mas isso ainda precisa ser verificado).

Obtenha o endereço do fluxo de vídeo a partir do 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;
    }

Como 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 reprodutor estará ExoPlayer da própria Google. Não é uma interface web sobre o YouTube, mas sim um verdadeiro player embutido para reproduzir qualquer vídeo, suficientemente flexível e personalizável. Ele também consegue reproduzir fluxos de vídeo do YouTube, se for fornecido o endereço correto. Acabamos de obter o endereço do fluxo, então vamos ver como enviá-lo para o player.

Adicionar 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 vamos considerar todos os detalhes sobre o posicionamento do componente player na tela do aplicativo (você pode verificar os exemplos no site do projeto ou no código), vamos nos concentrar apenas em como iniciar a reprodução de vídeos do YouTube no player com o endereço obtido acima:

app/src/main/java/su/sadrobot/yashlang/WatchVideoActivity.java

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // parar a reprodução do vídeo atual, se foi carregado
        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);

        // Pause o vídeo antigo enquanto preparamos o novo
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Se pausar aqui depois que o player já pausou por conta própria, terminando
            // de reproduzir o vídeo, receberemos aqui um segundo evento STATE_ENDED, então precisamos de uma verificação
            // especial aqui.
            // O valor de getPlayWhenReady() permanecerá true, então checamos exatamente o estado.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Prepare o player com a fonte.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Indique a posição atual imediatamente ao carregar o vídeo
        // (nos comentários algo é mencionado sobre fontes de dados que suportam ou não suportam
        // transições seek ao carregar, mas parece que isso é balela - basta fazer seek imediatamente após o carregamento)
        // Exoplayer toca nova Playlist do começo em vez da posição fornecida
        // https://github.com/google/ExoPlayer/issues/4375
        // Como carregar o stream na posição desejada? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // neste ponto a duração normal ainda não está disponível, então não a checamos
        //if(seekTo > 0 && seekTo  0) {
            // 5 segundos antes
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Problemas conhecidos

  • Não irá reproduzir vídeos com restrições de idade que exigem login na conta Google/YouTube.

por exemplo: Ilya Muromets, Estúdio de Cinema "Mosfilm", Ruslan e Lyudmila 1ª série / Ruslan and Lyudmila film 1, Estúdio de Cinema "Mosfilm"

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

  • Não irá reproduzir alguns vídeos de transmissão, para os quais o serviço retorna comprimento nulo (para esses vídeos, a duração nas listas e na galeria é marcada como "[dur undef]")

por exemplo: Bem, Espere! Todos os Episódios Soyuzmultfilm HD (Desenhos para crianças), Desenhos do estúdio Soyuzmultfilm, Melhores desenhos animados Soyuzmultfilm, Desenhos do estúdio Soyuzmultfilm

dica: adicione esses vídeos à lista negra.

  • Vídeos disponíveis apenas por links diretos podem não aparecer na playlist local, mesmo que você carregue todos os vídeos do usuário.

por exemplo: Domando o Fogo, Episódio 1, Concerto de Cinema 'Mosfilm'

  • Se você encontrar um vídeo público que não requer login, reproduz em navegador, mas não no player, envie um relatório de bug (é bem possível que o problema já tenha sido corrigido em uma nova versão NewPipeExtractor e será necessário apenas atualizar para essa versão. por exemplo).

  • A interface pode ter um atraso em conexões lentas (mas não desconectadas).

Como resultado,

O filho mudou do tablet para uma smart TV Samsung, que não consegue rodar aplicativos Android. Portanto, o melhor controle parental ainda é o acompanhamento pessoal.

Mas o aplicativo se mostrou suficientemente conveniente para que eu começasse a usá-lo. A primeira impressão das versões iniciais foi a de estar em um mundo diferente. Todo o conteúdo é carregado do YouTube, mas isso já não é YouTube, é algo diferente, seguro e controlado, como se eu tivesse tirado uma escolopendra do olho e colocado em um frasco de vidro. E a questão são as recomendações.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster