zhangmeng
2023-12-26 0ead91b8788b382d0d1e7f6eda3f1d008ce39602
capture.go
@@ -38,10 +38,39 @@
   InvalidFileExt PicExt = PicExt("")
)
// capture pic
func captureGB28181(soFile string, url string, maxTry int) ([]byte, error) {
   var ret []byte
   var err error
   err = goffmpeg.InitFFmpeg(soFile)
   if err != nil {
      return nil, err
   }
   reterr := fmt.Errorf("gb28181 try %d times to capture image, is url correct?", maxTry)
   // for i := 0; i < maxTry; i++ {
   ret = goffmpeg.GetGBJpg(url, maxTry)
   if len(ret) > 0 {
      reterr = nil
      // break
   }
   // }
   goffmpeg.FreeFFmpeg()
   return ret, reterr
}
// Capture pic
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 m == GB28181 {
      return captureGB28181(soFile, url, maxTry)
   }
   if ext == InvalidFileExt {
@@ -77,10 +106,7 @@
   tryTime := 0
   // 保证有一个关键帧
   maxTry += 50
   if maxTry > 60 {
      maxTry = 60
   }
   maxTry = maxTry * 1000
   var bgrData, jpgData []byte
   var err error
@@ -89,8 +115,12 @@
      data, ow, oh, _ := gf.GetYUV()
      if ow > 0 && oh > 0 {
         bgrData = yuv2bgr(data, ow, oh)
         if ow*oh*3 != len(data) {
            // data 不是 bgr 格式,需要转换
            bgrData = yuv2bgr(data, ow, oh)
         } else {
            bgrData = data
         }
         if w > 0 && h > 0 {
            bgrData = bgresize(bgrData, ow, oh, w, h)
            ow, oh = w, h
@@ -102,11 +132,11 @@
         }
         break
      } else {
         tryTime++
         tryTime += 40
         if tryTime > maxTry {
            break
         }
         time.Sleep(800 * time.Millisecond)
         time.Sleep(40 * time.Millisecond)
      }
   }