视频分析2.0 多进程拆分仓库
zhangmeng
2019-04-30 d3618c4e9ceab273a52813c1f2c462912fb81e59
decoder/main.go
@@ -1,11 +1,10 @@
package main
import (
   "bytes"
   "context"
   "decoder/demo"
   "decoder/valib/ipc"
   "encoding/gob"
   "encoding/json"
   "flag"
   "fmt"
   // "videoServer/demo"
@@ -26,46 +25,81 @@
   flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label")
}
func test() {
   fmt.Println("start test")
   fmt.Println(picFolder)
   demo.SendByIPC(streamURL, "camera1", ipcURL)
// CameraInfo camera info
type CameraInfo struct {
   ID  string `json:"Cameraid"`
   URL string `json:"Rtsp"`
}
type cameraInfo struct {
   cameraID string
   videoURL string
// MsgIPC msg for ipc
type MsgIPC struct {
   CMD  string `json:"Command"`
   Port int    `jsong:"PortIpc"`
}
func recvFromIPC(ctx context.Context, url string) (cameraID, rtspURL string) {
var (
   mapCI = make(map[string]CameraInfo)
   port  = 7001
)
func recvFromIPC(ctx context.Context, url string, ch chan<- CameraInfo) {
   ipc := ipc.NewClient(ctx, url)
   for {
      msg := ipc.Recv()
      var buf bytes.Buffer
      buf.Write(msg)
      dec := gob.NewDecoder(&buf)
      var i cameraInfo
      if err := dec.Decode(&i); err != nil {
         fmt.Println("gob decode CameraImage error", err)
         continue
      if msg != nil {
         fmt.Println(string(msg))
         var c CameraInfo
         if err := json.Unmarshal(msg, &c); err == nil {
            ch <- c
            fmt.Printf("recv camere info %+v\n", c)
         } else {
            fmt.Println(err)
         }
         msgIpc := MsgIPC{"new decoder", port}
         if b, err := json.Marshal(msgIpc); err == nil {
            ipc.Send(b)
         }
      }
      return i.cameraID, i.videoURL
   }
}
func main() {
   flag.Parse()
   ctx, cancel := context.WithCancel(context.Background())
   recvFromIPC(ctx, "tcp://192.168.1.156:7000")
   test()
   cancel()
   // test()
   // ctx, cancel := context.WithCancel(context.Background())
   // ch := make(chan CameraInfo)
   // go recvFromIPC(ctx, "tcp://192.168.1.124:7000", ch)
   // for {
   //    select {
   //    case <-ctx.Done():
   //       return
   //    case c := <-ch:
   //       if _, ok := mapCI[c.ID]; !ok {
   //          mapCI[c.ID] = c
   //          ipc := "tcp://192.168.1.124:" + strconv.Itoa(port)
   //          port++
   //          fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipc, c.URL, c.ID)
   //          url := strings.TrimSpace(c.URL)
   //          id := strings.TrimSpace(c.ID)
   //          i := strings.TrimSpace(ipc)
   //          go demo.SendByIPC(url, id, i)
   //       }
   //    }
   // }
   // cancel()
}
func test() {
   fmt.Println("start test")
   fmt.Println(picFolder)
   demo.SendByIPC(streamURL, "camera1", ipcURL, true)
}