视频分析2.0 多进程拆分仓库
zhangmeng
2019-05-06 e67660d0bf785eb2feaceee1ae96d3a66b23ba49
decoder/main.go
@@ -2,12 +2,13 @@
import (
   "context"
   "decoder/demo"
   "decoder/valib/ipc"
   srv "decoder/work/service"
   "encoding/json"
   "flag"
   "fmt"
   // "videoServer/demo"
   "strconv"
   "strings"
)
var (
@@ -16,6 +17,10 @@
   ipcURL string
   proc   string
   testIt bool
   asServer bool
)
func init() {
@@ -23,6 +28,10 @@
   flag.StringVar(&picFolder, "f", ".", "test pic folder")
   flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label")
   flag.BoolVar(&testIt, "test", false, "use test")
   flag.BoolVar(&asServer, "server", false, "run ipc as server")
}
// CameraInfo camera info
@@ -38,11 +47,13 @@
}
var (
   mapCI = make(map[string]CameraInfo)
   port  = 7001
   mapCameraInfo = make(map[string]CameraInfo)
   tcp  = `tcp://192.168.1.124`
   port = 7000
)
func recvFromIPC(ctx context.Context, url string, ch chan<- CameraInfo) {
func recvCameraInfoFromIPC(ctx context.Context, url string, ch chan<- CameraInfo) {
   ipc := ipc.NewClient(ctx, url)
   for {
@@ -67,39 +78,49 @@
func main() {
   flag.Parse()
   test()
   if testIt {
      test()
   }
   // ctx, cancel := context.WithCancel(context.Background())
   ctx, cancel := context.WithCancel(context.Background())
   // ch := make(chan CameraInfo)
   // go recvFromIPC(ctx, "tcp://192.168.1.124:7000", ch)
   ch := make(chan CameraInfo)
   tcpURL := tcp + strconv.Itoa(port)
   port++
   go recvCameraInfoFromIPC(ctx, tcpURL, 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)
   for {
      select {
      case <-ctx.Done():
         return
      case c := <-ch:
         if _, ok := mapCameraInfo[c.ID]; !ok {
            mapCameraInfo[c.ID] = c
            ipcAddr := tcp + strconv.Itoa(port)
            port++
            fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipcAddr, 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()
            url := strings.TrimSpace(c.URL)
            id := strings.TrimSpace(c.ID)
            addr := strings.TrimSpace(ipcAddr)
            go runSender(id, url, addr)
         }
      }
   }
   cancel()
}
func runSender(cameraID, rtspURL, ipcLabel string) {
   d := srv.NewSender(cameraID, rtspURL, ipcLabel)
   if asServer {
      d.RunAsServer()
   }
   d.RunAsClient()
}
func test() {
   fmt.Println("start test")
   fmt.Println(picFolder)
   demo.SendByIPC(streamURL, "camera1", ipcURL, true)
   runSender("cameraid", streamURL, ipcURL)
}