mirror of
https://github.com/kerberos-io/agent.git
synced 2026-08-23 15:08:32 +00:00
get rid of opencv for encoding
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,4 +9,5 @@ machinery/data/cloud
|
||||
machinery/data/recordings
|
||||
machinery/data/snapshots
|
||||
machinery/test*
|
||||
machinery/init-dev.sh
|
||||
deployments/docker/private-docker-compose.yaml
|
||||
@@ -19,15 +19,13 @@ import (
|
||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
||||
av "github.com/kerberos-io/joy4/av"
|
||||
"github.com/kerberos-io/joy4/cgo/ffmpeg"
|
||||
"gocv.io/x/gocv"
|
||||
|
||||
"net/http"
|
||||
"net/url"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/kerberos-io/agent/machinery/src/capture"
|
||||
"github.com/kerberos-io/agent/machinery/src/computervision"
|
||||
"github.com/kerberos-io/agent/machinery/src/log"
|
||||
"github.com/kerberos-io/agent/machinery/src/models"
|
||||
@@ -285,15 +283,12 @@ func HandleLiveStreamSD(livestreamCursor *pubsub.QueueCursor, configuration *mod
|
||||
}
|
||||
|
||||
func sendImage(topic string, mqttClient mqtt.Client, pkt av.Packet, decoder *ffmpeg.VideoDecoder, decoderMutex *sync.Mutex) {
|
||||
mat := computervision.GetRGBImage(pkt, decoder, decoderMutex)
|
||||
buffer, err := gocv.IMEncode(gocv.JPEGFileExt, mat)
|
||||
mat.Close()
|
||||
img, err := capture.DecodeImage(pkt, decoder, decoderMutex)
|
||||
if err == nil {
|
||||
encoded := base64.StdEncoding.EncodeToString(buffer.GetBytes())
|
||||
bytes, _ := computervision.ToBytes(img.Image)
|
||||
encoded := base64.StdEncoding.EncodeToString(bytes)
|
||||
mqttClient.Publish(topic, 0, false, encoded)
|
||||
}
|
||||
runtime.GC()
|
||||
debug.FreeOSMemory()
|
||||
}
|
||||
|
||||
func HandleLiveStreamHD(livestreamCursor *pubsub.QueueCursor, configuration *models.Configuration, communication *models.Communication, mqttClient mqtt.Client, codecs []av.CodecData, decoder *ffmpeg.VideoDecoder, decoderMutex *sync.Mutex) {
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package computervision
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
@@ -85,6 +87,12 @@ func ToGray(rgb gocv.Mat) (gocv.Mat, error) {
|
||||
return gray, nil
|
||||
}
|
||||
|
||||
func ToBytes(img image.YCbCr) ([]byte, error) {
|
||||
buffer := new(bytes.Buffer)
|
||||
err := jpeg.Encode(buffer, &img, &jpeg.Options{Quality: 100})
|
||||
return buffer.Bytes(), err
|
||||
}
|
||||
|
||||
func ToRGB8(img image.YCbCr) (gocv.Mat, error) {
|
||||
bounds := img.Bounds()
|
||||
x := bounds.Dx()
|
||||
|
||||
@@ -9,10 +9,10 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/kerberos-io/agent/machinery/src/capture"
|
||||
"github.com/kerberos-io/agent/machinery/src/computervision"
|
||||
"github.com/kerberos-io/agent/machinery/src/log"
|
||||
"github.com/kerberos-io/agent/machinery/src/models"
|
||||
"gocv.io/x/gocv"
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
@@ -132,8 +132,6 @@ func ForwardSDStream(ctx context.Context, clientID string, connection *Connectio
|
||||
|
||||
logreader:
|
||||
for {
|
||||
|
||||
var mat gocv.Mat
|
||||
var encodedImage string
|
||||
if cursor != nil && decoder != nil {
|
||||
pkt, err := cursor.ReadPacket()
|
||||
@@ -141,11 +139,10 @@ logreader:
|
||||
if !pkt.IsKeyFrame {
|
||||
continue
|
||||
}
|
||||
mat = computervision.GetRGBImage(pkt, decoder, decoderMutex)
|
||||
buffer, err := gocv.IMEncode(gocv.JPEGFileExt, mat)
|
||||
mat.Close()
|
||||
img, err := capture.DecodeImage(pkt, decoder, decoderMutex)
|
||||
if err == nil {
|
||||
encodedImage = base64.StdEncoding.EncodeToString(buffer.GetBytes())
|
||||
bytes, _ := computervision.ToBytes(img.Image)
|
||||
encodedImage = base64.StdEncoding.EncodeToString(bytes)
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("ForwardSDStream:" + err.Error())
|
||||
|
||||
Reference in New Issue
Block a user