Servidor de Mídia com 128 MB de RAM

Aqui, vamos nós nesse novo desafio, criar um servidor de mídia para ser acessado por vários dispositivos, como Xbox, PS3, celular, Laptop, TV, etc. Vamos fazer stream de vídeos, fotos e áudio na rede com um computador limitado a 128 MB de RAM, Pentium-3 850Mhz e 20 GB de HD.

[ Hits: 43.553 ]

Por: M4iir1c10 em 25/03/2014 | Blog: https://github.com/mauricioph


Configurações



Configurando Apache

O Apache é o servidor de páginas WEB que usaremos. Ele em si é leve, porém, se não for configurado bem em uma máquina com recursos limitados, ele pode dar dor de cabeça.

As "dores" mais comuns, são:
  • WSD (White Screen of Death) ou como é mais conhecido: "Falta de memória para o PHP".
  • MySQL falhando ao iniciar ou tendo o processo morto pelo sistema.
  • MySQL não consegue criar uma nova instância e retorna com o erro de Pthread 11. Por não conseguir criar uma nova instância o MySQL, decide abortar o pedido de acesso à base de dados.

Para evitar esse tipo de problema, vamos configurar o Apache mudando o arquivo /etc/Apache/conf/httpd.conf:

MaxSpareServers 5
MinSpareServers 1
StartServers 3

Caso você queira fazer mais ajustes, cheque esse documento:
Verdade, eu estou te indicando a leitura do manual do Apache. :)

Infelizmente, não há uma tradução em Português desse manual ainda (até aonde eu sei, não há, pode ser que alguém, em algum canto da Internet, já traduziu.)

Configurando o MySQL

MySQL é uma base de dados que cada vez cresce em números. Sites com tráfico pesado, como Facebook, YouTube, Google, Wikipedia, etc, usam a base de dados MySQL porque, em si, ela não é pesada. Porém, quando você usa scripts malfeitos ou websites "prontos", cheios de scripts e templates, como Joomla! e WordPress, o MySQL pode facilmente ter 10 chamadas à base de dados em uma só página que é carregada.

Vamos traduzir isso em MB: um RSS fazendo mais de 10 chamadas à base de dados vai produzir um documento de 35 KB, mas, para gerar esse simples documento, ele pode consumir 25 MB de RAM só em processamento de dados.

O que não é tão ruim, quando você tem um computador com bastante RAM. Agora, para o nosso experimento com 128 MB um RSS carregando 25% da memória, como fica o armazenamento para os outros programas? Então, vamos reduzir isso.

Esses parâmetros abaixo, são do meu /etc/mysql/my.cnf, se você quiser usar um exemplo já feito, pode encontrar na pasta /usr/share/doc/my-server-5.0/examples, no caso dos "filhos" do Debian. :)

Caso em sua distro não exista esses exemplos, copie o meu my.cnf:

[mysqld]
port      = 3306
socket     = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
skip-bdb
skip-innodb

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
#safe-updates
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

Foi adicionado o seguinte skip-bdb e skip-innodb, assim, você não carrega o suporte para BSD DB ou InnoDB. Já que ambos são águas passadas, obsoletos, velhos, desnecessários para o nosso projeto.

key_buffer tem somente 16 K, o que já é mais que suficiente. key_buffer é um dos parâmetros mais importantes para as tabelas MyISAM; seria bom deixar com 1 MB, se você quer fazer um blog ou algo parecido, o que não é o nosso caso, então, deixe com 16 K.

A mesma coisa para o table_cache - 4 e muito pequeno para outro tipo de aplicação. Uma página do WordPress vai chamar 10, facilmente; e muito mais no caso do Drupal ou MediaWiki. Nosso projeto não vai carregar nada parecido com esse tipo de website.

Depois destes simples ajustes, o seu MySQL deve estar rodando com uma velocidade boa e carregando a memória com menos dados. Se você fazer o teste com o RSS, puxando a informação do MySQL, em vez de carregar com 25 MB, agora você vai ver que ele vai carregar com 5~6MB. Deixando assim, mais espaço na RAM para as outras aplicações.

