package service import ( "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") } 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) _ = caminfo if err != nil { return "", err } _, 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) err = cmd.Run() if err != nil { //return "", err //ignore error } return piclocal, nil } 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 } 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 }*/ //调用统一接口,刷新底图(集成国标底图刷新) 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("./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 } }