/ipcamerarecorder

Primary LanguageShellMIT LicenseMIT

Overview

A Docker image for recording audio and video streams of an IP based surveillance camera. The camera need to support the RTSP protocol. The streams are processed by ffmpeg.

Usage

You need to specify at least the RTSP URL of the IP camera and a volume to store the recorded data. You may need to read to documentation of your IP camera in order to find the correct URL.

Then you can start the container like this:

docker run -d -e URL="rtsp://user:password@192.168.1.1/live/ch0" -v /my/local/storage_path:/record --restart unless-stopped mytracks/ipcamerarecorder

The container will write mp4 files to the volume mounted to /record. Therefore you may need to specify a user id with the correct permissions. As a default the container is executed using user id 1000.

Configuration

You can configure the container using the following environment variables:

Environment Variable Description Default Value
URL The RTSP URL used to connect to the camera. This has to be a valid RTSP URL for ffmpeg. rtsp://user:password@192.168.1.1/live/ch0
KEEP_DAYS The numbers of days to keep the recorded files. 14
RECORD_LENGTH_SECONDS The length of each individual recording in seconds 3600
FRAMERATE The frame rate for the recording 4
FFMPEG_ARGS Additional command line arguments for ffmpeg.

Some Details

You can specify the length of the recordings using the environment variable RECORD_LENGTH_SECONDS. After this period the container will stop. I have chosen this solution because it was the most reliable solution in case the camera wasn't reachable for some time or in case any other error occurred. Therefore you need to specify --restart unless-stopped when starting the container.

With each start of the container old recordings are deleted. You can specify the number of days to keep old recordings using the environment variable KEEP_DAYS.

Supported Architectures

The following Docker architectures are supported: linux/arm64, linux/arm/v7 and linux/amd64

Kubernetes

You can also run this container in Kubernetes. Here is an example of a pod definition that you can use as a starting point for your configuration:

apiVersion: v1
kind: Pod
metadata:
  name: ipcamerarecorder1
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 1000
  restartPolicy: Always
  hostNetwork: true
  containers:
  - name: ipcamerarecorder
    image: mytracks/ipcamerarecorder
    env:
    - name: URL
      value: "rtsp://user:password@192.168.1.1/live/ch0"
    volumeMounts:
      - mountPath: /record
        name: record
  volumes:
  - name: record
    hostPath:
      path: /my/local/storage_path
      type: Directory

Notes:

  • You need to set hostNetwork: true. Otherwise RTSP will not work. If you know a better solution please let me know.
  • You need to set restartPolicy: Always. Otherwise you will only get a single recording.