From 1e89d5c86f7a26414f0ca4820f8c55981aaf890f Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期五, 02 八月 2019 10:48:12 +0800
Subject: [PATCH] fix router
---
service/CamraUpdatesnashot.go | 273 +++++++++++++++++++++++++++++-------------------------
1 files changed, 147 insertions(+), 126 deletions(-)
diff --git a/service/CamraUpdatesnashot.go b/service/CamraUpdatesnashot.go
index 60f2eb7..ad5ab9f 100644
--- a/service/CamraUpdatesnashot.go
+++ b/service/CamraUpdatesnashot.go
@@ -1,145 +1,166 @@
package service
import (
- "fmt"
- "time"
- "flag"
- "os/exec"
+ "errors"
+ "path/filepath"
+ "strconv"
+ "webserver/extend/config"
+ "webserver/extend/esutil"
- "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/valib/capture.git"
+)
+/*浠ヤ笅灞炰簬鏃х増鏈湴鎽勫儚鏈鸿幏鍙栨埅鍥撅紙鍥芥爣鎽勫儚鏈哄簳鍥炬棤娉曞埛鏂帮級
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"
+ resp, err := esutil.PostFormBufferData(weedfsUri, camera.Name+".jpg", "file", b)
+ if err != nil {
+ return "",err
+ } else {
+ fileurl := resp["fileUrl"].(string) // 鏂囦欢璺緞
+ filename := filepath.Base(fileurl)
+ ok := cameraApi.UpdateSnapshotUrl(cid, filename)
+ if !ok {
+ return "", errors.New("update camera's snapshot fail")
+ }
+ return filename, nil
+ }
+ }else{
+ return "",err
+ }
}
--
Gitblit v1.8.0