Cree un servicio push de transmisión de medios, RTMP/RTSP/HLS/HTTP-FLV.

1. ¿Qué es la transmisión de medios?

La transmisión de medios se refiere a una tecnología y un proceso que comprime una serie de datos multimedia, envía los datos en segmentos a través de Internet y transmite instantáneamente audio y video en Internet para su visualización. Esta tecnología permite que los paquetes de datos se envíen como agua corriente; si Sin esta tecnología, se debe descargar todo el archivo multimedia antes de utilizarlo. La transmisión por streaming puede transmitir videos en vivo o videos prealmacenados en el servidor. Cuando un espectador ve estos archivos de video, los datos del video se reproducen mediante un software de reproducción específico inmediatamente después de ser enviados a la computadora del espectador. Los usuarios miran mientras descargan sin tener que esperar a que se descargue el archivo completo; cuando los archivos multimedia se reproducen a través de la red, los archivos en sí no se almacenan en el disco local, lo que ahorra una gran cantidad de espacio en el disco. La transmisión de medios en realidad se refiere a un nuevo método de transmisión de medios, que incluye transmisión de sonido, transmisión de video, transmisión de texto, transmisión de imágenes, transmisión de animación, etc. Los servidores de medios de transmisión se utilizan ampliamente en video a pedido, videoconferencias, educación a distancia (transmitir la pantalla de la ventana de la computadora a otras personas durante juegos en vivo o clases en línea), telemedicina, sistemas de transmisión en vivo en línea y transmisiones de video de cámaras de acceso de seguridad al campus.
Protocolo de transferencia de medios en streaming

    RTSP (Real-Time Stream Protocol) es un protocolo de control de reproducción multimedia basado en texto propuesto conjuntamente por Real Networks y Netscape. RTSP define el formato de transmisión y los datos de transmisión se transmiten a través de RTP; RTSP tiene muy buen efecto en tiempo real y es adecuado para video chat, monitoreo de video, etc. Generalmente, las cámaras están en formato RTSP. h5 no admite de forma nativa este formato. La ventaja es que puede controlar el cuadro de vídeo, por lo que puede alojar aplicaciones con alto rendimiento en tiempo real. Esta ventaja es la mayor ventaja sobre HTTP. La complejidad se concentra principalmente en el lado del servidor, que puede realizar la función de reproducción a doble velocidad y otros protocolos de video no pueden admitirla. El retraso de la red es bajo, generalmente dentro de 0,5 s, la desventaja es que la complejidad del lado del servidor es relativamente alta y la implementación también es complicada. El lado de iOS no admite este protocolo y el soporte para terminales móviles es débil; excepto el navegador Firefox que puede reproducir transmisiones RTSP directamente, casi ningún otro navegador puede reproducir transmisiones RTSP directamente. Protocolo RTSP, este protocolo tiene efectos similares a RTMP. Técnicamente, solo se diferencia en cuántos canales están ocupados en la transmisión de datos y el formato de transmisión. RTSP en realidad se puede utilizar para transmisiones en vivo. Pero aún así, debido al entorno del mercado, RTSP se utiliza actualmente principalmente en monitoreo de seguridad y, al igual que RTMP, ya ha formado su propia cadena de ganancias.

    Adobe propuso RTMP (Protocolo de mensajes en tiempo real) para resolver los problemas de multiplexación y paquetización de flujos de transmisión de datos multimedia. Tiene las ventajas de baja latencia, alta estabilidad y admite todos los formatos de cámara. El protocolo RTMP utiliza transmisión en tiempo real. transmisión, por lo que los archivos no se almacenarán en caché en el cliente. Esta característica muestra que es difícil para los usuarios descargar videos bajo el protocolo RTMP. La transmisión de video se puede arrastrar y mover desde cualquier momento. El servidor envía una solicitud de reproducción y no requiere que el vídeo tenga fotogramas clave. En comparación, los videos bajo el protocolo HTTP deben tener fotogramas clave antes de poder arrastrarse a voluntad. El protocolo rtmp solo admite flashplayer, lo que significa que solo se puede instalar en la PC (o en el entorno Android donde está el componente flashplayer). instalado, lo cual es relativamente raro). Cuando se usa bajo ciertas circunstancias, el navegador puede cargar el complemento flash y reproducirlo directamente. Sin embargo, el flash ya se ha desvanecido. Por lo tanto, actualmente RTMP se utiliza principalmente para extraer transmisiones. Es decir, cuando configura el decodificador para enviar el video a la plataforma de alojamiento, el video se envía a la CDN usando el protocolo RTMP y luego se entrega al reproductor usando otro protocolo (generalmente HLS).

    HTTP: cuando se utiliza el protocolo http, el formato de vídeo debe ser m3u8 o transmisión de vídeo del protocolo HTTP-FLV. El protocolo HLS consta de tres partes: HTTP, M3U8 y TS. Entre estas tres partes, HTTP es el protocolo de transmisión, M3U8 es el archivo de índice y TS es la información de medios de audio y video, y m3u8 está retrasado. No es en tiempo real y la transmisión en tiempo real no es tan buena como la del protocolo rtmp. Porque el principio de transmisión en vivo de m3u8 es comprimir continuamente la fuente de transmisión en vivo en archivos ts de longitud específica (como 9 segundos, 10 segundos por archivo ts) y actualizar la lista en el archivo m3u8 en tiempo real para lograr el efecto de transmisión en vivo. . Esto tendrá un retraso de al menos 9,10 segundos. Si la compresión es demasiado pequeña, el vídeo puede bloquearse debido a problemas en la red del cliente. HTTP-FLV encapsula los datos multimedia de transmisión en formato FLV y luego los transmite al cliente a través del protocolo HTTP. Existe una convención en el protocolo HTTP: el campo de longitud del contenido, la longitud de la parte del cuerpo de http. este campo cuando el servidor responde a la solicitud http, el cliente El cliente recibe datos de esta longitud y luego considera que la transmisión de datos se ha completado. Si el servidor no responde con este campo en la solicitud http, el cliente continuará recibiendo datos hasta que se desconecte la conexión de socket entre el servidor y el cliente. La transmisión en vivo http-flv utiliza el segundo principio: el servidor no agrega el campo de longitud del contenido al responder a la solicitud del cliente. Después de responder al contenido http, envía datos flv y el cliente continúa recibiendo los datos.

