| | |
| | | flag.BoolVar(&asServer, "server", false, "run ipc as server") |
| | | } |
| | | |
| | | // CameraInfo camera info |
| | | // cameraInfo camera info |
| | | type CameraInfo struct { |
| | | ID string `json:"Cameraid"` |
| | | URL string `json:"Rtsp"` |
| | |
| | | mapCameraInfo = make(map[string]CameraInfo) |
| | | |
| | | tcp = `tcp://192.168.1.124:` |
| | | port = 7000 |
| | | port = 7001 |
| | | ) |
| | | |
| | | func recvCameraInfoFromIPC(ctx context.Context, url string, ch chan<- CameraInfo) { |
| | |
| | | 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) |
| | |
| | | } |
| | | d.RunAsClient() |
| | | } |
| | | |
| | | func test() { |
| | | fmt.Println("start test") |
| | | |
| | |
| | | Width int |
| | | Height int |
| | | |
| | | CameraID string |
| | | // CameraID string |
| | | } |
| | | |
| | | // ContextIPC server context |
| | |
| | | func NewSender(cameraID, streamURL, ipcURL string) *Sender { |
| | | ctx, cancel := context.WithCancel(context.Background()) |
| | | |
| | | fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipcURL, streamURL, cameraID) |
| | | |
| | | return &Sender{ |
| | | ctxIPC: &ContextIPC{ctx, cancel}, |
| | | |
| | |
| | | } |
| | | b := buf.Bytes() |
| | | data <- b |
| | | fmt.Printf("send %d length data ipc address %s\n", len(b), s.ipcURL) |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | gf.ActiveDecoder(func(d *[]byte, w, h *int) { |
| | | if *w > 0 && *h > 0 { |
| | | i := ImageInfo{*d, *w, *h, s.cameraID} |
| | | imageChan <- i |
| | | img := ImageInfo{*d, *w, *h} |
| | | imageChan <- img |
| | | } else { |
| | | fmt.Println("decode jpg error") |
| | | } |
| | | }) |
| | | gf.Run(s.streamURL) |
| | | |
| | | i.SendFromChannel(dataChan) |
| | | } |
| | | |
| | | // RunAsServer run a IPC server |
| | | func (s *Sender) RunAsServer() { |
| | | s.run(ipc.NewServer(s.ctxIPC.ctx, s.ipcURL)) |
| | | i := ipc.NewServer(s.ctxIPC.ctx, s.ipcURL) |
| | | fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID) |
| | | s.run(i) |
| | | |
| | | } |
| | | |
| | | // RunAsClient run as a IPC client |
| | | func (s *Sender) RunAsClient() { |
| | | s.run(ipc.NewClient(s.ctxIPC.ctx, s.ipcURL)) |
| | | i := ipc.NewClient(s.ctxIPC.ctx, s.ipcURL) |
| | | fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID) |
| | | s.run(i) |
| | | } |
| | | |
| | | // Stop stop run decoder, must run in goroutine |