| | |
| | | |
| | | // Capture pic |
| | | func Capture(soFile string, m StreamMode, url string, ext PicExt, w, h, maxTry int) ([]byte, error) { |
| | | gb := false |
| | | if m == GB28181 { |
| | | gb = true |
| | | } else if m != Rtsp { |
| | | if m != GB28181 && m != Rtsp { |
| | | return nil, errors.New("there is no this mode, try capture.Rtsp/capture.GB28181") |
| | | } |
| | | |
| | |
| | | return nil, err |
| | | } |
| | | |
| | | conf := goffmpeg.Config{ |
| | | Scale: goffmpeg.ScalePoint, |
| | | Width: w, |
| | | Height: h, |
| | | GB: gb, |
| | | CPU: true, |
| | | } |
| | | gf := goffmpeg.New(conf) |
| | | ret, err = capt2Data(url, m, gocv.FileExt(ext), w, h, maxTry) |
| | | |
| | | ret, err = capt2Data(gf, url, gocv.FileExt(ext), w, h, maxTry) |
| | | |
| | | gf.Free() |
| | | goffmpeg.FreeFFmpeg() |
| | | |
| | | return ret, err |
| | | } |
| | | |
| | | func capt2Data(gf *goffmpeg.GoFFMPEG, url string, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) { |
| | | func capt2Data(url string, m StreamMode, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) { |
| | | |
| | | gf.Run(url) |
| | | gf.BuildDecoder() |
| | | gb := false |
| | | if m == GB28181 { |
| | | gb = true |
| | | } |
| | | |
| | | tryTime := 0 |
| | | |
| | |
| | | var err2 error |
| | | for { |
| | | |
| | | data, wid, hei, _ := gf.GetPicDecoder() |
| | | data, wid, hei := goffmpeg.Decode(url, gb) |
| | | if wid > 0 && hei > 0 { |
| | | img, err := gocv.NewMatFromBytes(hei, wid, gocv.MatTypeCV8UC3, data) |
| | | if err != nil { |
| | |
| | | } |
| | | } |
| | | |
| | | if tryTime > maxTry { |
| | | if tryTime >= maxTry { |
| | | err := fmt.Sprintf("try %d times to capture image, is url correct?\n", tryTime) |
| | | return nil, errors.New(err) |
| | | } |