Cam is a simple IP camera proxy: it polls single-frame JPEG output from one or more IP cameras, and serves the frames out over HTTP in JPEG and MJPEG format.
This was a quick and dirty solution developed for a friend. More serious applications may benefit from ffmpeg, gstreamer, or a dedicated IP camera package.
Clone the source:
$ git clone https://github.com/lnmx/cam
$ cd cam
Build the cam executable:
$ export GOPATH=`pwd`
# Windows: set GOPATH=%CD%
$ go build cam
Edit config.json to set up the listening port and source cameras, ex:
{
"server": { "addr": "0.0.0.0:8080" },
"sources": [
{ "name": "camera1", "url": "http://camera1/jpeg.cgi" "refresh": 1.5
},
{ "name": "camera2", "url": "http://camera2/jpeg.cgi", "user": "test", "pass": "secret",
"refresh": 1
}
]
}
Include user and pass if the camera requires HTTP basic authentication.
The refresh parameter sets the number of seconds between frames.
Run cam:
$ ./cam
2016/02/02 08:08:08 connecting camera2 to http://camera2/jpeg.cgi
2016/02/02 08:08:08 connecting camera1 to http://camera1/jpeg.cgi
2016/02/02 08:08:08 http server listening on 0.0.0.0:8080
2016/02/02 08:08:08 connected to camera1
2016/02/02 08:08:08 connected to camera2
...
Output URLs are based on the sources/name attribute in config.json. Each
camera has a JPEG and MJPEG output. For our example configuration:
- JPEG:
http://cam-address:8080/camera1.jpeg - MJPEG:
http://cam-address:8080/camera1.mjpeg