Configurando o MediaTomb

Vamos iniciar com o MySQL. Precisamos criar uma base de dados para o MediaTomb.

Assim, vamos digitar no terminal:

# mysql -u <usuario> -p
mysql> mysql -u root -p

mysql> CREATE DATABASE nome-da-base-de-dados;
 mysql> CREATE DATABASE mediatomb;

mysql> GRANT ALL ON <database name>.* TO '<user name>'@'<hostname>' IDENTIFIED BY '<password>';
 mysql> GRANT ALL ON mediatomb.* TO 'mediatomb'@'%' IDENTIFIED BY 'suasenha';

mysql> flush privileges;
 mysql> quit;

# mysql [-u <username>] [-p] <database name> < <install prefix>/share/mediatomb/mysql.sql
 mysql> mysql -u mediatomb -p mediatomb < /usr/share/mediatomb/mysql.sql
 [digite a senha do MediaTomb]


mysql> mysql -u mediatomb -p mediatomb
 [senha do MediaTomb, no meu exemplo "suasenha"]

mysql> show tables;

Se até aqui você não recebeu nenhuma mensagem de erro e o resultado desses comandos foram:

 mt_autoscan
 mt_cds_active_item
 mt_cds_object
 mt_internal_setting


Parabéns, você criou a base de dados para o MediaTomb no MySQL. Agora, vamos ativá-la no próprio MediaTomb.

Para sair do MySQL, digite:

mysql> quit;

Para ajustar a configuração, abra o seu editor ${diretório padrão da distro}/mediatomb/config.xml:

sudo nano /etc/mediatomb/config.xml

* Atenção: não copie e cole o código abaixo, leia o seu conf e ajuste como necessário. Vamos modificar onde existe e inserir onde não existe, os seguintes valores:

<protocolInfo extend="yes"/>
<ui enabled="yes" poll-interval="2" poll-when-idle="no" show-tooltips="yes"/>
<accounts enabled="yes" session-timeout="30"/>
<account user="name" password="password"/>
<storage caching="yes">
     <sqlite enabled="no">
        <mysql enabled="yes"/>
          <username>mediatomb</username>
          <password>suasenha</password>
          <database>mediatomb</database>
<ffmpegthumbnailer enabled="no">
<map from="avi" to="video/divx"/>
<map from="ogg" to="audio/ogg"/>
<lastfm enabled="no">
<virtual-layout type="disabled">
<extension-mimetype ignore-unknown="yes" case-sensitive="no">
<transcoding enabled="no">
<treat mimetype="audio/ogg" as="ogg"/>

Se tem algum outro parâmetro não mencionado aqui, deixe como está.

Pronto. Feita essas alterações, reinicie o MediaTomb:

sudo /etc/init.d/mediatomb restart

Tendo reiniciado com sucesso, abra o seu navegador em:

http://localhost:49152
Ou:
http://numero_do_ip:49152
Entre com o nome do usuário e a senha definidos no arquivo /etc/mediatomb/config.xml. Você deve, então, estar na tela inicial, vendo duas opções no lado esquerdo da página Database e File System na parte da database.

Não existe nada ainda, porque estaremos entrando os dados das pastas que o MediaTomb vai acessar. Clique em File System para acessar todo o sistema de arquivos do seu computador, navegue até a pasta que você quer compartilhar. No meu caso, eu tenho 2 HDs, um com vídeos e outro com fotos e músicas.

Eu vou então navegar até as pastas de vídeos que eu quero compartilhar e, ao selecionar a pasta no canto direito, eu vou ter dois sinais de soma (+), um normal e outro com duas setas, dando a ideia de um ciclo, clique nesse sinal com o ciclo.

Isso vai determinar que a pasta selecionada em um determinado tempo, será escaneada pelo MediaTomb em procura de novos arquivos. Se algum arquivo teve o nome modificado, o MediaTomb, automaticamente, vai mudar o nome na database para que você continue tendo acesso ao arquivo.

Em Scan Mode, selecione Timed, Inodify toma muito tempo e recursos do sistema. E Timed, vai determinar que, ao passar o intervalo determinado o escaneamento, será reiniciado. Para garantir que todas as pastas abaixo da pasta seleciona sejam escaneadas, selecione Scan Level como Full.

