%20tem%20algum%20limite%20de%20largura%20de%20banda%20padr%C3%A3o%3F.png)
Estou executando o Apache em um servidor em nuvem (servidor Windows 2008 R2 em VMware, 1 Gbps de BW http://95.110.164.61
). Estou transmitindo muitos fluxos de transporte DVB MPEG ao vivo, pré-compactados em loop, (não flash) gerados pelo VLC na porta 640xx e, em seguida, com proxy reverso pelo Apache na porta 80.
O firewall do servidor está aberto para VLC e Apache em todas as portas.
Acima de 1,5 Mbps a reprodução é afetada pelo stop & go contínuo. Observe que se você solicitar um fluxo gerado pelo VLC diretamente, http://95.110.164.61:64087/mpg2_6.4
você verá um fluxo correto, enquanto se solicitar, http://95.110.164.61/mpg2_6.4
não.
Eu sei que o Flash Streaming Server usa Apache para transmitir na porta 80 (e funciona). Não sou especialista em Apache, alguém pode me dizer se é necessário algum módulo "especial" para aumentar a largura de banda?
Responder1
O Apache não tem nenhuma limitação de taxa ou largura de banda por padrão. Na verdade, apenas módulos externos fornecem essa funcionalidade, então você teria que fazer um esforço especial para habilitá-la.
Por padrão, o Apache usará o máximo de largura de banda possível.
Responder2
Ainda Igino Manfre' está escrevendo (por favor não se esqueça, sou um novato em Apache).
Talvez não deva ser descrito como limite de largura de banda, mas o resultado final é o mesmo: se o Apache não estiver configurado corretamente, ele não será capaz de enviar informações suficientes pela web.
Esta atividade no Windows é realizada pelos módulos multithreading do Apache (os únicos disponíveis no Windows, oficialmente chamados de Multi Processing Module, mas frequentemente chamados de "Workers") que, em qualquer caso, requerem configuração. Quando o Apache é executado no Windows, você encontra apenas dois processos "httpd", um filho do outro. O processo filho ativa todos os threads necessários pela conexão. Na documentação do Apache descobri que é necessária uma seção específica para qualquer sistema operacional que possa ser copiada de extra\httpd-mpm.conf e colada em httpd.conf. A seção padrão do Windows contém apenas duas linhas dentro do rótulo "IfModule mpm_winnt_module" para gerenciar o multithreading.
ThreadsPerChild: número constante de threads de trabalho no processo do servidor (conjunto 150)
MaxRequestsPerChild: número máximo de solicitações que um processo do servidor atende (definir 0, automático)
Mas, neste caso, não é um problema de eficiência de software (portanto, de threading), mas provavelmente de buffer de rede. Encontrei na enorme documentação do Apache a existência do parâmetro SendBufferSize (para ser adicionado ao httpd.conf). Aumenta o tamanho do buffer de envio TCP, útil para compensar conexões de alta latência com RTT em mais de 100 ms (como em uma conexão ADSL doméstica normal). Por padrão ou quando for 0, o servidor usará o sistema operacional padrão.
EnviarBufferSize 1000000
Decidi colocá-lo em 1.000.000 (1 MB), o que pode parecer um número grande, mas tenho visto o uso desses valores altos.
BEM, FUNCIONA! Abrindo o stream com o player VLC, agora o Apache transmite 6,4 Mbps como era feito pelo VLC. Isso significa que o gargalo foi removido. Pelo método científico, testei que comentando esse parâmetro, o streaming sofre novamente de stop and go.
Em qualquer caso, para ver o stream corretamente você precisa ter uma largura de banda de conexão suficientemente maior do que a necessária para reproduzir esse stream (digamos, pelo menos 30%), então para ver os 6,4 Mbps você precisa de pelo menos 8 Mbps.
Espero que essas linhas ajudem outra pessoa.
Outra ressalva: introduzindo os vídeos em uma página web e desejando utilizar o plug-in VLC, também é necessário configurar o parâmetro de cache de rede do plug-in VLC, ou a reprodução ainda será afetada pelo stop and go. Parece que consertar o cache de rede = 1000 (ms), conforme definido por padrão no player VLC, é suficiente. A documentação – como sempre – nunca é suficiente.
Tchau, Igino