Skip to content

Instantly share code, notes, and snippets.

@pcunning
Created May 2, 2019 22:21
Show Gist options
  • Save pcunning/1744a63acbd030c792bccdc31bbb47ba to your computer and use it in GitHub Desktop.
Save pcunning/1744a63acbd030c792bccdc31bbb47ba to your computer and use it in GitHub Desktop.
// How to run:
//
// mjpeg-streamer [camera ID] [host:port]
//
// go get -u github.com/hybridgroup/mjpeg
// go get -u github.com/technomancers/piCamera
//
// to run on a pi
// go run -tags pi mjpeg.go 0.0.0.0:8080
//
package main
import (
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/hybridgroup/mjpeg"
"github.com/technomancers/piCamera"
)
var (
err error
stream *mjpeg.Stream
cam *piCamera.PiCamera
)
func main() {
if len(os.Args) < 2 {
fmt.Println("How to run:\n\tmjpe [host:port]")
return
}
// parse args
host := os.Args[1]
// create the mjpeg stream
stream = mjpeg.NewStream()
//config camera
camArgs := piCamera.NewArgs()
camArgs.Width = 1280
camArgs.Height = 960
camArgs.Mode = 1
cam, err = piCamera.New(nil, camArgs)
if err != nil {
log.Fatalf("piam error creating camera: %s", err)
}
cam.Start()
defer cam.Stop()
time.Sleep(time.Second * 2)
// start capturing
go mjpegCapture()
fmt.Println("Capturing. Point your browser to " + host)
// start http server
http.Handle("/", stream)
log.Fatal(http.ListenAndServe(host, nil))
}
func mjpegCapture() {
for {
img, err := cam.GetFrame()
if err != nil {
fmt.Printf("piCam error: %s\n", err)
return
}
stream.UpdateJPEG(img)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment