Cree un servicio de comunicación de audio y video de muchos a muchos

Tres esquemas de arquitectura para comunicación de audio y video de múltiples partes

1. Esquema de malla

Es decir, múltiples terminales están conectados en pares para formar una estructura de red. Este esquema es una versión extendida del modelo de comunicación 1v1 WebRTC, y dos nodos cualesquiera pueden considerarse como un modelo de comunicación 1v1 WebRTC.

Ventajas: ningún servidor necesita transferir datos, STUN/TUTN solo es responsable del cruce de NAT, por lo que se puede realizar utilizando el modelo de comunicación WebRTC existente sin la necesidad de desarrollar un servidor de medios.

Desventaja: se debe reenviar un flujo de medios a cada participante, lo que ocupa una gran cantidad de ancho de banda ascendente. Cuantos más participantes, mayor será el ancho de banda ocupado. La ocupación de los recursos de la máquina del cliente es proporcional al número de participantes, cuando hay demasiados participantes, esta solución no está disponible. Desde un punto de vista práctico, este tipo de programa tendrá problemas muy grandes cuando haya más de 4 personas. Además, dado que STUN/TUTN solo es responsable del cruce de NAT, si algunas personas no pueden lograr el cruce de NAT, no podrán conectarse.

2. Solución MCU (Unidad de conferencia multipunto)

El esquema consta de un servidor y múltiples terminales para formar una estructura en estrella. La principal lógica de procesamiento de la MCU es: recibir los flujos de audio y video de cada extremo compartido, decodificar, mezclar y volver a codificar con otros flujos de audio y video decodificados, y luego enviar los flujos de audio y video mezclados a todos en la sala.

De hecho, el lado del servidor es un mezclador de audio y video, y la presión sobre el servidor de esta solución será muy alta. La tecnología MCU apareció muy temprano en el campo de las videoconferencias, y la tecnología actual también es muy madura, y se utiliza principalmente en el campo de las videoconferencias de hardware.

Envíeme un mensaje privado para recibir los materiales de aprendizaje y mejora más recientes y completos en 2022 , incluidos ( C/C++ , Linux , FFmpeg , webRTC , rtmp , hls , rtsp , ffplay , srs )

 

 

3. Esquema SFU (Unidad de Reenvío Selectivo)

Esta solución también se compone de un servidor y múltiples terminales, pero a diferencia de MCU, SFU no mezcla flujos de audio y video.Después de recibir los flujos de audio y video compartidos por un terminal, los reenvía directamente a las habitaciones en el sala otras terminales.

En realidad, es un repetidor de enrutamiento de audio y video, y puede controlar el flujo de acuerdo con el estado de la red de enlace descendente del terminal, y puede descartar selectivamente algunos datos multimedia de acuerdo con la situación actual del ancho de banda y el retraso de la red para garantizar la continuidad de la comunicación. Los detalles se describen a continuación.

Resumir

En comparación con la solución Mesh, tanto SFU como MCU requieren un servidor de tránsito. Debido a que la solución MCU necesita mezclar varios canales de video en un solo canal, requiere muchas operaciones y consume muchos recursos de la CPU. Generalmente, se requiere hardware especial para el procesamiento. La solución SFU no requiere mucha CPU porque no requiere la mezcla de video multicanal, pero puede generar el problema de imágenes inconsistentes vistas por diferentes personas al mismo tiempo en el caso del video multicanal.

Por lo tanto, si no desea utilizar un servidor de retransmisión, elija la solución Mesh; si tiene altos requisitos de consistencia de video multicanal y tiene un hardware especial, se recomienda elegir el modo MCU; de lo contrario, se recomienda utilice el modo SFU.

programa SFU

El esquema SFU se divide en modo Simulcast y modo SVC según las diferentes formas de descartar datos multimedia durante el retraso de la red.

Modo de transmisión simultánea

El llamado modo Simulcast significa que el compartidor de video puede enviar múltiples secuencias de video de diferentes resoluciones a la SFU al mismo tiempo (generalmente tres canales, como 1080P, 720P, 360P). La SFU puede seleccionar uno de los tres flujos recibidos para enviar según la situación de cada terminal.

Por ejemplo, debido a que la red del lado de la PC es particularmente buena, se envía un video de resolución de 1080P al lado de la PC; mientras que la red móvil es deficiente, se envía un video de resolución de 360P al teléfono.

Modo SVC

 

SVC es un modo de codificación de video escalable. Divide el video en varias capas: capa central, capa intermedia y capa de extensión durante la codificación de video. La capa superior depende de la capa inferior, y cuanto más alta es la capa superior, más clara es la capa inferior y más borrosa es la capa inferior. En el caso de un ancho de banda pobre, solo se puede transmitir la capa inferior, es decir, la capa central, en el caso de un ancho de banda suficiente, se pueden transmitir las tres capas.

Implementar servicios de videoconferencia de múltiples partes

Con base en el análisis anterior, implementamos un proyecto basado en el esquema SFU. Los proyectos de código abierto incluyen Licode, Janus-gateway, MediaSoup, Medooze. Aquí implementamos el proyecto de demostración SFU basado en Medooze.

Preparación del entorno operativo

  • Sistema operativo: Ubuntu 18.04
  • Configuración regional: NodeJS
apt-get update && apt-get install -y nodejs npm git-core

Instalar dependencias

git clone https://github.com/medooze/sfu.git
cd sfu
npm install

generar certificado

El certificado tendrá tiempo para integrarlo y solucionarlo en el futuro.

iniciar el servicio

node index.js IP

servicio acoplable

Dockerfile

FROM ubuntu:18.04

WORKDIR /
RUN apt-get update && apt-get upgrade && apt install -y nodejs npm git-core python3 wget curl && npm install -g n && n stable
RUN hash -r && npm install -g [email protected]
RUN git clone https://github.com/medooze/sfu

WORKDIR /sfu
RUN npm install
RUN openssl req -x509 -out ./server.cert -keyout ./server.key   -newkey rsa:2048 -nodes -sha256   -subj '/CN=*'
ENTRYPOINT ["node" "index.js"]

imagen acoplable

// 可以用上面的 Dockerfile 文件自己打镜像,也可用用我已经打包好的镜像
docker pull zhaowg/sfu:v1

Cómo usar la versión de Docker

docker run -it --net=host  zhaowg/sfu:v1 <IP>

Supongo que te gusta

Origin blog.csdn.net/m0_60259116/article/details/124330174
Recomendado
Clasificación