A excepción de los protocolos de transmisión HTTP y WebSocket, otros protocolos de transmisión no se pueden transmitir universalmente a los navegadores. Por lo tanto, si desea crear un reproductor de video H5 universal, es básicamente un reproductor de video con protocolo HTTP/WebSocket. Si se trata de fuentes de video similares a Los protocolos de tipo RTMP y RTSP son inevitables y el servidor debe convertirlos
3. Construcción del servidor push

Opción 1: Nginx agrega el módulo nginx-rtmp-module

Solución 2: Nginx agrega el módulo http-flv-module

nginx-http-flv-module es un servidor de transmisión de medios basado en nginx-rtmp-module. Tiene todas las funciones de nginx-rtmp-module y agrega una variedad de funciones nuevas.La comparación de funciones es la siguiente. Para obtener más información, consulte https://github.com/winshining/nginx-http-flv-module
. Puede instalarlo según su situación real. http-flv-module es más potente.

Dado que el proyecto necesita reproducir HTTP-FLV, se eligió la opción 2.

nginx agrega compilación de módulos

// 下载nginx
# mkdir -p /root/nginx
# cd /root/nginx
# yum -y install pcre-devel openssl openssl-devel        //安装依赖
# wget http://nginx.org/download/nginx-1.21.6.tar.gz        //下载nginx包
# tar xf nginx-1.21.6.tar.gz
//下载nginx-http-flv-module
# mkdir -p /opt/nginx-1.21.6/module
# cd /opt/nginx-1.21.6/module
# wget https://github.com/winshining/nginx-http-flv-module/archive/refs/heads/master.zip
# unzip master.zip
# cd /root/nginx/nginx-1.21.6
//安装目录是/opt/nginx-1.21.6,安装模块nginx-http-flv-module-master【重点就是这个】和ssl用于日后配置https证书
# ./configure --prefix=/opt/nginx-1.21.6 --add-module=/opt/nginx-1.21.6/module/nginx-http-flv-module-master --with-http_ssl_module 
# make
# make install // 如果你是热部署升级,一定不要执行这个命令
// 修改nginx配置文件 避免粘贴过来格式混乱,在 Vim 视图,输入如下命令:set paste,可以使 vim 进入 paste 模式,这时候再整段复制黏贴,就OK了
# vim /opt/nginx-1.21.6/conf/nginx.conf
//修改完成,检查nginx配置文件是否正确,启动nginx 即可,记得开放防火墙、安全组端口1935 和88
# cd /opt/nginx-1.21.6/sbin
# ./nginx -t
# ./nginx 

