2012-03-16 20 views
8

पर रिकॉर्ड करें, मैं स्ट्रीम पर गतिविधि की निगरानी करने का एक तरीका ढूंढ रहा हूं ताकि मैं यह निर्धारित कर सकूं कि स्ट्रीम के माध्यम से कुछ भी है या नहीं। यदि ऐसा है, तो मैं rtmpdump का उपयोग कर इसे रिकॉर्ड करना शुरू कर दूंगा।मॉनिटर आरटीएमपी स्ट्रीम,

मुझे लगता है कि यह एक क्रॉन कार्य चलाकर काम कर रहा है जो हर 60 सेकंड में स्ट्रीम की जांच करता है। यदि यह निर्धारित करता है कि एक स्ट्रीम आ रही है, तो रिकॉर्डिंग शुरू करने के लिए rtmpdump पर कॉल करें। यदि नहीं, तो कुछ भी नहीं करें और 60 सेकंड में फिर से जांचें।

चूंकि कोई स्ट्रीम डेटा नहीं होने पर rtmpdump की तरह त्रुटियों की तरह, ऐसा लगता है कि स्ट्रीम की निगरानी करने के लिए इसका उपयोग करने का प्रयास करना एक अच्छा विचार नहीं होगा, लेकिन शायद मैं गलत हूं।

यह आसान होगा अगर मैं इसे केस-दर-मामले आधार पर मैन्युअल रूप से कर रहा था, लेकिन मैं उपलब्ध होने पर स्ट्रीम को स्वचालित रूप से रिकॉर्ड करने का कार्य स्वचालित करने की कोशिश कर रहा हूं।

क्या कोई ऐसा करने के लिए किसी भी तरह से आया है? शायद कुछ अन्य उपकरण मैं कमांड लाइन (लिनक्स) में उपयोग कर सकते हैं? अगर यह मदद करता है, तो मैं रूबी/रेल

+0

Red5 मीडिया सर्वर के माध्यम से सिग्नल डिटेक्शन करने का एक तरीका है। इसके अलावा मुझे लगता है कि आप वीएलसी प्रक्रिया पर श्रोताओं को भी सेट कर सकते हैं। मैं आपको विवरण नहीं दे सकता क्योंकि मैंने इसे कभी नहीं किया है लेकिन मैंने दस्तावेज़ों के दोनों सेटों में इससे संबंधित सामानों को देखा है। उम्मीद है की वो मदद करदे – Alex

उत्तर

1

का उपयोग कर इसके लिए कोड लिख रहा हूं, शायद मैं आपको गलत समझा लेकिन क्यों न सिर्फ इसके चारों ओर एक लूप डाला? यदि कोई स्ट्रीम है, तो मुझे लगता है कि rtmpdump बाहर नहीं निकलता है लेकिन स्ट्रीम होने तक रिकॉर्ड करता है। यदि कोई धारा नहीं है, तो यह निकलती है और हम थोड़ी देर के लिए सोते हैं और पुनः प्रयास करते हैं।

rtmpdump में एक टाइमटाइम ध्वज लगता है, इसलिए रीट्रीज़ की दर को कम करने के लिए कुछ उच्च करने की कोशिश करें, शायद वैसे भी नींद लें। एक record.sh में

पुट इस, cmod एक + x और यह

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

आप इस आदेश के साथ stdout करने के लिए धारा के जानकारी भेज सकते हैं चलाएँ:

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 कमांड। इसके बाद आप एक की बजाय यूआरएल की एक सरणी के माध्यम से अधिक तर्क और पाश बना सकते हैं, जिससे आपको आवश्यक स्वचालन मिल रहा है।

संबंधित मुद्दे