zhangmeng
2019-09-24 7e98d8c98b3c6aed09da67e1652e2b78bc4a964f
capture.go
@@ -34,41 +34,36 @@
   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) {
   if m != GB28181 && m != Rtsp {
      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)
   ret, err = capt2Data(url, m, gocv.FileExt(ext), w, h, maxTry)
   goffmpeg.FreeFFmpeg()
   return ret, err
}
func capt2Data(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 := goffmpeg.New()
   gf.Run(url)
   gf.BuildDecoder()
   gb := false
   if m == GB28181 {
      gb = true
   }
   tryTime := 0
@@ -76,7 +71,7 @@
   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 {
@@ -100,9 +95,8 @@
         time.Sleep(time.Second)
      }
   }
   gf.Free()
   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)
   }