From ffd71d97fc9eb5236e6a92db408745ddf080217b Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 06 五月 2019 13:28:05 +0800 Subject: [PATCH] 整理代码 --- decoder/main.go | 100 ++++++++++++++++++++++++++++++++++++------------- 1 files changed, 73 insertions(+), 27 deletions(-) diff --git a/decoder/main.go b/decoder/main.go index 0c7f65b..a9d8816 100644 --- a/decoder/main.go +++ b/decoder/main.go @@ -1,14 +1,14 @@ package main import ( - "bytes" "context" - "decoder/demo" "decoder/valib/ipc" - "encoding/gob" + srv "decoder/work/service" + "encoding/json" "flag" "fmt" - // "videoServer/demo" + "strconv" + "strings" ) var ( @@ -17,6 +17,8 @@ ipcURL string proc string + + testIt bool ) func init() { @@ -24,48 +26,92 @@ flag.StringVar(&picFolder, "f", ".", "test pic folder") flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label") + + flag.BoolVar(&testIt, "test", false, "use test") } -func test() { - fmt.Println("start test") - - fmt.Println(picFolder) - - demo.SendByIPC(streamURL, "camera1", ipcURL) +// CameraInfo camera info +type CameraInfo struct { + ID string `json:"Cameraid"` + URL string `json:"Rtsp"` } -type cameraInfo struct { - cameraID string - videoURL string +// MsgIPC msg for ipc +type MsgIPC struct { + CMD string `json:"Command"` + Port int `jsong:"PortIpc"` } -func recvFromIPC(ctx context.Context, url string) (cameraID, rtspURL string) { +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() - - var buf bytes.Buffer - buf.Write(msg) - - dec := gob.NewDecoder(&buf) - - var i cameraInfo - if err := dec.Decode(&i); err != nil { - fmt.Println("gob decode CameraImage error", err) - continue + 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) + } } - return i.cameraID, i.videoURL } } func main() { flag.Parse() + if testIt { + test() + } + ctx, cancel := context.WithCancel(context.Background()) - recvFromIPC(ctx, "tcp://192.168.1.156:7000") + ch := make(chan CameraInfo) + go recvFromIPC(ctx, "tcp://192.168.1.124:7000", ch) + + // demo.SendByIPC("rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream", "cid0", + // "tcp://192.168.1.140:7000", false) + 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 runSender(id, url, i) + } + } + } cancel() - // test() +} +func runSender(cameraID, rtspURL, ipcLabel string) { + d := srv.NewSender(cameraID, rtspURL, ipcLabel) + d.RunAsClient() +} +func test() { + fmt.Println("start test") + + fmt.Println(picFolder) + + runSender("cameraid", streamURL, ipcURL) } -- Gitblit v1.8.0