Escenas
El servidor de transmisión de medios de código abierto ZLMediaKit se ejecuta en Windows, lo configura, extrae la transmisión a pedido (extrae la transmisión de video rtsp de la cámara) y usa la página web http-flv para reproducir:
Lo anterior describe el proceso de uso de ZLMediaKit.
A continuación se presenta otro servidor de transmisión de código abierto.
Cuello
Monibuca (pronunciación: analog not card, m7s es su abreviatura, similar a k8s) es un marco de desarrollo de lenguaje Go de código abierto para servidores de streaming de medios.
Se basa en go1.19+, sin ninguna otra dependencia, y proporciona un conjunto de modelos de desarrollo secundarios complementarios para ayudarle a desarrollar eficientemente servidores de medios de transmisión.
Puede utilizar directamente los complementos oficiales o desarrollar sus propios complementos para ampliar cualquier función, por lo que Monibuca es un marco que puede admitir cualquier protocolo de transmisión de medios.
Nota:
Blog:
Domineering Rogue Temperament_C#, Architecture Road, Blog SpringBoot-CSDN
lograr
1. Instalación y configuración en Windows
Descargue el paquete de instalación según el tutorial anterior.
Seleccione la versión correspondiente para descargar, aquí está Windows
https://download.m7s.live/bin/m7s_windows_amd64.tar.gz
Después de la descarga, descomprímalo y haga doble clic en m7s.exe para iniciarlo.
El m7 ha habilitado todos los complementos de forma predeterminada, por lo que ha comenzado a escuchar puertos de todos los protocolos como rtmp, rtsp, gb28181, etc., y puede enviar la transmisión directamente al m7.
2. Empuja y juega
flujo de empuje:
a través de OBS, presione a rtmp://localhost/live/test
a través de ffmpeg, ffmpeg -i [fuente de video] -c:v h264 -c:a aac -f flv rtmp://localhost/live/test
a través de ffmpeg, ffmpeg -i [Fuente del vídeo] -c:v h264 -c:a aac -f rtsp rtsp://localhost/live/test
Envíe la transmisión a través de la página de prueba de webrtc, visite http://localhost:8080/webrtc/test/publish
para pass Configure la dirección del servidor SIP para la cámara de esta máquina y especifique el puerto 5060 para enviar la transmisión del dispositivo al m7s.
jugar:
Al acceder a http://localhost:8080/preview/, puede obtener una vista previa de todas las transmisiones (múltiples páginas de vista previa de protocolos),
puede reproducir transmisiones rtmp a través de ffplay, ffplay rtmp://localhost/live/test,
puede reproducir transmisiones rtsp a través de ffplay, ffplay rtsp://localhost/live/test
puede reproducir su transmisión a través de ffplay, ffplay http://localhost:8080/hls/live/test.m3u8
prueba:
Pruebe usando FFmpeg para enviar video al servidor rtmp
Utilice las siguientes instrucciones de FFmpeg
ffmpeg.exe -re -stream_loop -1 -i D:\test\22.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.11935/hls/123
El puerto predeterminado del servicio rtmp es 1935
Luego puede usar vlc, etc. para reproducir la siguiente dirección directamente a través de las reglas de reproducción
http://127.0.0.1:18080/hdl/hls/123.flv
O puede acceder directamente a su API de vista previa para obtener una vista previa y realizar pruebas.
http://127.0.0.1:18080/vista previa
Haga clic en hls/123 para llegar a la página de vista previa
Puede hacer clic en el botón de reproducción a continuación para probar y también puede ver la URL de reproducción completa aquí.
Tenga en cuenta que el puerto de la interfaz http aquí cambia del 8080 predeterminado a 18080; consulte a continuación para modificar el archivo de configuración.
Precauciones
Para la transmisión ffmpeg, agregue -c:v h264 -c:a aac; de lo contrario, no se podrá utilizar el formato de video iniciado.
StreamPath debe tener el formato live/test. No puede tener un solo nivel ni comenzar con una barra, como /live está mal.
La transmisión en m7s tiene un identificador único que es StreamPath. La regla de StreamPath es [AppName]/[StreamName], donde AppName es el nombre de la aplicación y StreamName es el nombre de la transmisión.
Por ejemplo, en vivo/prueba, donde en vivo es AppName y prueba es StreamName. Siempre que conozca la ruta de la transmisión, podrá reproducir la transmisión con cualquier protocolo.
Si h265 se reproduce en formato flv o rtmp, se debe utilizar un reproductor personalizado (como jessibuca) para reproducirlo. Debido a que flv y rtmp no definen el formato de h265,
Entonces se logra por extensión.
Reglas de empalme de direcciones
Normalmente, la regla de dirección de reproducción es [protocolo]://[Host][:Puerto]/[nombre del complemento]/[StreamPath]
[nombre del complemento]
Entre ellos, el nombre del complemento debe concatenarse solo para el puerto http público. Incluyendo el protocolo websocket, a saber, ws-flv y ws-raw.
Si el host es localhost, streamPath está en vivo/prueba
La dirección del protocolo HTTP-FLV es http://localhost:8080/hdl/live/test.flv
La dirección del protocolo fmp4 es http://localhost:8080/fmp4/live/test.mp4
La dirección del protocolo hls es http://localhost:8080/hls/live/test.m3u8
La dirección del protocolo ws-flv es ws://localhost:8080/jessica/live/test.flv
La dirección del protocolo ws-raw es ws://localhost:8080/jessica/live/test
protocolo ws-raw
El protocolo ws-raw es un protocolo privado y sólo se puede jugar a través del reproductor jessibuca.
número de puerto http
El número de puerto predeterminado del protocolo http es 8080, que se puede modificar mediante la configuración global. Para los complementos que incluyen la configuración http, el número de puerto se puede configurar por separado. El uso de un único número de puerto elimina la necesidad de concatenar el nombre del complemento en la dirección. Por ejemplo, en el ejemplo anterior, si el complemento hdl configura el número de puerto http por separado como 8081, la dirección es: http://localhost:8081/live/test.flv
La dirección de reproducción rtmp es rtmp://localhost/live/test
La dirección de reproducción rtsp es rtsp://localhost/live/test
número de puerto predeterminado
El número de puerto predeterminado de rtmp es 1935 y el número de puerto predeterminado de rtsp es 554. Si no está configurado, se utiliza el número de puerto predeterminado.
Entonces la dirección puede omitir el número de puerto.
dirección de reproducción webrtc
De hecho, webrtc no tiene la llamada dirección de reproducción, sino que la reproduce a través de js api. La API específica puede hacer referencia a la reproducción de webrtc si juegas webrtc tú mismo
Puede consultar MDN: API WebRTC - API web | MDN
Primero debes completar el intercambio sdp y luego jugar a través de la conexión webrtc establecida. Jessibuca simplifica el proceso anterior en una dirección:
webrtc://localhost/live/test, de hecho, primero establece una conexión de intercambio sdp con el servidor y luego establece una conexión webrtc a través de esta conexión.
3. Si desea modificar el archivo de configuración
v4 admite el inicio sin configuración de forma predeterminada, es decir, puede ejecutarse sin archivos de configuración. Si hay un archivo de configuración, la configuración en el archivo de configuración anulará la configuración predeterminada.
configuración global
Los siguientes son los elementos de configuración predeterminados, por lo que no es necesario copiarlos al archivo de configuración, solo necesita completar la parte que debe modificarse en el archivo de configuración para anular la configuración predeterminada.
global:
disableall: false # 是否禁用所有插件
loglang: zh # 日志语言,可选值:zh,en
loglevel: info # 日志级别,可选值:debug,info,warn,error,panic,fatal
http:
listenaddr: :8080 # 网关地址,用于访问API
listenaddrtls: :8443 # 用于HTTPS方式访问API的端口配置
certfile: ""
keyfile: ""
cors: true # 是否自动添加cors头
username: "" # 用户名和密码,用于API访问时的基本身份认证
password: ""
readtimeout: 0 # 读超时时间
writetimeout: 0 # 写超时时间
idletimeout: 0 # 空闲超时时间
publish:
pubaudio: true # 是否发布音频流
pubvideo: true # 是否发布视频流
kickexist: false # 剔出已经存在的发布者,用于顶替原有发布者
insertsei: false # 是否启用插入SEI功能
publishtimeout: 10s # 发布流默认过期时间,超过该时间发布者没有恢复流将被删除
idletimeout: 0 # 发布者空闲超时时间,超过该时间发布者没有任何操作将被删除,0为关闭该功能
delayclosetimeout: 0 # 自动关闭触发后延迟的时间(期间内如果有新的订阅则取消触发关闭),0为关闭该功能,保持连接。
waitclosetimeout: 0 # 发布者断开后等待时间,超过该时间发布者没有恢复流将被删除,0为关闭该功能,由订阅者决定是否删除
buffertime: 0 # 缓存时间,用于时光回溯,0为关闭缓存
key: "" # 订阅者鉴权秘钥
secretargname: secret # 订阅者鉴权参数名
expireargname: expire # 订阅者鉴权过期时间参数名
speedlimit: 500ms # 限速超时时间0为不限速,对于读取文件这类流需要限速,否则读取过快
subscribe:
subaudio: true # 是否订阅音频流
subvideo: true # 是否订阅视频流
subaudioargname: ats # 订阅音频轨道参数名
subvideoargname: vts # 订阅视频轨道参数名
subdataargname: dts # 订阅数据轨道参数名
subaudiotracks: [] # 订阅音频轨道名称列表
subvideotracks: [] # 订阅视频轨道名称列表
submode: 0 # 订阅模式,0为跳帧追赶模式,1为不追赶(多用于录制),2为时光回溯模式
syncmode: 0 # 音视频同步模式,0 为按照时间戳同步,1 为按照写入时间同步
iframeonly: false # 只订阅关键帧
waittimeout: 10s # 等待发布者的超时时间,用于订阅尚未发布的流
writebuffersize: 0 # 订阅者写缓存大小,用于减少io次数,但可能影响实时性
key: "" # 订阅者鉴权秘钥
secretargname: secret # 订阅者鉴权参数名
expireargname: expire # 订阅者鉴权过期时间参数名
internal: false # 是否内部订阅,内部订阅不会触发发布者自动断开功能
enableavcc : true # 启用AVCC格式缓存,用于rtmp协议
enablertp : true # 启用rtp格式缓存,用于rtsp、websocket、gb28181协议
enableauth: true # 启用鉴权,详细查看鉴权机制
enablesubevent: true # 启用订阅事件,用于订阅者上下线事件,关闭可以提高性能
rtpreorderbufferlen: 50 # rtp乱序重排缓存长度
eventbussize: 10 # 事件总线缓存大小,事件较多时容易堵阻塞线程,需要增大缓存
poolsize: 0 # 内存池大小,高并发需要提高性能可以加大内存池,减少 GC
pulseinterval: 5s # 心跳事件间隔时间
console:
server : console.monibuca.com:44944 # 连接远程控制台的地址
secret: "" # 远程控制台的秘钥
publicaddr: "" # 实例公网地址,提供远程控制台访问的地址,不配置的话使用自动识别的地址
publicaddrtls: "" # 实例公网地址,提供远程控制台访问的地址,不配置的话使用自动识别的地址(https)
Por ejemplo, aquí desea modificar el puerto http a 18080
Busque config.yaml y modifique la ubicación correspondiente.
configuración del complemento
La configuración del complemento está definida por el complemento
Para obtener información de configuración específica de cada complemento, consulte la documentación del complemento.
Por ejemplo, si desea modificar la configuración de rtsp, puede modificar rtsp.yaml en conf de acuerdo con las instrucciones de configuración del complemento.
4. Extraiga la transmisión y convierta flv para lograr
A continuación se muestra un ejemplo de cómo extraer una transmisión rtsp desde un control remoto.
Consulte la documentación del complemento.
rtsp/api/pull?target=[dirección RTSP]&streamPath=[ID de transmisión]&save=[0|1|2]#
Tire rtsp del control remoto al m7s
Guardar significado: 0, no guardar; 1, guardar en pullonstart; 2, guardar en pullonsub
La dirección RTSP debe estar codificada en URL para evitar que los caracteres especiales que contiene afecten el análisis.
Primero necesitas simular una transmisión rtsp.
Utilice FFmpeg en Windows para realizar envíos de video locales y simular la transmisión de video rtsp del protocolo Haikang:
Luego llama a su API de transmisión.
Por ejemplo, la secuencia rtsp simulada aquí es
rtsp://username:[email protected]:554/h264/ch01/main/av_stream
Entonces la URL completa para llamar a la API es
Entonces la dirección de reproducción del http-flv correspondiente es
http://127.0.0.1:18080/hdl/live/badao.flv
Se puede acceder a más API usando
O documentación oficial del complemento