ProHoster > Blog > notícias da internet > 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 introdução é curta: quero falar sobre o player online do YouTube para Android com playlists, canais e recomendações locais.
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
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
Pesquisa instantânea no banco de dados local
=>
Adicione um novo canal ou playlist
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
=>
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
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
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
Vídeos favoritos e histórico de visualização
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
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
=>
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.
Não está no Google Play e não estará no futuro próximo (o Google proíbe aplicativos que ignoram a API e analisam seu site, incluindo a lista de permissões de canais mencionada ou o player NewPipe)
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:
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.
É 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:
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.
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:
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
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]”)
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.