Assim, assumindo a seguinte estrutura, será automaticamente escaneada:

/Series/IT Crowd/Season 1/Episodio 1.mp4
/Series/IT Crowd/Season 2/Episodio 1.mp4

Nesse caso, selecionando Series, todas as pastas depois disso não precisam ser configuradas. Agora, se entre as séries você só quer compartilhar o Season 2 do IT Crowd, ao invés de selecionar Series, você deve navegar até Season 2 e aplicar ali a configuração.

Deixe o Recursive e Include hidden a seu critério. Eu aconselharia deixar o Recursive ligado e Hidden desligado.

Depois disso confira que as pastas foram escaneadas e agora estão disponíveis na opção Database no canto superior esquerdo.

Página anterior     Próxima página

Páginas do artigo
   1. A ideia
   2. O plano
   3. Instalando o sistema
   4. Configurações
   5. HD como dispositivo permanente
   6. Acesso aos arquivos
   7. Fazendo a manutenção
Outros artigos deste autor

Enfeite o LILO com uma imagem de seu gosto

Instalando Beryl no Windows XP

5 comandos que ninguém nunca deve executar no Linux

Proteja seu website ou página html com encriptaçâo

Instalando e configurando um dock igual ao Mac Leopard no KDE

Leitura recomendada

EasyBCD - Corrigindo boot do Ubuntu 12.04 em HD USB no Sony VAIO

coLinux - Linux dentro do Windows

Servidor de impressão + scanner (multifuncional) em Linux

Configurando o CACIC (parte 1)

Configuração da impressora HP Deskjet 3650

  
Comentários
[1] Comentário enviado por mattos_gru em 21/03/2014 - 01:57h

Grande Mauricio!

Ótimo artigo. À medida em que lia, já esquematizava minha instalação aqui.

Grato pela ideia, vou poder guardar as pilhas de cds e dvds (acho até que vou digitalizar alguns VHSs familiares).

Só não tenho um Nobo/Lap "Véio".

Mesmo assim vou montar numa VB e depois que arrumar
um hardware (Lap ou Desk) passo para ele.

Vou seguir os mesmos passos usando o Debian.

Dica para o config do Apache (roda assim em 2 servers de produção):

MaxSpareServers 3
MinSpareServers 1
StartServers 1

Essa config atende um escritório com 8 estações.

Quanto aos aplicativos clientes pretendo utilizar tambem o Audacious e o Kaffeine.

Acredito que voce tenha despendido de 2 a 3 semanas de tempo no seu projeto.

Na medida em que o tempo me permitir passarei os resultados, penso que demorarei uma ou duas semanas.

Abraço

[2] Comentário enviado por m4iir1c10 em 21/03/2014 - 05:33h


[1] Comentário enviado por mattos_gru em 21/03/2014 - 01:57h:

Grande Mauricio!

Ótimo artigo. À medida em que lia, já esquematizava minha instalação aqui.

Grato pela ideia, vou poder guardar as pilhas de cds e dvds (acho até que vou digitalizar alguns VHSs familiares).

Só não tenho um Nobo/Lap "Véio".

Mesmo assim vou montar numa VB e depois que arrumar
um hardware (Lap ou Desk) passo para ele.

Vou seguir os mesmos passos usando o Debian.

Dica para o config do Apache (roda assim em 2 servers de produção):

MaxSpareServers 3
MinSpareServers 1
StartServers 1

Essa config atende um escritório com 8 estações.

Quanto aos aplicativos clientes pretendo utilizar tambem o Audacious e o Kaffeine.

Acredito que voce tenha despendido de 2 a 3 semanas de tempo no seu projeto.

Na medida em que o tempo me permitir passarei os resultados, penso que demorarei uma ou duas semanas.

Abraço


Ola Cleber,

Que bom que voce gostou do artigo, agora que voce vai digitalizar sua colecao leia esse meu outro artigo que vai te ajudar ainda mais http://vivaolinux.com.br/artigo/Criando-video-com-caracteristicas-de-DVD

