IP Kameradan RTSP akışını yakalayın ve saklayın


18

RTSP (h264 mpeg4) akışı sağlayan birkaç IP Kameram var.

URL'ye VLC yoluyla yerel olarak vurma: rtsp: //192.168.0.21: 554 / mpeg4

Kamerayı akışa alabilir ve diske dökebilirim (masaüstümde). Ancak bu dosyaları NAS'ımda (FreeNAS) saklamak istiyorum. RTSP akışını yakalamanın ve diske dökmenin yollarını arıyordum ama hiçbir şey bulamıyorum.

Akışı FreeBSD veya Linux'ta (RaspberryPi) yakalamak ve akış içeriğini Linux veya FreeBSD'ye (tercihen her 30 dakikada bir) yerel bir diske dökmek mümkün mü?

DÜZENLEME: NAS başsızdır (HP N55L veya benzeri) ve RaspberryPi'ler de başsızdır.

Zaten ZoneMinder'a baktım ama küçük bir şeye ihtiyacım var. Akışta hareketi algılamak için belki Hareket'i kullanmayı umuyordum, ancak bu daha sonra gelecek.


Linux için neden VLC kullanmıyorsunuz?
LatinSuD

1
ayy, hem FreeNAS sunucusunun hem de RaspberryPi'nin başsız olduğunu söylemeyi unuttum!

VLC'yi komut satırından kullanabilirsiniz. Önemsiz değil, mümkün.
LatinSuD

RTSP sadece bir protokol olduğundan, sadece h264 içeriğini dökecek mi yoksa kod dönüştürmek için VLC almam gerekiyor mu?

1
Peki bu VLC komut satırı voodoo bir parçası ve üzgünüm bu yüzden burada tam bir cevap vermiyorum. Ben tamamen kod dönüştürme gerekli değildir ama belki konteyner değiştirmek. Umarım bazı VLC uzmanları buraya gelir.
LatinSuD

Yanıtlar:


29

IP kameraların kalitesi değişkendir, bazıları benim deneyimimde düzensiz davranmaktadır. RTSP akışlarıyla uğraşmak, bir doz hata toleransı gerektirir.

Live555 projesi, CLI aracılığıyla RTSP ses / video akışlarını çekmek için nispeten hataya dayanıklı bir RTSP istemci uygulaması, openRTSP sağlar: http://www.live555.com/openRTSP/

Örneğin, bir kameranın RTSP ses / videosunu QuickTime biçimindeki (AVI ve MP4 de mevcuttur) dosyalara kaydetmek için, her 15 dakikada bir dosya:

$ openRTSP -D 1 -c -B 10000000 -b 10000000 -q -Q -F cam_eight -d 28800 -P 900 -t -u admin 123456 rtsp://192.168.1.108:554/11

Bu seçenekler şu anlama gelir:

-D 1 # Quit if no packets for 1 second or more
-c   # Continuously record, after completion of -d timeframe
-B 10000000 # Input buffer of 10 MB
-b 10000000 # Output buffer 10MB (to file)
-q   # Produce files in QuickTime format
-Q   # Display QOS statistics 
-F cam_eight  # Prefix output filenames with this text
-d 28800      # Run openRTSP this many seconds
-P 900        # Start a new output file every -P seconds
-t            # Request camera end stream over TCP, not UDP
-u admin 123456  # Username and password expected by camera
rtsp://192.168.1.108:554/11  # Camera's RTSP URL

-T seçeneğinin kaldırılması, openRTSP'nin varsayılan olarak UDP'ye neden olmasına neden olur ve bu da ağ trafiğini biraz azaltabilir. Size uygun kombinasyonu bulmak için seçeneklerle oynamanız gerekecek.

Açıkçası, kameraların kendileri bazen güvenilmez olabilir veya sadece farklı şekilde uygulanır - soketi beklenmedik şekilde kapatmak o kadar sıra dışı değildir.

Bazen openRTSP istemcisi bu hataları yakalamaz. Bu yüzden her openRTSP istemci örneğinin stdout'unu çağırmak ve izlemek için 'alt süreçler' modülünü kullanarak Python'da bir denetleyiciyi kodlamayı seçtim ve ayrıca dosyaların boyutunun büyümeye devam ettiğini kontrol ettim.

Bu, CCTV endüstrisinin düşük ucunun standartlarla hızlı ve gevşek oynayan bir yan ürünü olduğu görülüyor, RTSP ve ONVIF en sık istismar edilen ikisi.

