Chụp luồng RTSP từ Camera IP và lưu trữ


17

Tôi đã có một vài Camera IP tạo ra luồng RTSP (h264 mpeg4).

Nhấn URL cục bộ qua VLC: rtsp: //192.168.0.21: 554 / mpeg4

Tôi có thể truyền phát camera và đổ vào đĩa (trên máy tính để bàn của tôi). Tuy nhiên, tôi muốn lưu trữ các tệp này trên NAS của tôi (FreeNAS). Tôi đã tìm cách để bắt luồng RTSP và đổ chúng vào đĩa nhưng tôi không thể tìm thấy gì.

Có thể bắt luồng trên FreeBSD hoặc Linux (RaspberryPi) và chuyển nội dung được truyền phát sang đĩa cục bộ sang Linux hoặc FreeBSD - tốt nhất là cứ sau 30 phút?

EDIT: NAS không đầu (HP N55L hoặc một cái gì đó) và RaspberryPi's cũng không đầu.

Tôi đã xem xét về ZoneMinder nhưng cần một cái gì đó nhỏ. Tôi đã hy vọng có thể sử dụng Chuyển động để phát hiện chuyển động trên luồng nhưng điều đó sẽ đến sau.


Tại sao không sử dụng VLC cho linux?
LatinSuD

1
Rất tiếc, tôi đã quên đề cập rằng cả máy chủ FreeNAS và RaspberryPi's đều không đầu!

Bạn có thể sử dụng VLC từ dòng lệnh. Không tầm thường, nhưng có thể.
LatinSuD

Vì RTSP chỉ là một giao thức, nó sẽ kết xuất nội dung h264 hay tôi phải lấy VLC để chuyển mã?

1
Vâng, đó là một phần của dòng lệnh VLC voodoo, và xin lỗi đó là lý do tại sao tôi không cung cấp cho bạn câu trả lời đầy đủ ở đây. Tôi nghĩ rằng việc chuyển mã hoàn toàn là không cần thiết nhưng có thể thay đổi container. Tôi hy vọng rằng một số chuyên gia VLC xuất hiện ở đây.
LatinSuD

Câu trả lời:


28

Camera IP có chất lượng khác nhau, một số hoạt động thất thường trong kinh nghiệm của tôi. Xử lý các luồng RTSP của họ đòi hỏi một liều dung sai.

Dự án Live555 cung cấp triển khai ứng dụng khách RTSP tương đối có lỗi, openRTSP, để kéo các luồng âm thanh / video RTSP qua CLI: http://www.live555.com/openRTSP/

Ví dụ: để lưu âm thanh / video RTSP của máy ảnh vào các tệp ở định dạng QuickTime (AVI và MP4 cũng có sẵn), cứ sau 15 phút lại có một tệp:

$ 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

Các tùy chọn này có nghĩa là:

-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

Thay vào đó, việc loại bỏ tùy chọn -t khiến openRTSP mặc định thành UDP, điều này có thể làm giảm lưu lượng mạng một chút. Bạn sẽ cần chơi với các tùy chọn để tìm ra sự kết hợp phù hợp với bạn.

Thành thật mà nói, các máy ảnh đôi khi không đáng tin cậy, hoặc chỉ được thực hiện khác nhau - giống như việc đóng ổ cắm bất ngờ không phải là điều quá bất thường.

Đôi khi, máy khách openRTSP không bắt được những trục trặc này. Vì vậy, tôi đã chọn mã hóa bộ điều khiển trong Python bằng mô-đun 'quy trình con' để gọi và theo dõi thiết bị xuất chuẩn của từng phiên bản máy khách openRTSP và cũng kiểm tra xem các tệp có đang tiếp tục tăng kích thước không.

Đây dường như là sản phẩm phụ của ngành công nghiệp camera quan sát cấp thấp chơi nhanh và lỏng lẻo với các tiêu chuẩn, RTSP và ONVIF là hai sản phẩm thường xuyên bị lạm dụng nhất.