Eu usei o exemplo do laptop porque esse foi oque a minha esposa tinha guardado por muitos anos, porem o melhor e usando um desktop, porque a torre te proporciona o espaco nescessario para a intalacao de mais HDs e evita as instrucoes que eu dei com relacao ao HD permanente no usb. Se voce coloca dentro da torre o Linux vai automaticamente reconhecer como HD permanente.

Obrigado pela dica de conf do apache, sua contribuicao e muito bem vinda.

Eu levei bem mais que 3 semanas para desenvolver esse artigo, para fazer o servidor rodar pela primeira vez levou 2 dias e eu ja estava fazendo streaming dos meus arquivos... oque demorrou mais foi aprender com os meus erros, fazer o HD permanente foi o primeiro obstaculo, toda vez que o computador desligava eu tinha problemas porque os sistema montava o hd em pastas diferentes e assim eu perdia tudo na database... so que com o passar do tempo pude rever oque estava errado e produzir esse artigo... mais uma revelacao dos bastidores, eu deixei esse artigo em construcao por mais de um ano antes de publicar, porque eu queria ter certeza que qualquer pessoa que fazer oque eu fiz nao teria que passar pelos problemas que eu passei e tambem se alguem passar por algo que seja simples porem nao seja do seu conhecimento eu tenho um pouco de esperiencia para poder resolver o problema :)

[Desculpe a falta de acento, os teclados aqui nao possuem acentos :) ]

[3] Comentário enviado por mattos_gru em 21/03/2014 - 18:55h

De volta Mauricio!

Consegui no escritohrio de um cliente/amigo uma CPU P4 HT com 512 MB de RAM. Agorah estou a cahssa de uma HD IDE que tenho por aquih - ou seria Sata?!, naum me recordo.

Diversaum garantida para o fim de semana.

Quanto ah acentuasaum, naum se preocupe, o importante eh que nohs possamos nos entender (aprendih a escrever desta forma com meu filho, ateh hoje troco msgs com ele assim).

Brincadeiras à parte - os teclados aqui estão com acentuação - utilizo um mini-wireless, comprado por aí nas terras altas e frias, com layout Alemão QWERTZ, mas até que já me adaptei à ele - grato pelo artigo de criação de DVDs, muito útil.

Bem, vou encomendar duas redondas e umas seis latinhas (acho melhor doze), a madrugada vaí ser lonnnnga!

Bom final de semana!

[4] Comentário enviado por thiagocantero em 21/03/2014 - 21:09h

Parabéns pelo artigo!
Fantástico!
Muito bem detalhado e explicado!Gostei até mesmo das partes com humor que você inseriu no texto!Ficou bem legal mesmo!
Fico feliz em ver artigos sempre úteis e utilizando por vezes materiais até mesmos "simplistas", costumo comentar com amigos que nós subutilizamos a tecnologia de uma forma geral, trocando computadores, celulares e smartphones como se fossem roupa e por vezes eles ainda são úteis e muito úteis por sinal!
Mais uma vez parabéns pelo exposto!
Deus te abençoe!

Abraços

Thiago Cantero Mari Monteiro

[5] Comentário enviado por maran em 22/03/2014 - 11:35h

Parabéns , sensacional este artigo.

[6] Comentário enviado por edsonpira em 26/03/2014 - 23:27h

Amigo...excelente artigo....não só da ideia, mas como foi escrito...eh um best seller....

Tenho um vaio com athon que esta capenga...lá no fundo do armário (e esposa querendo a reciclagem dele no arquivo morto - vulgo lixo)...bom já achei um motivo para ressuscita-lo....

