Skip to content

Instantly share code, notes, and snippets.

@akovardin
Last active July 2, 2018 20:41
Show Gist options
  • Save akovardin/cb44f2006dda437aaf97b14be63b7838 to your computer and use it in GitHub Desktop.
Save akovardin/cb44f2006dda437aaf97b14be63b7838 to your computer and use it in GitHub Desktop.
Go and webcam
// Example program that uses blakjack/webcam library
package main
import (
"fmt"
"os"
"github.com/blackjack/webcam"
)
func main() {
cam, err := webcam.Open("/dev/video0")
if err != nil {
panic(err.Error())
}
defer cam.Close()
var format webcam.PixelFormat
for f, d := range cam.GetSupportedFormats() {
if d == "Motion-JPEG" {
format = f
break
}
}
_, _, _, err = cam.SetImageFormat(format, 320, 240)
if err != nil {
panic(err.Error())
}
err = cam.StartStreaming()
if err != nil {
panic(err.Error())
}
for {
err = cam.WaitForFrame(5)
switch err.(type) {
case nil:
case *webcam.Timeout:
continue
default:
panic(err.Error())
}
frame, err := cam.ReadFrame()
if len(frame) != 0 {
os.Stdout.Write([]byte("Content-Type: image/jpeg\r\n"))
os.Stdout.Write([]byte(fmt.Sprintf("Content-Length: %d\r\n\r\n", len(frame))))
os.Stdout.Write(frame)
os.Stdout.Write([]byte("\r\n"))
os.Stdout.Write([]byte("--informs\r\n"))
os.Stdout.Sync()
} else if err != nil {
panic(err.Error())
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment