From 2a4041f16c6588921c87df93927e9076c2cc309d Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期一, 08 六月 2020 18:21:19 +0800
Subject: [PATCH] add sdk download impl

---
 service/CamraUpdatesnashot.go |  149 +++++++++++++++++--------------------------------
 1 files changed, 52 insertions(+), 97 deletions(-)

diff --git a/service/CamraUpdatesnashot.go b/service/CamraUpdatesnashot.go
index f99f35e..97846a8 100644
--- a/service/CamraUpdatesnashot.go
+++ b/service/CamraUpdatesnashot.go
@@ -1,95 +1,15 @@
 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/fileServer/WeedFSClient.git"
+	"basic.com/valib/capture.git"
+	"basic.com/valib/logger.git"
+	"errors"
+	"strconv"
+	"webserver/cache"
 )
-
-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")
-	}
-
-	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
-	}
-}
-
+/*浠ヤ笅灞炰簬鏃х増鏈湴鎽勫儚鏈鸿幏鍙栨埅鍥撅紙鍥芥爣鎽勫儚鏈哄簳鍥炬棤娉曞埛鏂帮級
 func processphoto(cid string) (local string, err error) {
 	var camApi dbapi.CameraApi
 	caminfo, err := camApi.GetCameraById(cid)
@@ -102,31 +22,31 @@
 	if err != nil {
 		return "", nil
 	}
-
-	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)
+	//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)
 
 	err = cmd.Run()
 	if err != nil {
-		return "", err
+		//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
 
 	flag.Parse()
-
 	piclocal, err := processphoto(cid)
+	defer os.Remove(piclocal)
 	if err != nil {
 		return "", err
 	}
-
-	resp, err := PostFormBufferData(*fileurl, piclocal, piclocal)
+	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
@@ -139,4 +59,39 @@
 		return "", errors.New("update filelocal to camera fail")
 	}
 	return filename, nil
+}*/
+
+//璋冪敤缁熶竴鎺ュ彛锛屽埛鏂板簳鍥撅紙闆嗘垚鍥芥爣搴曞浘鍒锋柊锛�
+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")
+	}
+
+	m := capture.Rtsp
+	if camera.Type == 1{//鍥芥爣鎽勫儚鏈�
+		m = capture.GB28181
+	}
+	b,err := capture.Capture("libcffmpeg.so",m,camera.Rtsp,capture.JPEGFileExt,1280,720,10)
+	if err == nil{
+		localConf, err2 := cache.GetServerInfo()
+		if err2 !=nil || localConf.WebPicIp == "" {
+			logger.Debug("localConfig is wrong!!!")
+			return "",err2
+		}
+		var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
+		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