2012-03-16 16 views
8

Sto cercando un modo per monitorare l'attività su un flusso in modo da poter determinare se ci sia qualcosa che passa attraverso il flusso o meno. Se c'è, inizierò a registrarlo usando rtmpdump.Monitoraggio streaming RTMP, registrazione se disponibile

Immagino che questo funzioni eseguendo un'attività cron che controlla un flusso ogni 60 secondi. Se determina che un flusso sta arrivando, chiama su rtmpdump per iniziare a registrarlo. In caso contrario, non fare nulla e ricontrollare tra 60 secondi.

Poiché rtmpdump è solo una specie di errore quando non ci sono dati di flusso, non sembra che sarebbe una buona idea tentare di usarlo per monitorare un flusso, ma forse ho torto.

Sarebbe facile se stessimo facendo questo caso caso per caso manualmente, ma sto cercando di automatizzare l'attività di registrazione dei flussi automaticamente se sono disponibili.

Qualcuno ha trovato un modo per farlo? Forse alcuni altri strumenti che posso usare in linea di comando (linux)? Se è utile, sto scrivendo il codice per questo usando Ruby/Rails

+0

esiste un modo per rilevare il segnale tramite il media server Red5. Inoltre, penso che puoi anche impostare gli ascoltatori su un processo VLC. Non posso darti dettagli come non l'ho mai fatto, ma ho visto cose relative a questo in entrambi i gruppi di documentazione. Spero possa aiutare – Alex

risposta

1

Forse ti ho capito male, ma perché non lo fai semplicemente ad anello? Se c'è uno stream, presumo che rtmpdump non esca ma registri finché c'è uno stream. Se non c'è un flusso, esce e noi dormiamo per un po 'e riproviamo.

rtmpdump sembra avere un flag di --timeout, quindi prova a impostarlo su qualcosa di alto per ridurre il tasso di tentativi, probabilmente comunque avere un sonno comunque.

mettere questo in un record.sh, cmod a + x ed eseguirlo

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

È possibile inviare le informazioni del flusso stdout con questo comando:

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

Questo tenterà per registrare solo 6 secondi di video e mostrare quale sia stato il risultato. Se il flusso è in esecuzione il risultato sarà qualcosa di simile a:

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 

se il flusso non è in esecuzione/fallisce il risultato sarà qualcosa di simile a:

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

Ecco un esempio di lavoro con un flusso RTMP pubblico tratto da 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 

da qui con il rubino si possa facilmente accertare se un flusso è attivo o meno (leggere l'output per parole chiave), e poi decidere di registrare o non con il solito comando rtmpdump. Dopodiché puoi creare più logica e scorrere in loop una serie di URL anziché uno solo, ottenendo l'automazione di cui hai bisogno.

Problemi correlati