| | |
| | | InvalidFileExt PicExt = PicExt("") |
| | | ) |
| | | |
| | | const ( |
| | | soFileRtsp = "./runtime/libcffmpeg.so" |
| | | soFileGB = "./runtime/libcffmpeg_gb28181.so" |
| | | ) |
| | | |
| | | // Capture pic |
| | | func Capture(m StreamMode, url string, ext PicExt, w, h, maxTry int) ([]byte, error) { |
| | | func Capture(soFile string, m StreamMode, url string, ext PicExt, w, h, maxTry int) ([]byte, error) { |
| | | gb := false |
| | | if m == GB28181 { |
| | | gb = true |
| | | } else { |
| | | return nil, errors.New("there is no this mode, try capture.Rtsp/capture.GB28181") |
| | | } |
| | | |
| | | if ext == InvalidFileExt { |
| | | ext = JPEGFileExt |
| | | } |
| | | var ret []byte |
| | | var err error |
| | | |
| | | if m == Rtsp { |
| | | err = goffmpeg.InitFFmpeg(soFileRtsp) |
| | | } else if m == GB28181 { |
| | | err = goffmpeg.InitFFmpeg(soFileGB) |
| | | } else { |
| | | err = errors.New("there is no this mode, try capture.Rtsp/capture.GB28181") |
| | | } |
| | | err = goffmpeg.InitFFmpeg(soFile) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | |
| | | ret, err = capt2Data(url, gocv.FileExt(ext), w, h, maxTry) |
| | | conf := goffmpeg.Config{ |
| | | Scale: goffmpeg.ScalePoint, |
| | | Width: w, |
| | | Height: h, |
| | | GB: gb, |
| | | CPU: false, |
| | | } |
| | | gf := goffmpeg.New(conf) |
| | | |
| | | ret, err = capt2Data(gf, url, gocv.FileExt(ext), w, h, maxTry) |
| | | |
| | | gf.Free() |
| | | goffmpeg.FreeFFmpeg() |
| | | |
| | | return ret, err |
| | | } |
| | | |
| | | func capt2Data(url string, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) { |
| | | func capt2Data(gf *goffmpeg.GoFFMPEG, url string, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) { |
| | | |
| | | gf := goffmpeg.New() |
| | | gf.Run(url) |
| | | gf.BuildDecoder() |
| | | |