May mắn thay, bạn thường có thể làm việc xung quanh những vấn đề này. Trừ khi các camera IP và bộ điều khiển của bạn đều được thiết kế để chơi cùng nhau, chỉ sử dụng ONVIF để quản lý cài đặt và khám phá một lần duy nhất.

Tôi sử dụng openRTSP trên một vài Raspberry Pi B + đang chạy Raspbian. Mỗi luồng 1280x1024 chiếm khoảng 8-10% thời gian của CPU và tôi đã chạy thành công tới tám camera trên mỗi RPi, ghi các tệp vào bộ lưu trữ NAS. Một RPi khác xử lý các tệp đã hoàn thành với ffmpeg, tìm kiếm chuyển động và tạo ra các PNG chỉ mục của các khung đó, để hỗ trợ phát hiện các đột phá.

Có một nỗ lực nguồn mở được gọi là ZoneMinder thực hiện phần sau này, nhưng tôi không thể làm cho nó hoạt động với các máy ảnh của mình. Hỗ trợ ONVIF là mới và mới trong ZM, và nó dường như không phù hợp với các luồng RTSP nổi bật được sản xuất bởi các máy ảnh IP dưới 100 đô la của tôi.


Giải pháp tuyệt vời Kevin, bạn có thể vui lòng chia sẻ nhiều hơn với giải pháp lập chỉ mục chuyển động / tìm kiếm chuyển động - ít nhất là nơi để tìm hiểu thêm?
Igor

@ Kevin-Prichard Tôi muốn hiểu, 1. Nếu tôi có thể chuyển đổi nói SD SDS tương tự sang luồng IP thì giải pháp của bạn có hoạt động không? (Tôi muốn quay video mp4 trong 1 giờ từ mỗi nguồn) Và tôi có thể ghi 300 luồng như vậy qua một mạng 24/7 không hoặc điều này có làm quá tải mạng không? 2. Có thể chuyển đổi luồng SD / CVSB tương tự sang luồng IP không?
CP3O

7

Tôi chỉ nghĩ rằng tôi sẽ thêm hai xu của mình và bổ sung cho câu trả lời của BjornR.

Thay vì chạy một công việc định kỳ để định kỳ giết quá trình VLC, người ta có thể yêu cầu VLC chạy trong một khoảng thời gian xác định và đóng lại sau đó.

Đây là lệnh mà tôi chạy trên hộp của mình:

/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

Điều này chạy VLC trong khoảng thời gian xác định và thoát sau này. Tham số vlc: // được yêu cầu vì VLC sẽ dừng ghi và duy trì mở. Lệnh này cần được đặt bên trong một vòng lặp.

Vấn đề duy nhất tôi tìm thấy cho đến nay là nó có thể bị mất vài giây mỗi khi bắt đầu ghi âm mới.


7

Nếu tôi làm theo đúng câu hỏi của bạn, tại sao bạn không thử lệnh sau trên hệ thống 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"

Điều này sẽ lưu video trong khối 300 giây. (Lưu ý rằng độ dài clip sẽ phụ thuộc vào tốc độ khung hình đầu vào và đầu ra của bạn)


5

VLC trông giống như một ứng cử viên lý tưởng để xử lý luồng của bạn. Các phương pháp cơ bản để nắm bắt một luồng được mô tả trên trang web của Videolan. Tôi đã thành công ghi lại đầu ra của camera mạng D-Link DCS-5222 của mình bằng lệnh sau:

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

Trong trường hợp của bạn, điều này có thể hoạt động để lưu đầu ra cục bộ:

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

Tôi khuyên bạn nên chạy một kịch bản kết thúc quá trình vlc này và khởi chạy một phiên bản mới cứ sau 30 phút vì tôi không chắc VLC có thể làm điều này.

Đối với việc lưu trữ trên NAS, chỉ cần gắn nó vào hệ thống tệp cục bộ của bạn.


1
Bạn cũng có thể sử dụng FFMPEG để thực hiện chính xác cùng một công việc. Bạn vẫn sẽ cần phải gắn NAS của mình theo câu trả lời cho thấy.
Kinnectus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.