nginx.config está configurado de la siguiente manera

#增加如下配置即可
# 推流时会发布到多个子进程
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp {  
    server {  
        listen 1935;  #监听的端口号
        chunk_size 8192; # 单一推流数据包的最大容量
        
        application hls {  # 创建rtmp应用hls
            live on;  # 当路径匹配时,开始播放
            #HLS协议进行m3u8实时直播.如果是http-flv不需要配置下面的
            wait_key on;#保护TS切片
            hls on;  #实时回访
            hls_nested on;#每个流都自动创建一个文件夹
            hls_path /tmp/hls; #媒体块ts的位置
            hls_fragment 5s; #每个ts文件为5s的样子
            hls_playlist_length 30s;  #保存m3u8列表长度时间,默认是30秒,可考虑三小时10800秒
            hls_cleanup on;#是否删除列表中已经没有的媒体块TS文件,默认是开启
            hls_continuous on;#连续模式
       }  
    } 
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       88;
        server_name  localhost;
        error_log logs/rtmp/error.log;# http协议下的访问日志
        access_log  logs/rtmp/access.log;
        location /stat { # 开启这两个页面可以观察rtmp流的统计,不需要可去掉
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
    location /stat.xsl { # 查看状态的部分,不需要可去掉
        root /opt/nginx-1.19.1-rtmp/nginx-http-flv-module/;
    }
    location /flv_live { # 拉http-flv的配置
            flv_live on;
            chunked_transfer_encoding on;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
    }
    # 通过http访问的这个路径会被转发到/tmp/hls 寻找对应的m3u8文件和视频片段例如 111.m3u8,111-622.ts,前缀名字为视频上传流的stream_key
    location /hls { # 拉m3u8的配置
        types {
              application/vnd.apple.mpegurl m3u8;
              video/mp2t ts;
            }
        alias /tmp/hls;   
        expires -1;
        add_header 'Cache-Control' 'no-cache'; 
    }
    location / { # 首页
        root html;
        index index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
            root   html;
    }
  }
}

4. Empujar el flujo

Opción 1: Según las necesidades de este proyecto, envíe el flujo de datos de la pantalla de la computadora host de Windows a la nube, de modo que se utilice OBS para enviar el flujo.

1. Descargue OBS-Studio-26.0.2-Full-Installer-x64.exe e instálelo en la computadora host de Windows

2. Ejecute el software y haga clic en: Archivo->Configuración->Push.Establezca la contraseña de transmisión como desee, como 111. Esto es para distinguir la clave de transmisión cuando extraiga la transmisión más tarde.

3. Colección de ventanas, seleccione la página que desea enviar

4. Haga clic para iniciar la transmisión. Si aparece el cuadro rojo en la parte inferior, significa que ha sido exitoso.

Solución 2: use ffmpeg para enviar la transmisión de video a nginx

# mkdir -p /usr/local/ffmpeg
# cd /usr/local/ffmpeg
# wget https://github.com/FFmpeg/FFmpeg/archive/refs/heads/master.zip
# unzip  master.zip
# ./configure
# 如果提示nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
# yum install yasm
# ./configure # 再次编译
# make
# make install

Empuje el archivo de video local zhangsan.mp4 para transmitir

# ffmpeg -stream_loop -1 -re -i zhangsan.mp4 -c copy -f flv  rtmp://192.168.1.232:1935/http_flv/stream_key
-i 要处理视频文件的路径,此处地址是一个监控摄像头
-s 像素
-f 强迫采用flv格式

Supongo que te gusta

Origin blog.csdn.net/xiehuanbin/article/details/133125082
Recomendado
Clasificación