Tudo começou quando, usando-me, usando o OBS Studio e algum tipo de programa para animar papéis de parede da área de trabalho, criei um logotipo em vídeo a partir do logotipo (que também era animado sob a música atual). Naquele momento, percebi que o OBS Studio pode MUITO mais do que apenas transmitir jogos. Depois de conhecer melhor o OBS Studio, ela afirma ser o programa mais legal que eu já conheci .
Eu tive que transmitir um pequeno evento para os amigos, mas como tenho o equipamento para obter um bom som e o desejo de ser legal, fiquei intrigado com a organização do fluxo com um som separado e várias câmeras. Por várias razões, o fluxo acabou sendo mais ou menos assim, mas depois dessa experiência, pareço imaginar como deveria ser. E eu quero compartilhar. Aqui.

O que?
A idéia é encontrar 2-3 operadoras sem fio que vão a diferentes locais do evento, se comunicam com as pessoas, descolam o tráfego etc. (bem, como caras sérios, em suma). E alguém senta, se comunica com eles no walkie-talkie e se forma a partir de tudo isso (e mais alguma coisa, por exemplo, qualquer tipo de janela / monitores / projetor) que é um conteúdo interessante de vídeo que não é chato de assistir.
Você também pode combinar as telas de vários computadores em um fluxo, talvez isso possa ser útil para jogos. Embora provavelmente existam outras tecnologias especificamente para esta tarefa.
Porque
Porque ele permite que você seja muito legal e mude bastante o teto tecnológico da qualidade do fluxo quase por nada.
Ao usar vários fluxos de vídeo, a frescura do fluxo será determinada pelo componente criativo e organizacional (bem e pela qualidade das conexões).
O que?
- Computador portátil
1.1 Obs studio
1.2 nginx com módulo rtmp - Operadores com seus smartphones
2.1 Algum tipo de aplicativo que emite a solicitação "stream rtmp", por exemplo, Larix Broadcaster ou (se houver um pouco de dinheiro extra) Ace Live Streaming ou BitStream - Wi-Fi estável, de preferência 5GHz
- Ligação estável
Se você tiver mais alguma coisa, poderá fazer um bom som, pelo menos em câmeras estacionárias (que podem ser qualquer rede de alta qualidade).
E se houver outro computador Linux (eles dizem que até o Raspberry Pi é aceitável para ≤3 fluxos), você pode descarregar um pouco o computador principal e sua rede para processar e enviar o fluxo.
Como
O protocolo reconhecido para transmissão de vídeo é RTMP . Tentar usar outra coisa leva a lags selvagens, esse foi o meu principal erro.
Para ser justo, vale a pena notar a tecnologia proprietária NewTek NDI (obrigado, Alexsey ), que parece ser mais legal que o RTMP. No entanto, para o nosso caso de usuário, o uso do NDI exigirá muito dinheiro extra.
Acontece que aceitar um fluxo RTMP e redirecioná-lo para o OBS Studio é tão fácil quanto descascar peras. Você só precisa compilar o nginx com um módulo personalizado e escrever uma configuração. Mas mais sobre isso mais tarde.
De uma maneira boa, você precisa fazer algo assim:

Ou seja, não forneça aos telefones celulares a Internet para que eles não gastem recursos em nada além de um fluxo.
Mas se já existe um bom Wi-Fi com a Internet (e não há ponto de acesso extra a 5 GHz), você não pode desdenhar e usar as conexões existentes. No entanto, ainda é desejável enviar o fluxo final de outra conexão ou, em casos extremos, do mesmo, mas através de um fio.
Se houver necessidade de receber fluxos de câmeras e enviar o fluxo final pelo mesmo wifi, teste cuidadosamente a estabilidade (e observe que ela diminuirá bastante se vários dispositivos pularem nesse wifi).
Como aumentar o servidor RTMP?
É melhor fazer isso no Linux, para não ter problemas com todos os tipos de MINGW / MSYS. E em um hardware separado (não necessariamente poderoso). Ou na janela de encaixe, você pode pular esta seção, porque o arquivo de encaixe já existe . Por meio da WSL também é possível, mas será necessário encaminhar manualmente a porta TCP 1935 no firewall.
Aqui está um ótimo manual Como configurar seu próprio servidor RTMP privado usando o nginx , e também está escrito no dock . Uma breve recontagem do estilo livre:
Colocamos as dependências:
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev
Baixe a versão Mainline mais recente da fonte aqui :
wget http://nginx.org/download/nginx-1.15.2.tar.gz
Faça o download da versão mais recente do módulo RTMP :
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip -O rtmp-module.zip unzip !$ -d .
Crie um Makefile:
./configure --with-http_ssl_module --add-module=./nginx-rtmp-module-master
Se você cair antes de chegar ao Configuration summary
da Configuration summary
, corrigimos os problemas.
Este comando irá configurar o seu streamer nginx para viver em /usr/local/nginx/
e executar com o comando sudo /usr/local/nginx/sbin/nginx
. Portanto, o nginx do repositório não sente nada. Isso pode ser alterado examinando ./configure --help
.
Nós compilamos:
make -j4
Instalar:
echo "nginx with RTMP module" > description-pak sudo checkinstall --pkgname nginx-rtmp --provides nginx --nodoc --deldesc -y sudo mkdir /usr/local/nginx/logs/ # Doesn't start without it
Em princípio, o uso de make install
neste caso é seguro, mas ainda não é necessário .
Verifique
$ /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.15.2
Personalizar
sudo vim /usr/local/nginx/conf/nginx.conf
No final, adicione a configuração do servidor RTMP:
rtmp { server { listen 1935; application live { live on; record off; } } }
Se desejar, você pode configurar o servidor HTTP para exibir estatísticas .
O dock descreve o que mais você pode configurar, realmente existem muitas coisas. Se você souber fazer melhor, terei o prazer de adicionar uma seção sobre a configuração do servidor com material dos comentários.
Tornamos conveniente
alias rtmp-start="sudo /usr/local/nginx/sbin/nginx" alias rtmp-stop="sudo /usr/local/nginx/sbin/nginx -s stop" alias rtmp-status="cat /usr/local/nginx/logs/nginx.pid"
O que fazer com o servidor RTMP?
Envie um fluxo para ele a partir do aplicativo móvel em rtmp://< IP>:1935/live/habr
que live
é o nome do aplicativo RTMP na configuração do nginx e habr
é a chave de fluxo , que deve ser alterada para câmeras diferentes.
Se você configurou para exibir estatísticas (e não se esqueceu de alterar o caminho para o arquivo stat.xsl
), verifique se o fluxo chegou (em http: // localhost: 8080 / stat ).
Conecte-se a todos os fluxos do OBS Studio.


LUCRO !!!
Obviamente, o servidor pode ser não apenas local, mas também acessível a partir do exterior, o que permitirá que você faça o mesmo, mas não por Wi-Fi, mas pela Internet. Você pode criar seu próprio análogo de fluxos de grupos do Instagram e, em geral, possibilidades ilimitadas))
Isso é tudo?
Há mais algumas coisas que aprendi com os erros e gostaria de compartilhar:
- É possível e necessário alterar a taxa de bits alvo do fluxo final durante a transmissão e ajustar a conectividade. O Restream, por exemplo, desenha gráficos interessantes que mostram o quanto você precisa diminuir. Há uma solicitação pull para selecionar automaticamente uma taxa de bits , mas ela parou ((
- Existe um parâmetro de intervalo de quadro-chave e deve ser superior a um segundo (isso deve ser definido manualmente na versão avançada das configurações de saída ). Restream fala sobre isso somente após o final do fluxo, o UX está no seu melhor! )))
- Existe outro Pull Request extremamente útil , do qual participei e do qual me afogo ativamente, mas também parece parado, embora o mantenedor tenha lembrado e repensado recentemente. Por exemplo, se você também acha que a ausência do botão Monitor nos canais de áudio é terrível.
Agora está tudo certo, obrigado pela atenção ^ _ ^
PS
Para aqueles que ainda tentam construir o nginx para a onipresente Venda, aqui está o rake que eu segui, essa missão acabou sendo: eu não tinha medo desse processo por nada:
- É necessário pegar o código fonte EXATAMENTE do Mercurial (é bom que exista um botão "zip de download"), não há pasta
src\os\win32
nos arquivos do site. Se você tiver códigos-fonte do site, ocorrerá um erro don't know how to make 'src/os/win32/ngx_win32_config.h'
. - Precisa de um MinGW antigo daqui e não
um pouco menos antigo MSYS2. - Ao instalar o
mingw-developer-toolkit
é necessário remover a caixa de seleção do Perl. Perl deve ser Windows. - Essa resposta ajudou muito.
- Ao compilar, o
rc.exe
usado em %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64
, você precisa adicionar essa pasta manualmente no PATH - É necessário remover o sinalizador
-WX
do CFLAGS
no Makefile para que os vorings não interrompam a compilação, há vorings em 1.15.3 ...
Total, eu tenho algo parecido com isto: