Bom dia, Habr.
Decidi compartilhar uma das maneiras pelas quais você pode assistir seus filmes / séries favoritos em alta qualidade sem visitar sites idiotas que desejam que você jogue no cassino.
Farei uma reserva imediatamente. Em nenhum caso, exorto você a usar conteúdo pirata. Pirataria é má. Sempre compre conteúdo licenciado.
Bem, para quem deseja assistir ao torrent, que não é protegido por direitos autorais, em sua TV inteligente, sem esperar o download, abaixo é uma maneira interessante.
Eu tenho uma TV inteligente Samsung na qual tentei assistir a um filme de maneiras diferentes.
Eu tentei instalar o minidlna no Ubuntu. Até algum tempo funcionou de maneira bastante conveniente, mas um dia o aplicativo na TV começou a sair periodicamente. Ainda não descobri com o que isso está conectado, alguma atualização malsucedida pode ter chegado. De qualquer forma, era possível assistir apenas ao conteúdo totalmente baixado, o que não era muito interessante.
Tentei, à moda antiga, fazer upload de filmes para um disco rígido externo e conectá-lo a uma TV. Depois de algumas vezes, isso me incomodou.
Como resultado, durante muito tempo eu apenas olhei através do navegador incorporado na TV. Depois de algum tempo, esse método também ficou terrivelmente ruim.
Queria algo conveniente e simples, para não esperar imediatamente até que todo o conteúdo fosse carregado.
Você diz que existe um Chromecast. Mas eu queria fazer tudo sem dispositivos extras na minha casa.
Como se viu, o navegador interno (diferente do Chrome para desktop) suporta o HLS. Bem, por que não pegamos o fluxo hls no laptop e assistimos pelo navegador.
E então vamos lá.
1. Colocamos um cliente de torrent
Existe um pacote npm muito legal chamado torrent. Tudo ficaria bem, mas ele não sabe como selecionar um arquivo e lista para download e limitar a velocidade do download. Isso é muito importante. Mas é minimalista, pega festas muito rapidamente e sacode perfeitamente no modo seqüencial, que é o que precisamos.
Eu tive que vasculhar as tripas e adicionar a funcionalidade necessária. E então colocamos torrent de um garfo
npm install 'https://github.com/zim32/torrent.git#master' -g
Faça o download de um arquivo torrent ou um link magnético.
Para obter uma lista de arquivos, você precisa executar o comando info
torrent info some.torrent | less
Encontre o nome do arquivo que precisamos (não o caminho) e execute o comando
torrent some.torrent --select 'FILE_NAME' --downloadLimit 1000000
Se tudo estiver bem, você verá estatísticas de download, número de pares, etc. Os arquivos serão adicionados ao diretório atual. Limite de velocidade em Byte / s.
A restrição é necessária, porque, no meu caso, o torrent obstrui todo o canal, o roteador fica ruim e outros freios ocorrem entre o laptop e a TV inteligente. O principal é que a velocidade seja maior que a taxa de bits do fluxo, caso contrário haverá cargas e buffer.
Fazendo o fluxo HLS
Instale o ffmpeg. No meu caso, tudo funcionou com o ffmpeg usual do repositório.
apt install ffmpeg
Criamos um diretório público para onde nosso fluxo irá.
Além disso, várias opções são possíveis. Se no arquivo de origem o vídeo estiver no formato h264 e o áudio for AAC, tente não transcodificar o fluxo. Nesse caso, execute o fluxo dessa maneira
ffmpeg -re -i 'torrent_dir/movie.mkv' -codec copy -map 0:0 -map 0:1 -map_chapters -1 -movflags default_base_moof+frag_keyframe -f hls -hls_playlist_type event ~/www/player/out.m3u8
Se os codecs forem diferentes, você terá que transcodificar em tempo real. No meu laptop, o ffmpeg acompanhou o fluxo.
ffmpeg -re -i 'torrent_dir/movie.avi' -c:v libx264 -preset slow -r 24 -x264opts fps=24:bitrate=2000:pass=1:vbv-maxrate=4000:vbv-bufsize=8000:keyint=24:min-keyint=24:scenecut=0:no-scenecut -c:a aac -b:a 256k -map 0:0 -map 0:1 -map_chapters -1 -movflags default_base_moof+frag_keyframe -f hls -hls_playlist_type event ~/www/player/out.m3u8
Com as opções -map 0: 0 e -map 0: 1, vibramos os canais desejados. Faixa de vídeo e russo. A opção -map_chapters -1 remove todo o lixo por precaução, na forma de informações do capítulo, etc.
Você pode assistir aos canais disponíveis com o comando ffprobe movie.mkv
Crie um servidor
Na mesma pasta para onde o fluxo vai, você precisa colocar o arquivo index.html com o seguinte conteúdo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <video src="out.m3u8" controls></video> </body> </html>
Instale um servidor http simples.
npm i http-server -g
Iniciamos o servidor
http-server -a 0.0.0.0 -c-1
Assistindo a um filme
Agora, na TV, basta abrir um navegador com o endereço do seu laptop, por exemplo,
192.168.1.200 : 8080 e aproveitar.
Obrigado a todos pela atenção.