From f4e8f206a6760bdc31734dfcb1c65916b5b76311 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期四, 22 八月 2019 12:05:58 +0800
Subject: [PATCH] add cluster

---
 service/CamraUpdatesnashot.go |  271 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 144 insertions(+), 127 deletions(-)

diff --git a/service/CamraUpdatesnashot.go b/service/CamraUpdatesnashot.go
index adbd955..0ca5c58 100644
--- a/service/CamraUpdatesnashot.go
+++ b/service/CamraUpdatesnashot.go
@@ -1,145 +1,162 @@
 package service
 
 import (
-        "fmt"
-        "time"
-        "flag"
-        "os/exec"
-
-        "bytes"
-        "encoding/json"
-        "errors"
-        "io"
-        "log"
-        "mime/multipart"
-        "net/http"
-        "gocv.io/x/gocv"
-        "path/filepath"
-
-        "basic.com/dbapi.git"
-   )
-
-
+	"basic.com/dbapi.git"
+	"basic.com/fileServer/WeedFSClient.git"
+	"basic.com/valib/capture.git"
+	"errors"
+	"strconv"
+	"webserver/extend/config"
+)
+/*浠ヤ笅灞炰簬鏃х増鏈湴鎽勫儚鏈鸿幏鍙栨埅鍥撅紙鍥芥爣鎽勫儚鏈哄簳鍥炬棤娉曞埛鏂帮級
 func PostFormBufferData(uri string, filepath string, fileName string) (maps map[string]interface{}, err0 error) {
-          // 瑕佹寚瀹氳浆byte鐨勬牸寮�
-            picMat := gocv.IMRead(filepath, gocv.IMReadColor)
-            defer picMat.Close()
-            if picMat.Empty() {
-                     return nil, errors.New("file not exist")
-            }
+	// 瑕佹寚瀹氳浆byte鐨勬牸寮�
+	picMat := gocv.IMRead(filepath, gocv.IMReadColor)
+	defer picMat.Close()
+	if picMat.Empty() {
+		return nil, errors.New("file not exist")
+	}
 
-            pheight := picMat.Rows()
-            pwidth := picMat.Cols()
-            pdata := picMat.ToBytes()
+	pheight := picMat.Rows()
+	pwidth := picMat.Cols()
+	pdata := picMat.ToBytes()
 
-          imgs := gocv.NewMat()
-          imgs, _ = gocv.NewMatFromBytes(pheight, pwidth, gocv.MatTypeCV8UC3, pdata)
-          fdata,_ := gocv.IMEncode(".jpg",imgs)
-          body := &bytes.Buffer{}
-          writer := multipart.NewWriter(body)
-            _, err := writer.CreateFormFile("file", fileName)
-            if err != nil {
-                return nil, err
-            }
-           boundary := writer.Boundary()
-              //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
-              close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
-              file := bytes.NewBuffer(fdata)
-              request_reader := io.MultiReader(body, file, close_buf)
-              //_, err = io.Copy(part, file)
-              //writer.WriteField(key, val)
-              request, err := http.NewRequest("POST", uri, request_reader)
-              request.Header.Add("Content-Type", writer.FormDataContentType())
-              timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms
-              client := &http.Client{Timeout: timeout}
-          resp, err := client.Do(request)
-              if err != nil {
-                  log.Fatal(err)
-                      return nil, err
-              }
-          defer func() {
-              if r := recover(); r != nil {
-                  fmt.Printf("panic鐨勫唴瀹�%v\n", r)
-                      msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�"
-                      if _, ok := r.(error); ok {
-                          msg = r.(error).Error()
-                              fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷")
-                      }
-                  if _, ok := r.(string); ok {
-                      msg = r.(string)
-                          fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷")
-                  }
-                  err0 = errors.New(msg)
-              }
-          }()
-          defer resp.Body.Close()
-          {
-     body := &bytes.Buffer{}
-      _, err := body.ReadFrom(resp.Body)
-          if err != nil {
-              log.Fatal(err)
-          }
-      fmt.Println(resp.StatusCode)
-          //fmt.Println(resp.Header)
-          fmt.Println(body)
-          //decoder := json.NewDecoder(strings.NewReader(body.String()))
-          decoder := make(map[string]interface{})
-          if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
-              return nil, err
-          }
-      return decoder, nil
-          }
+	imgs := gocv.NewMat()
+	imgs, _ = gocv.NewMatFromBytes(pheight, pwidth, gocv.MatTypeCV8UC3, pdata)
+	fdata, _ := gocv.IMEncode(".jpg", imgs)
+	body := &bytes.Buffer{}
+	writer := multipart.NewWriter(body)
+	_, err := writer.CreateFormFile("file", fileName)
+	if err != nil {
+		return nil, err
+	}
+	boundary := writer.Boundary()
+	//close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
+	close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
+	file := bytes.NewBuffer(fdata)
+	request_reader := io.MultiReader(body, file, close_buf)
+	//_, err = io.Copy(part, file)
+	//writer.WriteField(key, val)
+	request, err := http.NewRequest("POST", uri, request_reader)
+	request.Header.Add("Content-Type", writer.FormDataContentType())
+	timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms
+	client := &http.Client{Timeout: timeout}
+	resp, err := client.Do(request)
+	if err != nil {
+		log.Fatal(err)
+		return nil, err
+	}
+	defer func() {
+		if r := recover(); r != nil {
+			fmt.Printf("panic鐨勫唴瀹�%v\n", r)
+			msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�"
+			if _, ok := r.(error); ok {
+				msg = r.(error).Error()
+				fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷")
+			}
+			if _, ok := r.(string); ok {
+				msg = r.(string)
+				fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷")
+			}
+			err0 = errors.New(msg)
+		}
+	}()
+	defer resp.Body.Close()
+	{
+		body := &bytes.Buffer{}
+		_, err := body.ReadFrom(resp.Body)
+		if err != nil {
+			log.Fatal(err)
+		}
+		fmt.Println(resp.StatusCode)
+		//fmt.Println(resp.Header)
+		fmt.Println(body)
+		//decoder := json.NewDecoder(strings.NewReader(body.String()))
+		decoder := make(map[string]interface{})
+		if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
+			return nil, err
+		}
+		return decoder, nil
+	}
 }
-
-
 
 func processphoto(cid string) (local string, err error) {
-    var camApi dbapi.CameraApi
-    caminfo, err := camApi.GetCameraById(cid)
-    _ = caminfo
-    if err != nil {
-       return  "", err
-    }
+	var camApi dbapi.CameraApi
+	caminfo, err := camApi.GetCameraById(cid)
+	_ = caminfo
+	if err != nil {
+		return "", err
+	}
 
-    _, err = exec.LookPath("ffmpeg")
-    if err != nil {
-        return "", nil 
-    }
+	_, err = exec.LookPath("ffmpeg")
+	if err != nil {
+		return "", nil
+	}
+	//piclocal := fmt.Sprintf("%s%s.jpg", *storelocal, time.Now().String())
+	piclocal := fmt.Sprintf("%s.jpg", time.Now().Format("2006-01-02_15_04_05.000000000"))
+	cmd := exec.Command("ffmpeg", "-i", caminfo.Rtsp,
+		//"-y", "-f", "image2", "-t", "0.001",
+		//"-vf", "select='eq(pict_type\\,I)',setpts='N/(25*TB)'",
+		"-s", "1920*1080", piclocal)
 
-    piclocal := fmt.Sprintf("%s%s.jpg",*storelocal,time.Now().String())
-    cmd := exec.Command("ffmpeg", "-i",caminfo.Rtsp, "-y", "-f", "image2","-t", "0.001","-vf","select='eq(pict_type\\,I)',setpts='N/(25*TB)'", "-s","1920*1080", piclocal)
-
-    err = cmd.Run()
-    if err != nil {
-        return "",  err 
-    }
-    return piclocal, nil 
+	err = cmd.Run()
+	if err != nil {
+		//return "", err //ignore error
+	}
+	return piclocal, nil
 }
 
-var storelocal = flag.String("storelcoal","/home/user/workspace/gitblit/", "address of picture produce.") 
-var fileurl    = flag.String("fileurl","http://192.168.1.182:6333/submit", "url of file server.")
+func UpdateSnapshotUrl(cid string) (filename string, err error) {
+	var camApi dbapi.CameraApi
 
-func UpdateSnapshotUrl(cid string)(filename string, err error) {
-    var camApi dbapi.CameraApi
+	flag.Parse()
+	piclocal, err := processphoto(cid)
+	defer os.Remove(piclocal)
+	if err != nil {
+		return "", err
+	}
+	var weedfsUrl = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
+	resp, err := PostFormBufferData(weedfsUrl, piclocal, piclocal)
+	if err != nil {
+		fmt.Println(err)
+		return "", err
+	}
 
-    flag.Parse()
+	fileurl := resp["fileUrl"].(string)
+	filename = filepath.Base(fileurl)
+	ok := camApi.UpdateSnapshotUrl(cid, filename)
+	if !ok {
+		return "", errors.New("update filelocal to camera fail")
+	}
+	return filename, nil
+}*/
 
-     piclocal, err := processphoto(cid)
-     if err != nil {
-        return "", err 
-     }
+//璋冪敤缁熶竴鎺ュ彛锛屽埛鏂板簳鍥撅紙闆嗘垚鍥芥爣搴曞浘鍒锋柊锛�
+func UpdateCapture(cid string) (fileName string,err error){
+	var cameraApi dbapi.CameraApi
+	camera, err := cameraApi.GetCameraById(cid)
+	if err !=nil{
+		return "",errors.New("camera not exist")
+	}
 
-    resp, err := PostFormBufferData(*fileurl, piclocal, piclocal )
-    if err != nil {
-        fmt.Println(err)
-        return "", err
-    }
-
-    fileurl := resp["fileUrl"].(string)
-    filename = filepath.Base(fileurl)
-    ok := camApi.UpdateSnapshotUrl(cid, filename)
-    if !ok {
-        return "",errors.New("update filelocal to camera fail") 
-    }
-    return filename, nil
+	m := capture.Rtsp
+	if camera.Type == 1{//鍥芥爣鎽勫儚鏈�
+		m = capture.GB28181
+	}
+	b,err := capture.Capture("./runtime/libcffmpeg.so",m,camera.Rtsp,capture.JPEGFileExt,1280,720,10)
+	if err == nil{
+		var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
+		weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, camera.Name+".jpg", b)
+		if err != nil {
+			return "",err
+		} else {
+			ok := cameraApi.UpdateSnapshotUrl(cid, weedFilePath)
+			if !ok {
+				return "", errors.New("update camera's snapshot fail")
+			}
+			return weedFilePath, nil
+		}
+	}else{
+		return "",err
+	}
 }

--
Gitblit v1.8.0