Tenho um TL-MR3420 com OpenWRT e midiabox, funciona legal (TV, Tablet, note, Smartphone, mas é bom dar uma função nova para os novos velhinhos equipamentos...

Valew

[7] Comentário enviado por fabregas em 27/03/2014 - 21:14h

Cara quando eu vou iniciar o mediatomb com o /init.d ele sempre falha. Você sabe o que pode ser? Fiz tudo certinho de acordo com o tutorial que você fez no arquivo config.xml. A unica coisa que deve ser feita e isso ne? pesquisei na pasta so tem esse arquivo.

[8] Comentário enviado por mattos_gru em 28/03/2014 - 15:28h

Olá Mauricio,

novamente por aqui!

Bem, minhas experiências com a Box P4, infelizmente, ainda não resultaram - de bom só estavam a pizza e as cervejas.

A despeito da CPU P4 3.0Ghz disponibilizar HT, a MoBo não o faz e tambem as portas USB são 1.1, o que resultou em baixíssimo throughput.

Alem disso, fui obrigado a usar um HD Ide - o que tambem não resultou em grande coisa para dow/up stream.

A MoBo tem Sata onboard, mas trata-se de Sata I e, o HD ao qual eu estava à "caça" - finalmente achei-o no fundo de um armário - é um Sata II que a MoBo/Bios não querem reconhecer - no case externo roda perfeito.

Bem, vou "inventar" algo e à medida que houver algo de concreto, posto aquí.

Nice weekend,

Mattos

[9] Comentário enviado por removido em 31/03/2014 - 15:10h

Excelente artigo.

Mas eu adotaria um outro método mais simples:

1. Instalar o Ubuntu Minimal (somente com aquilo que será usado, desta forma economizando muita memória e processamento).
2. Instalar o MediaTomb.

O próprio MediaTomb possui uma interface de configuração que pode ser acessada pela rede, assim não é necessário instalar o Apache e o Webmin. Acredito que se o objetivo é apenas executar um servidor DLNA, não há a necessidade de instalar outros serviços. Isto vai poupar e muito a memória RAM da máquina, e ela vai ser mais rápida no final das contas.


[10] Comentário enviado por m4iir1c10 em 03/04/2014 - 04:52h


[7] Comentário enviado por fabregas em 27/03/2014 - 21:14h:

Cara quando eu vou iniciar o mediatomb com o /init.d ele sempre falha. Você sabe o que pode ser? Fiz tudo certinho de acordo com o tutorial que você fez no arquivo config.xml. A unica coisa que deve ser feita e isso ne? pesquisei na pasta so tem esse arquivo.


Qual e a mensagem que voce recebe ao iniciar o servico?

[11] Comentário enviado por m4iir1c10 em 03/04/2014 - 04:56h


[8] Comentário enviado por mattos_gru em 28/03/2014 - 15:28h:

Olá Mauricio,

novamente por aqui!

Bem, minhas experiências com a Box P4, infelizmente, ainda não resultaram - de bom só estavam a pizza e as cervejas.

A despeito da CPU P4 3.0Ghz disponibilizar HT, a MoBo não o faz e tambem as portas USB são 1.1, o que resultou em baixíssimo throughput.

Alem disso, fui obrigado a usar um HD Ide - o que tambem não resultou em grande coisa para dow/up stream.

A MoBo tem Sata onboard, mas trata-se de Sata I e, o HD ao qual eu estava à "caça" - finalmente achei-o no fundo de um armário - é um Sata II que a MoBo/Bios não querem reconhecer - no case externo roda perfeito.

Bem, vou "inventar" algo e à medida que houver algo de concreto, posto aquí.

Nice weekend,

Mattos


Talvez nao esta reconhecendo por causa de alguma limitacao imposta na BIOS, checa a configuracao, mais por favor so mude se voce tem nocao doque esta fazendo... antes de mexer na BIOS lembre das sabias palavras do tio Ben para Peter Parker "Com grandes poderes, vem grandes resposabilidades" :)

[12] Comentário enviado por m4iir1c10 em 03/04/2014 - 05:07h


[9] Comentário enviado por bilufe em 31/03/2014 - 15:10h:

Excelente artigo.

Mas eu adotaria um outro método mais simples:

1. Instalar o Ubuntu Minimal (somente com aquilo que será usado, desta forma economizando muita memória e processamento).
2. Instalar o MediaTomb.

O próprio MediaTomb possui uma interface de configuração que pode ser acessada pela rede, assim não é necessário instalar o Apache e o Webmin. Acredito que se o objetivo é apenas executar um servidor DLNA, não há a necessidade de instalar outros serviços. Isto vai poupar e muito a memória RAM da máquina, e ela vai ser mais rápida no final das contas.



