บันทึกสตรีม RTSP จากกล้อง IP และจัดเก็บ


18

ฉันมีกล้อง IP สองสามตัวที่ส่งกระแสข้อมูล RTSP (h264 mpeg4)

กดปุ่ม URL ในเครื่องผ่าน VLC: rtsp: //192.168.0.21: 554 / mpeg4

ฉันสามารถสตรีมกล้องและถ่ายโอนข้อมูลไปยังดิสก์ (บนเดสก์ท็อปของฉัน) อย่างไรก็ตามฉันต้องการเก็บไฟล์เหล่านี้ไว้ใน NAS ของฉัน (FreeNAS) ฉันกำลังหาวิธีจับกระแส RTSP และทิ้งลงดิสก์ แต่ฉันไม่พบอะไรเลย

เป็นไปได้หรือไม่ที่จะจับกระแสข้อมูลบน FreeBSD หรือ Linux (RaspberryPi) และถ่ายโอนเนื้อหาที่สตรีมไปยังดิสก์โลคัลไปยัง Linux หรือ FreeBSD - ดีกว่าทุกๆ 30 นาที?

แก้ไข: NAS นั้นไร้หัว (HP N55L หรืออะไรบางอย่าง) และ RaspberryPi นั้นก็ไร้หัวเช่นกัน

ฉันดูเป็น ZoneMinder แล้ว แต่ต้องการอะไรเล็ก ๆ ฉันหวังว่าอาจใช้ Motion เพื่อตรวจจับการเคลื่อนไหวในสตรีม แต่จะมาภายหลัง


ทำไมไม่ใช้ VLC สำหรับ linux?
LatinSuD

1
อ๊ะฉันลืมที่จะพูดถึงว่าทั้งเซิร์ฟเวอร์ FreeNAS และ RaspberryPi นั้นไร้ความคิด!

คุณสามารถใช้ VLC จากบรรทัดคำสั่ง ไม่สำคัญ แต่ก็เป็นไปได้
LatinSuD

เนื่องจาก RTSP เป็นเพียงโปรโตคอลมันจะถ่ายโอนเนื้อหา h264 หรือฉันต้องรับ VLC เพื่อแปลงรหัสหรือไม่

1
นั่นเป็นส่วนหนึ่งของ VLC บรรทัดคำสั่ง Voodoo และขออภัยนั่นเป็นสาเหตุที่ฉันไม่ได้ให้คำตอบแบบเต็มกับคุณที่นี่ ฉันคิดว่าการแปลงรหัสไม่จำเป็น แต่อาจเปลี่ยนคอนเทนเนอร์ ฉันหวังว่าผู้เชี่ยวชาญ VLC บางคนจะปรากฏที่นี่
LatinSuD

คำตอบ:


29

กล้อง IP มีคุณภาพที่แตกต่างกันบ้างก็ทำงานผิดปกติในประสบการณ์ของฉัน การจัดการกับสตรีม RTSP ของพวกเขาต้องการปริมาณความทนทานต่อความผิดพลาด

โปรเจ็กต์ Live555 ให้การใช้งานไคลเอนต์ RTSP ที่ทนทานต่อข้อผิดพลาดอย่าง openRTSP สำหรับดึงกระแสข้อมูลเสียง / วิดีโอ RTSP ผ่าน CLI: http://www.live555.com/openRTSP/

ตัวอย่างเช่นหากต้องการบันทึกไฟล์เสียง / วิดีโอ RTSP ของกล้องในรูปแบบ QuickTime (มี AVI และ MP4 ให้ใช้งาน) หนึ่งไฟล์ทุก 15 นาที:

$ 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

ตัวเลือกเหล่านี้หมายถึง:

-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 ทำให้ openRTSP เป็นค่าดีฟอลต์เป็น UDP แทนซึ่งสามารถลดทราฟฟิกเครือข่ายได้เล็กน้อย คุณจะต้องเล่นกับตัวเลือกเพื่อหาชุดค่าผสมที่เหมาะสมกับคุณ

ตรงไปตรงมา, กล้องของตัวเองบางครั้งก็ไม่น่าเชื่อถือหรือเพียงแค่การใช้งานที่แตกต่างกันเหมือนปิดซ็อกเก็ตโดยไม่คาดคิดไม่ได้ทั้งหมดที่ผิดปกติ

บางครั้งไคลเอนต์ openRTSP ไม่สามารถตรวจจับสิ่งผิดพลาดเหล่านี้ได้ ดังนั้นฉันเลือกที่จะเขียนโค้ดคอนโทรลเลอร์ใน Python โดยใช้โมดูล 'subprocesses' เพื่อเรียกใช้และตรวจสอบ stdout ของแต่ละอินสแตนซ์ไคลเอนต์ openRTSP และตรวจสอบว่าไฟล์มีการขยายขนาดอย่างต่อเนื่อง

สิ่งนี้ดูเหมือนจะเป็นผลพลอยได้จากอุตสาหกรรมกล้องวงจรปิดระดับล่างที่เล่นได้อย่างรวดเร็วและหลวมด้วยมาตรฐาน RTSP และ ONVIF ซึ่งทั้งสองถูกใช้งานในทางที่ผิดบ่อยที่สุด

