From f963cd025c1aa88ac8b211e24f46ceb0eb64c418 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 07 五月 2019 14:19:29 +0800 Subject: [PATCH] 多个解码单元同时运行,注意tcp地址 --- decoder/main.go | 2 +- decoder/work/service/ipcsender.go | 26 +++++++++++++++++++------- decoder/valib/goffmpeg | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/decoder/main.go b/decoder/main.go index 9b8c5cd..4684779 100644 --- a/decoder/main.go +++ b/decoder/main.go @@ -34,7 +34,7 @@ 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"` diff --git a/decoder/valib/goffmpeg b/decoder/valib/goffmpeg index 7000805..f4f467c 160000 --- a/decoder/valib/goffmpeg +++ b/decoder/valib/goffmpeg @@ -1 +1 @@ -Subproject commit 70008056eb8983dae4ee2c960c043ae69191d03e +Subproject commit f4f467c5a908ddca5d28b61497b8e40c8668fff8 diff --git a/decoder/work/service/ipcsender.go b/decoder/work/service/ipcsender.go index 102c735..6c05f7a 100644 --- a/decoder/work/service/ipcsender.go +++ b/decoder/work/service/ipcsender.go @@ -7,6 +7,7 @@ "decoder/valib/ipc" "encoding/gob" "fmt" + "time" ) // Sender decoder ingo @@ -61,21 +62,32 @@ gf := goffmpeg.New() if gf != nil { s.ffmpeg = gf + } else { + fmt.Println("create decoder ffmpeg error") + return } imageChan := make(chan ImageInfo) dataChan := make(chan []byte) go s.serializeImageInfo(imageChan, dataChan) - gf.ActiveDecoder(func(d *[]byte, w, h *int) { - if *w > 0 && *h > 0 { - img := ImageInfo{*d, *w, *h} - imageChan <- img - } else { - fmt.Println("decode jpg error") + gf.BuildDecoder() + + go func(f *goffmpeg.GoFFMPEG, ch chan<- ImageInfo) { + for { + data, wid, hei := f.GetPicDecoder() + if wid > 0 && hei > 0 { + img := ImageInfo{Data: data, Width: wid, Height: hei} + ch <- img + } else { + time.Sleep(time.Millisecond * time.Duration(10)) + } } - }) + + }(gf, imageChan) + gf.Run(s.streamURL) + i.SendFromChannel(dataChan) } -- Gitblit v1.8.0