Obrigado pela sua contribuicao, realmente faz sentido usar somente o MediaTomb ja que oque nos interessa e o servico de DLNA. Porem existe razoes pela qual eu instrui instalar o apache e o Webmin...

Webmin Executar comandos de manutencao, configuracao e reparo de forma simples sem ter que memorizar comandos ( Isso ajuda em muito os novatos que nao sabem ou nao gostam de usar o terminal )

Apache A razao pela qual eu indiquei o apache e por causa da vasta gama de opcoes voce tem ao usar o servico de http, por exemplo digamos que o usuario so tem o vlc e a colecao de midia da pessoa e enorme... usando o DLNA no VLC e muito lento agora se a pessoa configura o HD como um servidor http e a pessoa sabe a estrutura das pastas e onde encontrar a midia a unica coisa que a pessoa deve fazer e abrir um stream apontando para o ip da maquina e o caminho do video ou da musica.

Por exemplo no meu caso que quero assistir o classico Akira eu abro o vlc tanto no computador como no celular e abro a seguinte url
http://192.168.39.117/videos/Movies/Animations/Akira.avi

Outra boa funcionalidade do apache e para a manutencao do mysql usando o phpmyadmin.
eu tambem tenho uma interface web que uso para armazenamento do meu catalogo de videos.

Infelizmente eu percebi que estava demorando muito para produzir o artigo e para nao ficar muito longo eu resolvi resumir e acabei deixando algumas lacunas no meu artigo... mais da para rodar bem com todos os servicos que eu descrevi e eu consegui rodar videos em todos os meus dispositivos de uma so vez sem enroscar o stream...

[13] Comentário enviado por devauxcl em 09/04/2014 - 16:37h

Excelente tutorial, gostei muito!
Agora dá pra esquecer os dvds à vontade!

[14] Comentário enviado por Carlos_Cunha em 10/04/2014 - 21:22h

Amigo uma duvida, ele faz Streming ou seja o procesamento e nele? Peço isso por possuo um Xbox porém ele não reconhece legendas e muitos formato,etão uso o PLEX(media server também) para processar o video e rodar na televisão via xbox. Ou aqui ele so libera um compartilhamento via DLAN( ou outro).
Abraço

[15] Comentário enviado por m4iir1c10 em 11/04/2014 - 05:01h


[14] Comentário enviado por PretooOO em 10/04/2014 - 21:22h:

Amigo uma duvida, ele faz Streming ou seja o procesamento e nele? Peço isso por possuo um Xbox porém ele não reconhece legendas e muitos formato,etão uso o PLEX(media server também) para processar o video e rodar na televisão via xbox. Ou aqui ele so libera um compartilhamento via DLAN( ou outro).
Abraço


Da maneira a qual eu ensino a configuracao aqui ele so esta liberando o acesso ao protocolo DNLA e servindo a localizacao da midia, porem ele pode tambem fazer o processamento de conversao ele possui suporte para comandos de conversao no qual ele vai usar a entrada de comandos direto no xml de configuracao dele. Se voce quizer experimentar veja esse link http://mediatomb.cc/dokuwiki/transcoding:transcoding

Outra coisa que voce pode fazer se estiver usando o XBMC e carregar a legenda direto do site opensubtitles.org na tela.

Entre em Settings -> Video -> Subtitles
Selecione o idioma e no servico padrao de legendas escolha o padrao ou baixe mais clicando em "buscar mais" (Get more).

Se voce escolher um servico que pode ser ajustado os ajustes sao feitos aqui:
Settings -> Add-ons -> Enabled Add-ons -> Subtitles -> select the service add-on -> Configure

Essa configuracao e para o XBMC e nao o software original do Xbox.

[16] Comentário enviado por marbreu em 30/06/2014 - 21:16h

Cara D+ este artigo parabéns...

[17] Comentário enviado por JJSantos em 12/10/2014 - 20:45h

Muito bom seu artigo.
Parabéns!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts