Transmita con varias cámaras de materiales improvisados

Todo comenzó cuando, usándome, usando OBS Studio y algún tipo de programa para animar fondos de escritorio, hice un logotipo de video a partir del logotipo (que también estaba animado con la música actual). En ese momento, me di cuenta de que OBS Studio puede MUCHO más que simplemente reproducir juegos. Después de conocer más de cerca a OBS Studio, afirma ser el mejor programa que he conocido .


Tuve que transmitir un pequeño evento para amigos, pero como tengo el equipo para un buen sonido y el deseo de hacerlo bien, me sorprendió la organización de la transmisión con un sonido separado y varias cámaras. Por varias razones, la transmisión resultó ser regular, pero después de esta experiencia, me imagino cómo debería ser. Y quiero compartir. Aquí



Que?


La idea es encontrar 2-3 operadores inalámbricos que vayan a diferentes lugares del evento, se comuniquen con las personas, retiren el tráfico, etc. (bueno, como chicos serios, en resumen). Y alguien se sienta, se comunica con ellos en el walkie-talkie y se forma de todo esto (y algo más, por ejemplo, cualquier tipo de ventanas / monitores / proyectores restringidos) contenido de video interesante que no es aburrido de ver.


También puede combinar las pantallas de varias computadoras en una secuencia, tal vez esto pueda ser útil para los juegos. Aunque lo más probable es que haya otras tecnologías específicamente para esta tarea.


Por qué


Porque le permite hacerlo muy bien y cambiar enormemente el techo tecnológico de la calidad de la transmisión casi por nada.


Al usar un montón de transmisiones de video, la frescura de la transmisión estará determinada por el componente creativo y organizativo (bueno, y la calidad de las conexiones).


Que?


  1. Laptop
    1.1. Estudio obs
    1.2. nginx con módulo rtmp
  2. Operadores con sus teléfonos inteligentes
    2.1. Algún tipo de aplicación para emitir la solicitud "stream rtmp", por ejemplo Larix Broadcaster , o (si hay un poco de dinero extra) Ace Live Streaming o BitStream
  3. Wi-Fi estable, preferiblemente 5 GHz
  4. Enlace ascendente estable

Si tiene algo más, puede hacer un buen sonido, al menos en cámaras fijas (que puede ser cualquier web de calidad relativamente alta).


Y si hay otra computadora con Linux (dicen que incluso la Raspberry Pi está bien para ≤3 transmisiones), puede descargar ligeramente la computadora principal y su red para procesar y enviar la transmisión.


Como?


El protocolo reconocido para la transmisión de video es RTMP . Intentar usar algo más conduce a retrasos salvajes, este fue mi principal error.


Para ser justos, vale la pena señalar la tecnología patentada NewTek NDI (gracias, Alexsey ), que parece ser más genial que RTMP. Sin embargo, para nuestro caso de usuario, usar NDI requerirá mucho dinero extra.

Resulta que aceptar un flujo RTMP y redirigirlo a OBS Studio es tan fácil como pelar las cáscaras. Solo necesita compilar nginx con un módulo personalizado y escribir una configuración. Pero más sobre eso más tarde.


En el buen sentido, debe hacer algo como esto:



Es decir, no proporcione Internet a los teléfonos móviles para que no gasten recursos en otra cosa que no sea una transmisión.
Pero si ya hay un buen Wi-Fi con Internet (y no hay un punto de acceso adicional a 5 GHz), entonces no puede desdeñar y usar las conexiones existentes. Sin embargo, aún es deseable enviar la transmisión final desde otra conexión o, en casos extremos, desde la misma, pero a través de un cable.


Si es necesario recibir transmisiones de las cámaras y enviar la transmisión final a través del mismo wifi, pruebe cuidadosamente la estabilidad (y tenga en cuenta que disminuirá en gran medida si una multitud de dispositivos se conecta a este wifi).


¿Cómo elevar el servidor RTMP?


Es mejor hacer esto en Linux, para no experimentar problemas con todo tipo de MINGW / MSYS. Y en un hardware separado (no necesariamente potente). O en el docker, puede omitir esta sección, porque el dockerfile ya existe . A través de WSL también es posible, pero será necesario reenviar manualmente el puerto TCP 1935 en el firewall.


Aquí hay un gran manual sobre cómo configurar su propio servidor RTMP privado con nginx , y también está escrito en el dock . Un breve recuento del estilo libre:


  1. Ponemos las dependencias:


    sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev 

  2. Descargue la última versión de Mainline de la fuente desde aquí :


     wget http://nginx.org/download/nginx-1.15.2.tar.gz # Check for newer versions tar xzf nginx-* && cd !$ 

  3. Descargue la última versión del módulo RTMP :


     wget https://github.com/arut/nginx-rtmp-module/archive/master.zip -O rtmp-module.zip unzip !$ -d . 

  4. Crea un Makefile:


     ./configure --with-http_ssl_module --add-module=./nginx-rtmp-module-master 

    Si cae antes de llegar al Configuration summary , solucionamos los problemas.
    Este comando configurará su streamer nginx para vivir en /usr/local/nginx/ y se ejecutará con el comando sudo /usr/local/nginx/sbin/nginx . Por lo tanto, nginx del repositorio no siente nada. Esto se puede cambiar examinando ./configure --help .


  5. Compilamos:


     make -j4 

  6. 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 

    En principio, usar make install en este caso es seguro, pero aún así no es necesario .


  7. Cheque


     $ /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.15.2 

  8. Personalizar


     sudo vim /usr/local/nginx/conf/nginx.conf 

    Al final, agregue la configuración del servidor RTMP:


     rtmp { server { listen 1935; application live { live on; record off; } } } 

    Si lo desea, puede configurar el servidor HTTP para mostrar estadísticas .
    El dock describe qué más puede configurar, realmente hay muchas cosas. Si sabe cómo hacerlo mejor, me complacerá agregar una sección sobre la configuración del servidor con el material de los comentarios.


  9. Lo hacemos 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" 


¿Qué hacer con el servidor RTMP?


  1. Envíele una transmisión desde la aplicación móvil en rtmp://< IP>:1935/live/habr donde live es el nombre de la aplicación RTMP en la configuración nginx, y habr es la clave de habr , que debe cambiarse para diferentes cámaras.


  2. Si se configuró para mostrar estadísticas (y no se olvidó de cambiar la ruta al archivo stat.xsl ), verifique que la transmisión haya llegado (a http: // localhost: 8080 / stat ).


  3. Conéctese a todas las transmisiones de OBS Studio.




  4. BENEFICIO !!!



Obviamente, el servidor puede ser no solo local, sino también accesible desde el exterior, lo que le permitirá hacer lo mismo, pero no a través de Wi-Fi, sino a través de Internet. Puede hacer su propio análogo de transmisiones grupales de Instagram y, en general, posibilidades ilimitadas))


¿Eso es todo?


Hay un par de cosas más que aprendí de los errores y me gustaría compartir:


  1. Es posible y necesario cambiar la tasa de bits objetivo de la transmisión final durante la transmisión y ajustar la conectividad. Restream, por ejemplo, dibuja gráficos geniales que muestran cuánto necesita bajar. Hay una solicitud de extracción para seleccionar automáticamente una tasa de bits , pero se estancó ((
  2. Existe un parámetro de intervalo de fotogramas clave de este tipo , y debe ser más de un segundo (debe configurarse manualmente en la versión avanzada de la configuración de salida ). Restream habla de esto solo después del final de la transmisión, ¡UX está en su mejor momento! )))
  3. Hay otra solicitud de extracción extremadamente útil , en la que participé, y en la que me ahogué activamente, pero también parece estancada, aunque el responsable recientemente lo recordó y lo repensó. Por ejemplo, si también piensas que la ausencia del botón Monitor en los canales de audio es terrible.

Ahora todo está seguro, gracias por su atención ^ _ ^


PS


Para aquellos que todavía intentan construir nginx para el ubicuo Venda, aquí está el rastrillo que he seguido, esa búsqueda resultó ser, no tenía miedo de este proceso por nada:


  • Es necesario tomar el código fuente EXACTAMENTE de Mercurial (es bueno que haya un botón "descargar zip"), no hay una carpeta src\os\win32 en los archivos del sitio. Si tiene códigos fuente del sitio, habrá un error: don't know how to make 'src/os/win32/ngx_win32_config.h' .
  • Necesita un antiguo MinGW de aquí y no un poco menos antiguo MSYS2.
  • Al instalar mingw-developer-toolkit debe eliminar la casilla de verificación de Perl. Perl debe ser Windows.
  • Esta respuesta ayudó mucho.
  • Al compilar, rc.exe usa desde %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64 , debe agregar esta carpeta manualmente en PATH
  • Es necesario eliminar el indicador -WX de CFLAGS en el Makefile para que los videos no interrumpan la compilación, hay videos en 1.15.3 ...

Total, tengo algo como esto:


 #cmd: "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" #cmd: set PATH=%PATH%;%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64 #cmd: C:\MinGW\msys\1.0\msys.bat #bash: cd nginx-1.15.3 ./auto/configure \ --with-cc=cl \ --with-debug \ --prefix= \ --conf-path=conf/nginx.conf \ --pid-path=logs/nginx.pid \ --http-log-path=logs/access.log \ --error-log-path=logs/error.log \ --sbin-path=nginx.exe \ --http-client-body-temp-path=temp/client_body_temp \ --http-proxy-temp-path=temp/proxy_temp \ --http-fastcgi-temp-path=temp/fastcgi_temp \ --http-scgi-temp-path=temp/scgi_temp \ --http-uwsgi-temp-path=temp/uwsgi_temp \ --with-cc-opt=-DFD_SETSIZE=1024 \ --with-pcre=objs/lib/pcre-8.42 \ --with-zlib=objs/lib/zlib-1.2.11 \ --with-openssl=objs/lib/openssl-1.1.1 \ --with-openssl-opt=no-asm \ --with-select_module \ --with-http_ssl_module \ --add-module=nginx-rtmp-module-master nmake 

Source: https://habr.com/ru/post/es420037/


All Articles