Manual

do

Maker

.

com

Servidor de midia com Raspberry, MiniDLNA, ChromeCast e BubbleUPnP

Servidor de midia com Raspberry, MiniDLNA, ChromeCast e BubbleUPnP

Há algum tempo eu escrevi um artigo sobre servidor de mídia com Raspberry usando Rygel (veja esse artigo). Agora vou discorrer sobre algo um pouquinho diferente, que é pra quem tem o Google Chromecast.

Eu tinha aqui uma coleção de DVDs da Pantera cor-de-rosa que minha filha ama, mas eu não queria ligar o arcaico blue-ray para assistí-lo, afinal, estamos na era digital, não é mesmo? Bem, saindo do Google Play e do Netflix, como eu poderia reproduzir meu próprio conteúdo no Chromecast? Daí pesquisei um bocadinho e cheguei a essa solução.

Preparando as midias a serem tocadas

Eu primeiramente extrai em um notebook mais antigo (que ainda possui leitor de DVD) o conteúdo dos DVD em forma de capítulo. Para isso, instale em seu Windows algum programa para fazer a extração ou, caso seja um feliz usuário de Linux como eu, utilize o programa dvd-rip. Instale-o via apt, caso já não o tenha instalado:

sudo apt-get install dvdrip dvdrip-utils

Crie um projeto e extraia o conteúdo. Suponhamos que você tenha 4 DVDs da Pantera cor-de-rosa também. Eu chamei o projeto de "Pantera_cor-de-rosa-DVD1" para o DVD1. Só que todos os capítulos extraídos ficaram com o mesmo nome, em diretórios diferentes, no formato vob. Depois de extrair, fiz uma série de manipulações:

Converter os arquivos vob para mp4

Eu utilizo o ffmpeg que costumo compilar os fontes para habilitar as coisas do jeito que eu gosto, mas acredito que você deve conseguir utilizar a contento instalando dos repositórios mesmo:

sudo apt-get install ffmpeg

Algumas distribuições não tem o ffmpeg nos repositórios. Por causa da treta no projeto, tem um fork que é o libav onde você terá avconv invés de ffmpeg e avplay invés de ffplay. Para instalar;

sudo apt-get install libav-tools

As flags são as mesmas até onde pude testar. Depois, os arquivos estarão esparramados em uma estrutura de diretórios da extração e você precisará encontrá-los e convertê-los. Para isso, da forma mais simples (tem um quatrilhão de maneiras de fazer em shell, não critique, adote sua solução), entre no diretório raiz (dvdrip-data) e execute:

find . -name *vob|while read line; do echo "ffmpeg -i $line -acodec libmp3lame -ac 2  $(echo $line|sed -re 's/vob$/mp4/')" >>arquivos.sh;done

Ao final será criado um arquivo.sh que você deve editar e colocar na primeira linha:

#!/bin/bash

O conteúdo abaixo dessa linha deve estar parecido com isso:

ffmpeg -i ./Pantera_cor_de_rosa-dvd4/vob/017/Pantera_cor_de_rosa-dvd4-001.vob -acodec libmp3lame -ac 2  ./Pantera_cor_de_rosa-dvd4/vob/017/Pantera_cor_de_rosa-dvd4-001.mp4
ffmpeg -i ./Pantera_cor_de_rosa-dvd4/vob/023/Pantera_cor_de_rosa-dvd4-001.vob -acodec libmp3lame -ac 2  ./Pantera_cor_de_rosa-dvd4/vob/023/Pantera_cor_de_rosa-dvd4-001.mp4
...

Agora execute esse arquivo e tenha paciência porque demora um bocado:

chmod 750 arquivo.sh && ./arquivo.sh
Testar o arquivo convertido

Quando terminar, confirme a existência dos arquivos mp4:

find . -name *.mp4

E então reproduza um para teste:

ffplay ./Pantera_cor_de_rosa-dvd4/vob/023/Pantera_cor_de_rosa-dvd4-001.mp4

Ou "avplay", caso esteja utilizando a libav. Reproduziu? Ótimo, agora você pode apagar os arquivos .vob

Apagar os arquivos vob

Esses arquivos não são mais necessários, então você pode removê-los facilmente (de maneira irreversível) com um comando só:

cd dvdrip-data && find . -name *.vob -exec rm -f {} \;
Renomear os arquivos

É uma droga ter todos os arquivos com o mesmo nome, seria interessante ao menos tê-los numerados já que não dá pra nomear por capítulo. Nesse caso, tem um comando simples:

numero=0&&find . -name *mp4|while read line; do mv $line $(echo $line|sed -re "s/\.mp4/-$numero\.mp4/");numero=$[$numero+1];done

Agora já tem pelo menos um identificador, mas se o nome estiver muito cumprido, é capaz que não seja possível lê-lo na hora da exibição. Nesse caso, renomear uma parte maior ou o arquivo inteiro é uma opção. Por exemplo:

numero=0&&find . -name *mp4|while read line; do echo mv $line $(echo $line|sed -re "s/(.*)/Pink_Panther-$numero.mp4/");numero=$[$numero+1];done

Aí fica a seu critério.

Copiando para uma midia externa

Você vai precisar colocar em um pendrive ou um HD externo para conectá-lo ao Raspberry para que possa ser reproduzido. Faça a cópia como desejar e acesse a mídia no Raspberry. Supondo que você sempre terá esse dispositivo conectado via USB ao Raspberry, o primeiro passo é descobrir como esse dispositivo foi (ou será) identificado. O primeiro comando é o "dmesg", que ao término deverá exibir o dispositivo conectado a ele. Eu normalmente deixo habilitado o messages no sistema. nesse caso é só executar o comando:

tail -f /var/log/messages

e ficar de olho na saída enquanto conecta o dispositivo à porta USB. tendo sido identificado, disponibilize-o no sistema:

sudo su
mkdir /media/videos
chmod 0777 /media/videos
chown pi.pi /media/videos
mount /dev/sdXx /media/videos -o user,rw,exec

Para montar automaticamente a cada boot, edite o arquivo /etc/fstab e inclua-o:

/dev/sdXx /media/videos ext4 defaults,user,exec,rw 0 0

Nessa linha usei ext4 como exemplo, mas substitua pelo sistema de arquivos da sua midia. Se você montou manualmente mas não sabe qual é o sistema de arquivos, digite:

mount

E procure pelo mount point para saber qual o sistema de arquivos. Também utilize sdXx, que deve ser substituido pelo dispositivo real, algo como sda1. Terminada a preparação da midia, agora vamos ao serviço do sistema.

MiniDLNA

Primeiramente, utilize o apt para instalar esse servidor de midia. Simplesmente faça:

sudo apt-get install minidlna

Após instalado, a configuração é bastante simples. Entre em /etc e edite o arquivo de configuração.

sudo vi /etc/minidlna.conf

Se você não sabe utilizar o vi ou o vim, use seu editor preferido. Comente a linha padrão "media_dir=/var/lib/minidlna". Agora você só precisa adicionar 2 parâmetros a esse arquivo; um nome amigável na rede e um diretório de midia. Como criamos no Raspberry o diretório de videos em /media/videos, devemos adicionar nesse arquivo uma linha assim:

media_dir=V,/media/videos

A letra "V" na frente indica que é video. Poderia ser um container padrão (.) , um diretório navegável (B), música (M) ou fotos (P). O nome amigável fica nesse formato abaixo.

friendly_name=DobitAoByte

Para fazer o controle, sugiro que esteja como root (digitando 'sudo su') e faça o scan e o reinicio do serviço:

sudo su
minidlna -R
service minidlna restart

Isso precisa ser feito toda a vez que você modificar algum dado no repositório de midia.

 BubbleUPnP

buble.webp

Baixe o programa no PlayStore através desse link. Quando você clicar em instalar, você deverá indicar para qual de seus dispositivos o programa será enviado e instalado, não precisa abrir esse link diretamente no Android, fique tranquilo. Após instalá-lo, abra-o e repare que no canto superior esquerdo tem um menu de acesso onde você encontrará seu Chromecast (no meu caso se chama KGB) e logo mais abaixo está o nome do dispositivo que está servindo midia (no caso, fiz em um notebook para esse artigo e se chama SonyVaioServer, que é o nome amigável colocado em /etc/minidlna.conf). Agora basta que você abra o menu de videos, monte sua lista e se divirta tocando-o em sua TV!

O aplicativo tem uma limitação de 16 arquivos na playlist e mais algumas limitações que podem ser removidas com uma licença que na data desse post custa R$11,00. Garanto que vale a pena.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.