mirror of https://bitbucket.org/ausocean/av.git
revid: added input flag for webcam input and added func to handle webcam input using ffmpeg
This commit is contained in:
parent
32e2d61ec1
commit
7118f1566c
|
@ -95,7 +95,7 @@ func handleFlags() revid.Config {
|
|||
var (
|
||||
cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`")
|
||||
|
||||
inputPtr = flag.String("Input", "", "The input type: Raspivid, File")
|
||||
inputPtr = flag.String("Input", "", "The input type: Raspivid, File, Webcam")
|
||||
inputCodecPtr = flag.String("InputCodec", "", "The codec of the input: H264, Mjpeg")
|
||||
output1Ptr = flag.String("Output1", "", "The first output type: Http, Rtmp, File, Udp, Rtp")
|
||||
output2Ptr = flag.String("Output2", "", "The second output type: Http, Rtmp, File, Udp, Rtp")
|
||||
|
@ -143,6 +143,8 @@ func handleFlags() revid.Config {
|
|||
}
|
||||
|
||||
switch *inputPtr {
|
||||
case "webcam":
|
||||
cfg.Input = revid.Webcam
|
||||
case "Raspivid":
|
||||
cfg.Input = revid.Raspivid
|
||||
case "File":
|
||||
|
|
|
@ -91,6 +91,7 @@ const (
|
|||
Udp
|
||||
MpegtsRtp
|
||||
Rtp
|
||||
Webcam
|
||||
)
|
||||
|
||||
// Default config settings
|
||||
|
|
|
@ -259,6 +259,8 @@ func (r *Revid) reset(config Config) error {
|
|||
}
|
||||
|
||||
switch r.config.Input {
|
||||
case Webcam:
|
||||
r.setupInput = r.startWebcam
|
||||
case Raspivid:
|
||||
r.setupInput = r.startRaspivid
|
||||
case File:
|
||||
|
@ -496,6 +498,37 @@ func (r *Revid) startRaspivid() error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (r *Revid) startWebcam() error {
|
||||
r.config.Logger.Log(smartlogger.Info, pkg+"starting webcam")
|
||||
r.cmd = exec.Command("ffmpeg", []string{
|
||||
"-i", "/dev/video0",
|
||||
"-r", "25",
|
||||
"-f", "h264", "-",
|
||||
}...)
|
||||
|
||||
d, err := strconv.Atoi(r.config.FrameRate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
delay := time.Second / time.Duration(d)
|
||||
stdout, err := r.cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = r.cmd.Start()
|
||||
if err != nil {
|
||||
r.config.Logger.Log(smartlogger.Fatal, pkg+"cannot start webcam", "error", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
r.config.Logger.Log(smartlogger.Info, pkg+"reading camera data")
|
||||
err = r.lexTo(r.encoder, stdout, delay)
|
||||
r.config.Logger.Log(smartlogger.Info, pkg+"finished reading camera data")
|
||||
return err
|
||||
}
|
||||
|
||||
// setupInputForFile sets things up for getting input from a file
|
||||
func (r *Revid) setupInputForFile() error {
|
||||
fps, err := strconv.Atoi(r.config.FrameRate)
|
||||
|
|
Loading…
Reference in New Issue