2012-03-16 27 views
8

Tôi đang tìm cách theo dõi hoạt động trên luồng để tôi có thể xác định xem có điều gì xảy ra qua luồng hay không. Nếu có, tôi sẽ bắt đầu ghi nó bằng cách sử dụng rtmpdump.Theo dõi luồng RTMP, ghi lại nếu có sẵn

Tôi tưởng tượng điều này hoạt động bằng cách chạy tác vụ cron kiểm tra luồng sau mỗi 60 giây. Nếu nó xác định rằng một luồng đang đi qua, sau đó gọi rtmpdump để bắt đầu ghi nó. Nếu không, sau đó không làm gì và kiểm tra lại sau 60 giây.

Vì rtmpdump chỉ là lỗi khi không có dữ liệu luồng, có vẻ như không nên sử dụng nó để theo dõi luồng, nhưng có lẽ tôi sai.

Sẽ dễ dàng nếu tôi thực hiện việc này theo từng trường hợp theo cách thủ công, nhưng tôi đang cố tự động hóa nhiệm vụ ghi luồng tự động nếu chúng khả dụng.

Có ai đi qua một cách để làm điều này không? Có lẽ một số công cụ khác tôi có thể sử dụng trong dòng lệnh (linux)? Nếu nó giúp, tôi đang viết mã cho điều này bằng cách sử dụng Ruby/Rails

+0

có cách phát hiện tín hiệu thông qua máy chủ phương tiện Red5. Ngoài ra tôi nghĩ rằng bạn cũng có thể thiết lập người nghe trên một quá trình VLC. Tôi không thể cung cấp cho bạn chi tiết như tôi đã không bao giờ thực hiện nó nhưng tôi đã nhìn thấy các công cụ liên quan đến điều này trong cả hai bộ tài liệu. hy vọng rằng sẽ giúp – Alex

Trả lời

1

Có lẽ tôi hiểu lầm bạn nhưng tại sao không chỉ đặt một vòng quanh nó? Nếu có luồng, tôi giả định rtmpdump không thoát nhưng ghi lại miễn là có luồng. Nếu không có một dòng, nó thoát ra và chúng ta ngủ một lúc và thử lại.

rtmpdump dường như có cờ −−timeout vì vậy hãy thử đặt điều đó thành thứ gì đó cao để giảm tỷ lệ thử lại, có thể là tốt để ngủ.

đặt này trong record.sh, CMOD a + x và chạy nó

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

Bạn có thể gửi các thông tin của con suối để thiết bị xuất chuẩn bằng lệnh này:

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

này sẽ cố gắng để ghi lại chỉ 6 giây video và hiển thị kết quả là gì. Nếu dòng đang chạy nó sẽ ra cái gì đó như:

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 

Nếu dòng không chạy/không nó sẽ ra cái gì đó như:

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

Dưới đây là một ví dụ làm việc với một dòng RTMP nào lấy từ 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 

Từ đây với ruby ​​bạn có thể dễ dàng kiểm tra xem một dòng đang hoạt động hay không (đọc đầu ra cho các từ khóa), và sau đó quyết định để ghi lại hay không với lệnh rtmpdump thông thường. Sau đó, bạn có thể xây dựng nhiều logic hơn và lặp qua một chuỗi các URL thay vì một URL duy nhất, nhận được tự động hóa mà bạn cần.

Các vấn đề liên quan