Skip to content
Turn any webcam into an IP camera
Go Shell Dockerfile
Branch: master
Clone or download
Latest commit be5863d Oct 6, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
camera Format imports Oct 6, 2019
cmd/cam2ip Update version Oct 6, 2019
handlers Allow HEAD Oct 6, 2019
image Change websocket library Oct 5, 2019
reader New release Jan 27, 2018
server Add timestamp option Oct 6, 2019
video Rename cv3 -> cv4 Oct 5, 2019
AUTHORS Initial commit Oct 3, 2017
COPYING Initial commit Oct 3, 2017
Dockerfile Update Dockerfile Oct 6, 2019 Add darwin build Oct 6, 2019
go.mod Add timestamp option Oct 6, 2019
go.sum Add timestamp option Oct 6, 2019
make.bash Add darwin build Oct 6, 2019


Turn any webcam into an IP camera.

Example (in web browser):




You can also use apps like ffplay or vlc:

ffplay -i http://localhost:56000/mjpeg


Build tags

  • cv2 - build with OpenCV 2.x (go-opencv)
  • cv4 - build with OpenCV 4.x (gocv)
  • jpeg - build with native Go image/jpeg instead of libjpeg-turbo


Binaries are compiled with static OpenCV/libjpeg-turbo libraries, they should just work:


go get -v

This will install app in $GOPATH/bin/cam2ip.

Run in Docker container

docker run --device=/dev/video0:/dev/video0 -p56000:56000 -it gen2brain/cam2ip # on RPi use gen2brain/cam2ip:arm


Usage of cam2ip:
  -bind-addr string
	Bind address [CAM2IP_BIND_ADDR] (default ":56000")
  -delay int
	Delay between frames, in milliseconds [CAM2IP_DELAY] (default 10)
  -height float
	Frame height [CAM2IP_HEIGHT] (default 480)
  -htpasswd-file string
	Path to htpasswd file, if empty auth is disabled [CAM2IP_HTPASSWD_FILE]
  -index int
	Camera index [CAM2IP_INDEX]
	Disable WebGL drawing of images (html handler) [CAM2IP_NOWEBGL]
  -rotate int
	Rotate image, valid values are 90, 180, 270 [CAM2IP_ROTATE]
	Draws timestamp on images [CAM2IP_TIMESTAMP]
  -video-file string
	Use video file instead of camera [CAM2IP_VIDEO_FILE]
  -width float
	Frame width [CAM2IP_WIDTH] (default 640)


  • /html: HTML handler, frames are pushed to canvas over websocket
  • /jpeg: Static JPEG handler
  • /mjpeg: Motion JPEG, supported natively in major web browsers
You can’t perform that action at this time.