Neyse ki, genellikle bu sorunları giderebilirsiniz. IP kameralarınız ve denetleyicinizin hepsi birlikte güzel oynamak üzere tasarlanmadığı sürece, ONVIF'i yalnızca bir kez bulma ve ayar yönetimi için kullanın.

Raspbian çalıştıran birkaç Raspberry Pi B + üzerinde openRTSP kullanıyorum. Her 1280x1024 akışı CPU zamanının yaklaşık% 8-10'unu kaplar ve RPi başına sekiz adede kadar kamerayı başarıyla çalıştırarak dosyaları NAS depolama alanına yazdım. Başka bir RPi, tamamlanmış dosyaları ffmpeg ile işler, aramaları tespit etmek için hareket aramak ve bu karelerin dizin PNG'lerini üretmek.

Bu son kısmı yapan ZoneMinder adlı açık kaynaklı bir çaba var, ancak kameralarımla çalıştıramadım. ONVIF desteği ZM'de yeni ve yeni ve 100 $ 'ın altındaki IP kamera yönetimim tarafından üretilen sivilceli RTSP akışları ile iyi görünmüyor.


Harika bir çözüm Kevin, hareket arama / png indeksleme çözümü ile daha fazlasını paylaşabilir misiniz - en azından nerede daha fazla kazacağınız?
Igor

@ Kevin-Prichard Anlamak istedim, 1. Analog SD CVSB'yi IP akışına çevirebilirsem çözümünüz işe yarar mı? (Her bir kaynaktan 1 saatlik parçalar halinde mp4 videoları yakalamak istiyorum) Ve bu tür akışları tek bir ağ üzerinden 7/24 kaydedebilir miyim yoksa ağ aşırı yüklenir mi? 2. Analog SD / CVSB'yi IP akışına dönüştürmek mümkün mü?
CP3O

7

İki sentimi ekleyeceğimi ve BjornR'un cevabını tamamlayacağımı düşündüm.

VLC sürecini periyodik olarak öldürmek için bir cron işi yürütmek yerine, VLC'nin belirli bir süre çalışıp daha sonra kapanmasını söyleyebilir.

Kutumda çalıştırdığım komut bu:

/usr/bin/vlc -vvv rtsp://192.168.1.128:1554/11 --sout=file/ts:/media/path/to/save/location/recording-$(date +"%Y%m%d%H%M%S").ts -I dummy --stop-time=480 vlc://quit

Bu, belirtilen süre boyunca VLC'yi çalıştırır ve daha sonra çıkar. VLC kaydı durduracağı ve açık kalacağı için vlc: // quit parametresi gereklidir. Bu komutun bir döngünün içine yerleştirilmesi gerekir.

Şimdiye kadar bulduğum tek sorun, her yeni kayıt başladığında birkaç saniyeyi kaçırabiliyor olması.


7

Sorunuzu doğru şekilde takip edersem, neden bir Linux sisteminde (RPi) aşağıdaki komutu denemiyorsunuz:

ffmpeg -i rtsp://192.168.0.21:554/mpeg4 -vcodec copy -acodec copy -map 0 -f segment -segment_time 300 -segment_format mp4 "ffmpeg_capture-%03d.mp4"

Bu, videoyu 300 saniyelik parçalar halinde kaydetmelidir. (Klip uzunluğunun giriş ve çıkış kare hızlarınıza bağlı olacağını unutmayın)


5

VLC, akışınızı işlemek için ideal bir aday gibi görünüyor. Bir akışı yakalamak için temel yöntemler Videolan web sitesinde açıklanmaktadır. Aşağıdaki komutu kullanarak D-Link DCS-5222 ağ kameramın çıkışını başarıyla kaydettim:

vlc rtsp://user:password@ip/play1.sdp --sout=file/ogg:mystream.ogv

Bu durumda, çıktıyı yerel olarak kaydetmek işe yarayabilir:

vlc rtsp://192.168.0.21:554/mpeg4 --sout=file/ts:mystream.mpg

Bu vlc işlemi biten bir komut dosyası çalıştırmak ve ben VLC bunu yapabildiğinden emin değilim olarak her 30 dakikada bir yeni bir örnek başlatmak için tavsiye ederim.

NAS'ta depolamaya gelince, yerel dosya sisteminize monte edin.


1
Aynı işi yapmak için FFMPEG'i de kullanabilirsiniz. Cevabın önerdiği gibi NAS'ınızı monte etmeniz gerekecek.
Kinnectus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.