diff --git a/format/raw/muxer.go b/format/raw/muxer.go index d70cea4..107d790 100644 --- a/format/raw/muxer.go +++ b/format/raw/muxer.go @@ -2,7 +2,7 @@ package raw import ( "bytes" - "io" + "os" "github.com/deepch/vdk/codec/h265parser" @@ -15,13 +15,28 @@ var startCode = []byte{0, 0, 0, 1} type Muxer struct { idx int8 - w io.WriteSeeker + w *os.File } -func NewMuxer(v io.WriteSeeker) *Muxer { - return &Muxer{w: v} +func NewMuxer(filePatch, fileName string) (*Muxer, error) { + + if _, err := os.Stat(filePatch); os.IsNotExist(err) { + err := os.MkdirAll(filePatch, os.ModePerm) + if err != nil { + return nil, err + } + } + + f2, err := os.Create(filePatch + fileName) + if err != nil { + return nil, err + } + + return &Muxer{w: f2}, nil } + func (element *Muxer) WriteHeader(streams []av.CodecData) (err error) { + for i, stream := range streams { switch stream.Type() { case av.H264: @@ -32,9 +47,13 @@ func (element *Muxer) WriteHeader(streams []av.CodecData) (err error) { element.idx = int8(i) } } + return + } -func (element *Muxer) WritePacket(pkt *av.Packet) (err error) { + +func (element *Muxer) WriteAvPacket(pkt *av.Packet) (err error) { + if pkt.Idx == element.idx { _, err = element.w.Write(startCode) if err != nil { @@ -42,5 +61,19 @@ func (element *Muxer) WritePacket(pkt *av.Packet) (err error) { } _, err = element.w.Write(pkt.Data[4:]) } + return + +} + +func (element *Muxer) WriteRTPPacket(pkt *[]byte) (err error) { + + return + +} + +func (element *Muxer) Close() error { + + return element.w.Close() + }