2012-03-16 3 views
8

Я ищу способ отслеживания активности в потоке, чтобы я мог определить, есть ли что-либо в потоке или нет. Если есть, я начну записывать его с помощью rtmpdump.Мониторинг потока RTMP, запись, если таковая имеется

Я предполагаю, что это работает, запустив задачу cron, которая проверяет поток каждые 60 секунд. Если он определяет, что поток проходит, затем вызовите rtmpdump, чтобы начать его запись. Если нет, то ничего не делать и снова проверить через 60 секунд.

Поскольку rtmpdump просто вызывает ошибки, когда нет данных потока, похоже, было бы неплохо попытаться использовать его для контроля потока, но, возможно, я ошибаюсь.

Было бы легко, если бы я делал это в каждом конкретном случае вручную, но я пытаюсь автоматизировать задачу записи потоков автоматически, если они доступны.

У кого-нибудь есть способ сделать это? Возможно, некоторые другие инструменты, которые я могу использовать в командной строке (linux)? Если это помогает, я пишу код для этого, используя Ruby/Rails

+0

theres способ обнаружения сигнала через сервер мультимедиа Red5. Также я думаю, что вы также можете установить слушателей в процессе VLC. Я не могу дать вам подробностей, поскольку я никогда не делал этого, но я видел вещи, связанные с этим в обоих наборах документации. надеюсь, это поможет – Alex

ответ

1

Возможно, я вас неправильно понял, но почему бы не просто поместить вокруг него петлю? Если есть поток, я полагаю, что rtmpdump не выходит, а записывает, пока есть поток. Если нет потока, он выходит, и мы спим некоторое время и повторим попытку.

У rtmpdump есть флаг --timeout, поэтому попробуйте установить что-то высокое, чтобы уменьшить скорость повторных попыток, возможно, хорошо хоть сон.

положить это в record.sh, CMOD а + х и запустить его

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

Вы можете отправить информацию о потоке на стандартный вывод с помощью этой команды:

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

Это будет пытаться записать всего 6 секунд видео и показать, какой результат был. Если поток работает это будет что-то вроде:

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 

Если поток не работает/не удается, то будет что-то вроде:

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

Вот рабочий пример с потоком общественного RTMP, взятой из 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 

Отсюда с рубином вы можете легко проверить, активен ли не один поток (чтение выход для ключевых слов), а затем решили записать или нет с обычная команда rtmpdump. После этого вы можете создавать больше логики и циклически перебирать массив URL-адресов вместо одного, получая необходимую вам автоматизацию.

Смежные вопросы