From 4058b9d3145c9f2c01ad07f0004948636bcbaf7e Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 30 四月 2019 13:55:15 +0800
Subject: [PATCH] init submodule

---
 decoder/work/service/reciever.go |   71 ++++++++++++++
 decoder/main.go                  |   71 ++++++++++++++
 .gitignore                       |    6 
 .gitmodules                      |   12 ++
 decoder/go.mod                   |    5 +
 decoder/work/service/decoder.go  |   88 +++++++++++++++++
 decoder/runtime/libcffmpeg.so    |    0 
 decoder/.vscode/settings.json    |    3 
 decoder/valib/goffmpeg           |    2 
 decoder/.gitignore               |    1 
 analysis/valib/gosdk             |    2 
 decoder/go.sum                   |    2 
 analysis/valib/ipc               |    2 
 decoder/valib/ipc                |    2 
 decoder/demo/simpleIPC.go        |   11 ++
 decoder/work/service/common.go   |   20 ++++
 16 files changed, 292 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0def275..8b6083f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,17 +5,19 @@
 *.obj
 
 # Compiled Dynamic libraries
-*.so
+#*.so
 *.dylib
 *.dll
 
 # Compiled Static libraries
 *.lai
 *.la
-*.a
+#*.a
 *.lib
 
 # Executables
 *.exe
 *.out
 *.app
