package main import ( "context" "decoder/demo" "decoder/valib/ipc" "encoding/json" "flag" "fmt" // "videoServer/demo" ) var ( streamURL string picFolder string ipcURL string proc string ) func init() { flag.StringVar(&streamURL, "i", "rtsp://192.168.1.203:8554/16.mkv", "input url") flag.StringVar(&picFolder, "f", ".", "test pic folder") flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label") } // CameraInfo camera info type CameraInfo struct { ID string `json:"Cameraid"` URL string `json:"Rtsp"` } // MsgIPC msg for ipc type MsgIPC struct { CMD string `json:"Command"` Port int `jsong:"PortIpc"` } 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() 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) } } } } func main() { flag.Parse() 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) }