| | |
| | | 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 |