| | |
| | | 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 { |
| | |
| | | |
| | | tryTime := 0 |
| | | // 保证有一个关键帧 |
| | | maxTry += 50 |
| | | if maxTry > 60 { |
| | | maxTry = 60 |
| | | } |
| | | maxTry = maxTry * 1000 |
| | | |
| | | var bgrData, jpgData []byte |
| | | var err error |
| | |
| | | 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 |
| | |
| | | } |
| | | break |
| | | } else { |
| | | tryTime++ |
| | | tryTime += 40 |
| | | if tryTime > maxTry { |
| | | break |
| | | } |
| | | time.Sleep(800 * time.Millisecond) |
| | | time.Sleep(40 * time.Millisecond) |
| | | } |
| | | } |
| | | |