| | |
| | | |
| | | // Sender decoder ingo |
| | | type Sender struct { |
| | | ctxIPC *ContextIPC |
| | | ctx context.Context |
| | | |
| | | cameraID string |
| | | streamURL string |
| | |
| | | } |
| | | |
| | | // NewSender Sender |
| | | func NewSender(cameraID, streamURL, ipcURL string) *Sender { |
| | | ctx, cancel := context.WithCancel(context.Background()) |
| | | func NewSender(ctx context.Context, cameraID, streamURL, ipcURL string) *Sender { |
| | | |
| | | fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipcURL, streamURL, cameraID) |
| | | |
| | | return &Sender{ |
| | | ctxIPC: &ContextIPC{ctx, cancel}, |
| | | ctx: ctx, |
| | | |
| | | cameraID: cameraID, |
| | | streamURL: streamURL, |
| | |
| | | func (s *Sender) serializeImageInfo(img <-chan ImageInfo, data chan<- []byte) { |
| | | for { |
| | | select { |
| | | case <-s.ctxIPC.ctx.Done(): |
| | | case <-s.ctx.Done(): |
| | | fmt.Println("stop Sender") |
| | | return |
| | | case i := <-img: |
| | |
| | | |
| | | // RunAsServer run a IPC server |
| | | func (s *Sender) RunAsServer() { |
| | | i := ipc.NewServer(s.ctxIPC.ctx, s.ipcURL) |
| | | i := ipc.NewServer(s.ctx, s.ipcURL) |
| | | fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID) |
| | | s.run(i) |
| | | |
| | |
| | | |
| | | // RunAsClient run as a IPC client |
| | | func (s *Sender) RunAsClient() { |
| | | i := ipc.NewClient(s.ctxIPC.ctx, s.ipcURL) |
| | | i := ipc.NewClient(s.ctx, s.ipcURL) |
| | | fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID) |
| | | s.run(i) |
| | | } |
| | | |
| | | // Stop stop run decoder, must run in goroutine |
| | | func (s *Sender) Stop() { |
| | | s.ffmpeg.Free() |
| | | s.ctxIPC.cancel() |
| | | } |