Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion mjpeg.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,33 @@ import (
"time"
)

// DecoderFrame decode motion jpeg frame with headers
type DecoderFrame struct {
part *multipart.Part
}

// Bytes return buffer of the frame
func (df *DecoderFrame) Bytes() ([]byte, error) {
var buf bytes.Buffer
if _, err := io.Copy(&buf, df.part); err != nil {
return nil, err
}
return buf.Bytes(), nil
}

// GetMultipart return headers of multipart
func (df *DecoderFrame) Header() textproto.MIMEHeader {
return df.part.Header
}

// GetMultipart return multipart
func (df *DecoderFrame) GetMultipart() *multipart.Part {
return df.part
}

// Decoder decode motion jpeg
type Decoder struct {
r *multipart.Reader
m sync.Mutex
}

// NewDecoder return new instance of Decoder
Expand Down Expand Up @@ -74,6 +97,18 @@ func (d *Decoder) DecodeRaw() ([]byte, error) {
return buf.Bytes(), nil
}

// NextPart get next part
func (d *Decoder) DecodeFrame() (*DecoderFrame, error) {
p, err := d.r.NextPart()
if err != nil {
return nil, err
}
ret := DecoderFrame{
part: p,
}
return &ret, nil
}

type Stream struct {
m sync.Mutex
s map[chan []byte]struct{}
Expand Down