From 7e98d8c98b3c6aed09da67e1652e2b78bc4a964f Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 24 九月 2019 14:17:18 +0800
Subject: [PATCH] use decode only
---
capture.go | 36 +++++++++++++++---------------------
1 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/capture.go b/capture.go
index 936c4fe..050d85c 100644
--- a/capture.go
+++ b/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)
}
--
Gitblit v1.8.0