โชคดีที่คุณมักจะสามารถแก้ไขปัญหาเหล่านี้ได้ ยกเว้นว่ากล้อง IP และคอนโทรลเลอร์ของคุณได้รับการออกแบบมาให้เล่นร่วมกันได้ดีให้ใช้ ONVIF สำหรับการค้นหาและจัดการการตั้งค่าเพียงครั้งเดียวเท่านั้น

ฉันใช้ openRTSP กับ Raspberry Pi B + บางตัวที่รัน Raspbian สตรีม 1280x1024 แต่ละรายการใช้เวลาประมาณ 8-10% ของซีพียูและฉันสามารถใช้งานกล้องได้ถึงแปดตัวต่อ RPi โดยเขียนไฟล์ไปยังที่เก็บข้อมูล NAS RPi อื่นประมวลผลไฟล์ที่เสร็จสมบูรณ์ด้วย ffmpeg ค้นหาการเคลื่อนไหวและสร้างดัชนี PNG ของเฟรมเหล่านั้นเพื่อช่วยในการตรวจหาจุดบกพร่อง

มีความพยายามโอเพนซอร์ซที่เรียกว่า ZoneMinder ซึ่งทำหน้าที่ส่วนหลังนี้ แต่ฉันไม่สามารถใช้งานได้กับกล้องของฉัน การสนับสนุน ONVIF เป็นเรื่องใหม่และใกล้จะเกิดขึ้นใน ZM และดูเหมือนว่าจะไม่ได้รับการตอบรับที่ดีนักกับกระแสข้อมูล RTSP จำนวนมากที่ผลิตโดยโรงพยาบาลสัตว์ของฉันที่มีกล้อง IP ต่ำกว่า $ 100


ทางออกที่ยอดเยี่ยมของ Kevin คุณช่วยแบ่งปันเพิ่มเติมกับโซลูชันการค้นหาการทำดัชนี / png ได้หรือไม่?
อิกอร์

@ Kevin-Prichard ฉันต้องการเข้าใจ 1. ถ้าฉันสามารถแปลงว่า Analog SD CVSB เป็น IP สตรีมโซลูชันของคุณจะทำงานได้ไหม? (ฉันต้องการบันทึกวิดีโอ mp4 ในแต่ละชั่วโมง 1 ชั่วโมงจากแต่ละแหล่ง) และฉันจะสามารถบันทึกสตรีม 300 รายการดังกล่าวบนเครือข่ายเดียว 24/7 หรือจะใช้เครือข่ายนี้มากเกินไปหรือไม่ 2. เป็นไปได้ไหมที่จะแปลง Analog SD / CVSB เป็น IP stream?
CP3O

7

ฉันแค่คิดว่าฉันจะเพิ่มสองเซ็นต์ของฉันและเติมเต็มคำตอบของ BjornR

แทนที่จะเรียกใช้งาน cron เพื่อฆ่ากระบวนการ VLC เป็นระยะ ๆ เราสามารถบอก VLC ให้ทำงานตามระยะเวลาที่กำหนดและปิดหลังจากนั้น

นี่คือคำสั่งที่ฉันรันบนกล่อง:

/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

สิ่งนี้จะเรียกใช้ VLC ตามระยะเวลาที่กำหนดและออกในภายหลัง จำเป็นต้องใช้พารามิเตอร์ vlc: // quit เนื่องจาก VLC จะหยุดการบันทึกและเปิดอยู่ คำสั่งนี้ต้องอยู่ในลูป

ปัญหาเดียวที่ฉันพบจนถึงขณะนี้คืออาจพลาดไม่กี่วินาทีทุกครั้งที่เริ่มการบันทึกใหม่


7

ถ้าฉันทำตามคำถามของคุณถูกต้องทำไมคุณไม่ลองคำสั่งต่อไปนี้บนระบบ Linux (RPi):

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"

การดำเนินการนี้ควรบันทึกวิดีโอเป็นชิ้น ๆ 300 วินาที (โปรดทราบว่าความยาวคลิปจะขึ้นอยู่กับอัตราเฟรมอินพุตและเอาท์พุตของคุณ)


5

VLC ดูเหมือนจะเป็นตัวเลือกที่เหมาะสมที่สุดในการประมวลผลสตรีมของคุณ วิธีการพื้นฐานในการจับกระแสมีอธิบายไว้ในเว็บไซต์ Videolan ฉันบันทึกผลลัพธ์ของกล้องเครือข่าย D-Link DCS-5222 ของฉันสำเร็จโดยใช้คำสั่งต่อไปนี้:

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

ในกรณีของคุณสิ่งนี้อาจใช้เพื่อบันทึกผลลัพธ์ในเครื่อง:

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

ฉันขอแนะนำให้เรียกใช้สคริปต์ที่สิ้นสุดกระบวนการ vlc นี้และเปิดตัวอินสแตนซ์ใหม่ทุก ๆ 30 นาทีเนื่องจากฉันไม่แน่ใจว่า VLC สามารถทำสิ่งนี้ได้

สำหรับการจัดเก็บบน NAS เพียงติดตั้งกับระบบไฟล์โลคัลของคุณ


1
คุณสามารถใช้ FFMPEG เพื่อทำงานเดียวกันได้ คุณยังจะต้องติดตั้ง NAS ของคุณตามคำแนะนำ
Kinnectus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.