+
+build/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..0d2f557
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,12 @@
+[submodule "analysis/valib/gosdk"]
+	path = analysis/valib/gosdk
+	url = git://192.168.1.226/valib/gosdk.git
+[submodule "analysis/valib/ipc"]
+	path = analysis/valib/ipc
+	url = git://192.168.1.226/valib/ipc.git
+[submodule "decoder/valib/ipc"]
+	path = decoder/valib/ipc
+	url = git://192.168.1.226/valib/ipc.git
+[submodule "decoder/valib/goffmpeg"]
+	path = decoder/valib/goffmpeg
+	url = git://192.168.1.226/valib/goffmpeg.git
diff --git a/analysis/valib/gosdk b/analysis/valib/gosdk
new file mode 160000
index 0000000..e3a2151
--- /dev/null
+++ b/analysis/valib/gosdk
@@ -1 +1 @@
-Subproject commit 0000000000000000000000000000000000000000
+Subproject commit e3a2151968276a71a617d88965281e279ad68236
diff --git a/analysis/valib/ipc b/analysis/valib/ipc
new file mode 160000
index 0000000..66d8e66
--- /dev/null
+++ b/analysis/valib/ipc
@@ -1 +1 @@
-Subproject commit 0000000000000000000000000000000000000000
+Subproject commit 66d8e6695ada4090bdb81279d594f323be875bc7
diff --git a/decoder/.gitignore b/decoder/.gitignore
new file mode 100644
index 0000000..541ce64
--- /dev/null
+++ b/decoder/.gitignore
@@ -0,0 +1 @@
+decoder
diff --git a/decoder/.vscode/settings.json b/decoder/.vscode/settings.json
new file mode 100644
index 0000000..8c45cda
--- /dev/null
+++ b/decoder/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "go.formatTool": "goimports"
+}
\ No newline at end of file
diff --git a/decoder/demo/simpleIPC.go b/decoder/demo/simpleIPC.go
new file mode 100644
index 0000000..8f309f0
--- /dev/null
+++ b/decoder/demo/simpleIPC.go
@@ -0,0 +1,11 @@
+package demo
+
+import (
+	srv "decoder/work/service"
+)
+
+// SendByIPC send pic by ipc
+func SendByIPC(rtspURL, cameraID, ipcURL string) {
+	d := srv.NewDecoder(cameraID, rtspURL, ipcURL)
+	d.Run()
+}
diff --git a/decoder/go.mod b/decoder/go.mod
new file mode 100644
index 0000000..62603f0
--- /dev/null
+++ b/decoder/go.mod
@@ -0,0 +1,5 @@
+module decoder
+
+go 1.12
+
+require nanomsg.org/go-mangos v1.4.0
diff --git a/decoder/go.sum b/decoder/go.sum
new file mode 100644
index 0000000..7d77097
--- /dev/null
+++ b/decoder/go.sum
@@ -0,0 +1,2 @@
+nanomsg.org/go-mangos v1.4.0 h1:pVRLnzXePdSbhWlWdSncYszTagERhMG5zK/vXYmbEdM=
+nanomsg.org/go-mangos v1.4.0/go.mod h1:MOor8xUIgwsRMPpLr9xQxe7bT7rciibScOqVyztNxHQ=
diff --git a/decoder/main.go b/decoder/main.go
new file mode 100644
index 0000000..0c7f65b
--- /dev/null
+++ b/decoder/main.go
@@ -0,0 +1,71 @@
+package main
+
+import (
+	"bytes"
+	"context"
+	"decoder/demo"
+	"decoder/valib/ipc"
+	"encoding/gob"
+	"flag"
+	"fmt"
+	// "videoServer/demo"
+)
+
+var (
+	streamURL string
+	picFolder string
+
+	ipcURL string
+	proc   string
+)
+
+func init() {
+	flag.StringVar(&streamURL, "i", "rtsp://192.168.1.203:8554/16.mkv", "input url")
+	flag.StringVar(&picFolder, "f", ".", "test pic folder")
+
+	flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label")
+}
+
+func test() {
+	fmt.Println("start test")
+
+	fmt.Println(picFolder)
+
+	demo.SendByIPC(streamURL, "camera1", ipcURL)
+}
+
+type cameraInfo struct {
+	cameraID string
+	videoURL string
+}
+
+func recvFromIPC(ctx context.Context, url string) (cameraID, rtspURL string) {
+	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
+		}
+		return i.cameraID, i.videoURL
+	}
+}
+
+func main() {
+	flag.Parse()
+
+	ctx, cancel := context.WithCancel(context.Background())
+	recvFromIPC(ctx, "tcp://192.168.1.156:7000")
+
+	cancel()
+	// test()
+
+}
diff --git a/decoder/runtime/libcffmpeg.so b/decoder/runtime/libcffmpeg.so
new file mode 100755
index 0000000..5679d03
--- /dev/null
+++ b/decoder/runtime/libcffmpeg.so
Binary files differ
diff --git a/decoder/valib/goffmpeg b/decoder/valib/goffmpeg
new file mode 160000
index 0000000..7f8e310
--- /dev/null
+++ b/decoder/valib/goffmpeg
@@ -1 +1 @@
-Subproject commit 0000000000000000000000000000000000000000
+Subproject commit 7f8e310acc232c67ba8e6f72028d677010d1051a
diff --git a/decoder/valib/ipc b/decoder/valib/ipc
new file mode 160000
index 0000000..66d8e66
--- /dev/null
+++ b/decoder/valib/ipc
@@ -1 +1 @@
-Subproject commit 0000000000000000000000000000000000000000
+Subproject commit 66d8e6695ada4090bdb81279d594f323be875bc7
diff --git a/decoder/work/service/common.go b/decoder/work/service/common.go
new file mode 100644
index 0000000..54cff5d
--- /dev/null
+++ b/decoder/work/service/common.go
@@ -0,0 +1,20 @@
+package service
+
+import (
+	"context"
+)
+
+// ImageInfo deocded image data
+type ImageInfo struct {
+	Data   []byte
+	Width  int
+	Height int
+
+	CameraID string
+}
+
+// ContextIPC server context
+type ContextIPC struct {
+	ctx    context.Context
+	cancel context.CancelFunc
+}
diff --git a/decoder/work/service/decoder.go b/decoder/work/service/decoder.go
new file mode 100644
index 0000000..dfff34d
--- /dev/null
+++ b/decoder/work/service/decoder.go
@@ -0,0 +1,88 @@
+package service
+
+import (
+	"bytes"
+	"context"
+	"decoder/valib/goffmpeg"
+	"decoder/valib/ipc"
+	"encoding/gob"
+	"fmt"
+)
+
+// Decoder decoder ingo
+type Decoder struct {
+	ctxIPC *ContextIPC
+
+	cameraID  string
+	streamURL string
+	ipcURL    string
+
+	ffmpeg *goffmpeg.GoFFMPEG
+}
+
+// NewDecoder decoder
+func NewDecoder(cameraID, streamURL, ipcURL string) *Decoder {
+	ctx, cancel := context.WithCancel(context.Background())
+
+	return &Decoder{
+		ctxIPC: &ContextIPC{ctx, cancel},
+
+		cameraID:  cameraID,
+		streamURL: streamURL,
+		ipcURL:    ipcURL,
+	}
+}
+
+func (dec *Decoder) serializeImageInfo(img <-chan ImageInfo, data chan<- []byte) {
+	for {
+		select {
+		case <-dec.ctxIPC.ctx.Done():
+			fmt.Println("stop decoder")
+			return
+		case i := <-img:
+			var buf bytes.Buffer
+			enc := gob.NewEncoder(&buf)
+
+			if err := enc.Encode(i); err != nil {
+				fmt.Println("gob encode camera image error", err)
+				continue
+			}
+			b := buf.Bytes()
+			data <- b
+		}
+
+	}
+}
+
+// Run run a decoder
+func (dec *Decoder) Run() {
+	ipc := ipc.NewServer(dec.ctxIPC.ctx, dec.ipcURL)
+
+	gf := goffmpeg.New()
+	if gf != nil {
+		dec.ffmpeg = gf
+	}
+	imageChan := make(chan ImageInfo)
+	dataChan := make(chan []byte)
+
+	go dec.serializeImageInfo(imageChan, dataChan)
+
+	gf.ActiveDecoder(func(d *[]byte, w, h *int) {
+
+		if *w > 0 && *h > 0 {
+			i := ImageInfo{*d, *w, *h, dec.cameraID}
+			imageChan <- i
+		} else {
+			fmt.Println("decode jpg error")
+		}
+	})
+	gf.Run(dec.streamURL)
+
+	ipc.SendFromChannel(dataChan)
+}
+
+// Stop stop run decoder, must run in goroutine
+func (dec *Decoder) Stop() {
+	dec.ffmpeg.Free()
+	dec.ctxIPC.cancel()
+}
diff --git a/decoder/work/service/reciever.go b/decoder/work/service/reciever.go
new file mode 100644
index 0000000..2ae6bfb
--- /dev/null
+++ b/decoder/work/service/reciever.go
@@ -0,0 +1,71 @@
+package service
+
+import (
+	"bytes"
+	"context"
+	"decoder/valib/ipc"
+	"encoding/gob"
+	"fmt"
+)
+
+// Reciever recv from ipc
+type Reciever struct {
+	ctxIPC  *ContextIPC
+	ipcURL  string
+	chImage chan<- ImageInfo
+}
+
+func unserilizeImageInfo(data <-chan []byte, img chan<- ImageInfo) {
+	for {
+		d := <-data
+
+		var buf bytes.Buffer
+		buf.Write(d)
+
+		dec := gob.NewDecoder(&buf)
+
+		var i ImageInfo
+		if err := dec.Decode(&i); err != nil {
+			fmt.Println("gob decode CameraImage error", err)
+			continue
+		}
+		img <- i
+	}
+}
+
+// NewReciever new recv
+func NewReciever(url string, ch chan<- ImageInfo) *Reciever {
+	ctx, cancel := context.WithCancel(context.Background())
+
+	return &Reciever{
+		ctxIPC:  &ContextIPC{ctx, cancel},
+		ipcURL:  url,
+		chImage: ch,
+	}
+}
+
+// NewRecieverWithContext new recver with context
+func NewRecieverWithContext(ctx context.Context, url string, ch chan<- ImageInfo) *Reciever {
+	return &Reciever{
+		ctxIPC:  &ContextIPC{ctx, nil},
+		ipcURL:  url,
+		chImage: ch,
+	}
+}
+
+// Run run task from ipc data
+func (r *Reciever) Run() {
+	ipc := ipc.NewClient(r.ctxIPC.ctx, r.ipcURL)
+
+	dataChan := make(chan []byte)
+	go unserilizeImageInfo(dataChan, r.chImage)
+
+	ipc.RecvToChannel(dataChan)
+}
+
+// Stop stop reciever, run in goroutine
+func (r *Reciever) Stop() {
+	if r.ctxIPC.cancel != nil {
+		r.ctxIPC.cancel()
+	}
+}

--
Gitblit v1.8.0