IP 카메라에서 RTSP 스트림 캡처 및 저장


18

RTSP (h264 mpeg4) 스트림을 출력하는 IP 카메라가 몇 대 있습니다.

VLC를 통해 URL을 로컬로 타격 : rtsp : //192.168.0.21 : 554 / mpeg4

카메라를 스트리밍하고 디스크 (디스크)에 덤프 할 수 있습니다. 그러나이 파일들을 NAS (FreeNAS)에 저장하고 싶습니다. RTSP 스트림을 캡처하여 디스크에 덤프하는 방법을 찾고 있었지만 아무것도 찾을 수 없습니다.

FreeBSD 또는 Linux (RaspberryPi)에서 스트림을 캡처하고 스트리밍 된 컨텐츠를 Linux 또는 FreeBSD의 로컬 디스크 (30 분마다)에 덤프 할 수 있습니까?

편집 : NAS는 헤드리스 (HP N55L 또는 기타)이며 RaspberryPi도 헤드리스입니다.

이미 ZoneMinder를 살펴 봤지만 작은 것이 필요합니다. 스트림에서 모션을 감지하기 위해 모션을 사용하고 싶었지만 나중에 올 것입니다.


리눅스에서 VLC를 사용하지 않는 이유는 무엇입니까?
LatinSuD

1
죄송합니다. FreeNAS 서버와 RaspberryPi는 모두 헤드리스입니다.

명령 행에서 VLC를 사용할 수 있습니다. 사소하지는 않지만 가능합니다.
LatinSuD

RTSP는 단지 프로토콜이므로 h264 내용 만 덤프합니까, 아니면 VLC로 코드 변환해야합니까?

1
VLC 커맨드 라인 부두의 일부입니다. 죄송합니다. 여기에 완전한 답변을 드리지 않습니다. 나는 완전한 트랜스 코딩이 필요하지 않지만 컨테이너를 바꿀 수 있다고 생각합니다. VLC 전문가가 여기에 나타나기를 바랍니다.
LatinSuD

답변:


29

IP 카메라는 품질이 다양하며 일부는 제 경험에서 잘못 작동합니다. RTSP 스트림을 처리하려면 약간의 내결함성이 필요합니다.

Live555 프로젝트는 CLI를 통해 RTSP 오디오 / 비디오 스트림을 가져 오기 위해 비교적 내결함성 RTSP 클라이언트 구현 인 openRTSP를 제공합니다. 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 클라이언트가 이러한 결함을 포착하지 못합니다. 그래서 'subprocesses'모듈을 사용하여 Python에서 컨트롤러를 코딩하여 각 openRTSP 클라이언트 인스턴스의 stdout을 호출하고 모니터링하고 파일 크기가 계속 커지는 지 확인했습니다.

이것은 CCTV 산업의 저가형으로 인해 표준으로 빠르고 느슨하게 재생되는 부산물로 보이며 RTSP와 ONVIF가 가장 많이 남용되는 두 가지입니다.

다행히도 이러한 문제를 해결할 수 있습니다. IP 카메라와 컨트롤러가 모두 잘 재생되도록 설계되지 않은 경우 한 번만 검색 및 설정 관리를 위해 ONVIF 만 사용하십시오.

Raspbian을 실행하는 몇 가지 Raspberry Pi B +에서 openRTSP를 사용합니다. 각 1280x1024 스트림은 CPU 시간의 약 8-10 %를 차지하며 RPi 당 최대 8 대의 카메라를 성공적으로 실행하여 파일을 NAS 스토리지에 씁니다. 다른 RPi는 ffmpeg로 완성 된 파일을 처리하여 움직임을 검색하고 해당 프레임의 인덱스 PNG를 생성하여 침입을 발견하는 데 도움을줍니다.

ZoneMinder라는 오픈 소스 노력이 있는데,이 후자를 수행하지만 내 카메라로 작동시키지 못했습니다. ONVIF 지원은 ZM에서 새롭고 초기 단계이며, 100 달러 미만의 IP 카메라를 사용하여 생성 된 드문 RTSP 스트림과 잘 맞지 않는 것 같습니다.


훌륭한 솔루션 Kevin, 모션 검색 / png 인덱싱 솔루션과 더 많은 것을 공유 할 수 있습니까?
Igor

@ Kevin-Prichard 이해하고 싶었습니다. 1. Analog SD CVSB를 IP 스트림으로 변환 할 수 있다면 솔루션이 효과가 있습니까? (각 소스에서 1 시간 단위로 mp4 비디오를 캡처하고 싶습니다.) 단일 네트워크 24/7을 통해 300 개의 스트림을 녹화 할 수 있습니까, 아니면 네트워크에 과부하가 걸리나요? 2. 아날로그 SD / CVSB를 IP 스트림으로 수렴 할 수 있습니까?
CP3O

7

방금 2 센트를 추가하고 BjornR의 답변을 보완한다고 생각했습니다.

VLC 프로세스를 주기적으로 종료하기 위해 cron 작업을 실행하는 대신 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가 기록을 중지하고 열린 상태로 유지되므로 vlc : // quit 매개 변수가 필요합니다. 이 명령은 루프 안에 있어야합니다.

내가 지금까지 찾은 유일한 문제는 새로운 녹음이 시작될 때마다 몇 초가 빠질 수 있다는 것입니다.


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.