2012-03-16 27 views
8

Estoy buscando una forma de controlar la actividad en una transmisión para poder determinar si hay algo que atraviese la transmisión o no. Si lo hay, comenzaré a grabarlo usando rtmpdump.Monitorear transmisión RTMP, registrar si está disponible

Imagino que esto funciona ejecutando una tarea cron que comprueba una secuencia cada 60 segundos. Si determina que está llegando una transmisión, invoca rtmpdump para iniciar la grabación. De lo contrario, no haga nada y vuelva a verificarlo en 60 segundos.

Dado que rtmpdump solo comete errores cuando no hay datos de transmisión, no parece que sería una buena idea intentar usarlo para monitorear una transmisión, pero quizás estoy equivocado.

Sería fácil si estaba haciendo esto sobre una base de caso por caso, de forma manual, pero estoy tratando de automatizar la tarea de corrientes de grabación automáticamente si están disponibles.

¿Alguien ha encontrado una manera de hacer esto? Tal vez algunas otras herramientas que puedo usar en la línea de comandos (linux)? Si ayuda, estoy escribiendo código para esto utilizando Rubí/rieles

+0

hay una manera de hacer la detección de señal a través del servidor de medios Red5. También creo que también puede configurar oyentes en un proceso de VLC. No puedo darle detalles ya que nunca lo he hecho, pero he visto cosas relacionadas con esto en ambos conjuntos de documentación. Espero que ayude – Alex

Respuesta

1

Tal vez se entiende mal, pero ¿por qué no poner un lazo alrededor de él? Si hay una secuencia, supongo que rtmpdump no sale pero registra mientras haya una secuencia. Si no hay un flujo, sale y dormimos por un tiempo y lo intentamos de nuevo.

rtmpdump parece tener una bandera --timeout así que trate de establecer que a algo elevada para reducir la tasa de reintentos, probablemente es bueno tener un sueño de todos modos sin embargo.

poner esto en un record.sh, cmod a + x y ejecutarlo

while true; do 
    rtmpdump ... 
    sleep 60 
done 
2

Puede enviar la información de la corriente en la salida estándar con este comando:

rtmpdump -v -m6 -B6 -r "rtmp://#{URL}" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info 

Este intentará para grabar solo 6 segundos de video y mostrar el resultado. Si la corriente se está ejecutando, sería algo así como:

INFO: Connected... 
Starting Live Stream 
For duration: 6.000 sec 
INFO: Metadata: 
INFO: trackinfo: 
INFO: timescale    50000.00 
INFO: length    19686000.00 
INFO: language    eng 
INFO: sampledescription: 
INFO: sampletype   avc1 
INFO: timescale    48000.00 
INFO: length    18900992.00 
INFO: language    eng 
INFO: sampledescription: 
INFO: sampletype   mp4a 
INFO: audiochannels   2.00 
INFO: audiosamplerate  48000.00 
INFO: videoframerate  25.00 
INFO: aacaot    2.00 
INFO: avclevel    31.00 
INFO: avcprofile   77.00 
INFO: audiocodecid   mp4a 
INFO: videocodecid   avc1 
INFO: width     1047.00 
INFO: height    576.00 
INFO: frameWidth   720.00 
INFO: frameHeight   576.00 
INFO: displayWidth   1047.00 
INFO: displayHeight   576.00 
INFO: framerate    25.00 
INFO: moovposition   32.00 
INFO: duration    393.77 
2033.613 kB/6.02 sec (1.5%) 
Download may be incomplete (downloaded about 1.50%), try resuming 

Si la corriente no está en funcionamiento/falla que sería algo así como:

RTMPDump v2.4 
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL 
Connecting ... 
INFO: Connected... 
ERROR: Closing connection: NetStream.Play.Failed 

es un ejemplo de trabajo con una corriente RTMP pública tomada de aquí VLCStreamTester:

require 'open3' 

rtmp_url = "stream.streetclip.tv:1935/live/high-stream" 
command  = "rtmpdump -v -m6 -B6 -r \"rtmp://#{rtmp_url}\" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info" 

Open3.popen3(command) do |i, o, e, t| 
    puts o.read 
end 

a partir de aquí con el rubí que pueda comprobar fácilmente si un flujo está activo o no (la lectura de la salida de palabras clave), y luego decide grabar o no con el comando usual de rtmpdump. Después de esto, puede construir más lógica y recorrer una matriz de URL en lugar de una única, obteniendo la automatización que necesita.

Cuestiones relacionadas