mirror of https://bitbucket.org/ausocean/av.git
revid: using smarter startWebcam func as suggested by Dan
This commit is contained in:
parent
7f707288eb
commit
e4e4e217c6
|
@ -499,27 +499,66 @@ func (r *Revid) startRaspivid() error {
|
|||
}
|
||||
|
||||
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", "-",
|
||||
}...)
|
||||
r.config.Logger.Log(smartlogger.Info, pkg+"starting V4L2 camera")
|
||||
|
||||
// ffmpeg -f v4l2 -i /dev/video0 -crf 40 -c:v libx264 -b:v 200000 -maxrate 200000 -bufsize 100000 -g 100 -vf hflip,vflip -r 5 -s 320x240 -f flv -
|
||||
|
||||
args := []string{
|
||||
"-f", "v4l2",
|
||||
"-i", r.config.InputFileName,
|
||||
}
|
||||
|
||||
switch r.config.InputCodec {
|
||||
default:
|
||||
return fmt.Errorf("revid: invalid input codec: %v", r.config.InputCodec)
|
||||
case H264:
|
||||
args = append(args,
|
||||
"-c:v", "libx264",
|
||||
"-g", r.config.IntraRefreshPeriod,
|
||||
)
|
||||
if r.config.QuantizationMode == QuantizationOn {
|
||||
args = append(args, "-crf", r.config.Quantization)
|
||||
}
|
||||
case Mjpeg:
|
||||
args = append(args, "-c:v", "mjpeg")
|
||||
}
|
||||
|
||||
switch {
|
||||
case r.config.FlipHorizontal == true && r.config.FlipVertical == true:
|
||||
args = append(args, "-vf", "hflip,vflip")
|
||||
case r.config.FlipHorizontal == true:
|
||||
args = append(args, "-vf", "hflip")
|
||||
case r.config.FlipVertical == true:
|
||||
args = append(args, "-vf", "vflip")
|
||||
}
|
||||
|
||||
br, err := strconv.Atoi(r.config.Bitrate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
args = append(args, "-b:v", r.config.Bitrate,
|
||||
"-maxrate", r.config.Bitrate,
|
||||
"-bufsize", fmt.Sprint(br/2),
|
||||
"-r", r.config.FrameRate,
|
||||
"-s", fmt.Sprintf("%sx%s", r.config.Width, r.config.Height),
|
||||
"-f", "flv",
|
||||
"-",
|
||||
)
|
||||
|
||||
r.config.Logger.Log(smartlogger.Info, pkg+"ffmpeg args", "ffmpegArgs", strings.Join(args, " "))
|
||||
r.cmd = exec.Command("ffmpeg", args...)
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue