From 417f83337170a91283faf944f2f39561eb60a698 Mon Sep 17 00:00:00 2001 From: deepch Date: Tue, 14 Jun 2022 15:32:10 +0300 Subject: [PATCH] mjpeg --- av/av.go | 1 + codec/mjpeg/parser.go | 10 ++++++++++ format/ts/demuxer.go | 18 +++++++++++++++--- format/ts/tsio/tsio.go | 5 +++-- 4 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 codec/mjpeg/parser.go diff --git a/av/av.go b/av/av.go index 06f89cc..8f30975 100644 --- a/av/av.go +++ b/av/av.go @@ -121,6 +121,7 @@ var ( VP8 = MakeVideoCodecType(avCodecTypeMagic + 4) VP9 = MakeVideoCodecType(avCodecTypeMagic + 5) AV1 = MakeVideoCodecType(avCodecTypeMagic + 6) + MJPEG = MakeVideoCodecType(avCodecTypeMagic + 7) AAC = MakeAudioCodecType(avCodecTypeMagic + 1) PCM_MULAW = MakeAudioCodecType(avCodecTypeMagic + 2) PCM_ALAW = MakeAudioCodecType(avCodecTypeMagic + 3) diff --git a/codec/mjpeg/parser.go b/codec/mjpeg/parser.go new file mode 100644 index 0000000..4558529 --- /dev/null +++ b/codec/mjpeg/parser.go @@ -0,0 +1,10 @@ +package mjpeg + +import "github.com/deepch/vdk/av" + +type CodecData struct { +} + +func (d CodecData) Type() av.CodecType { + return av.MJPEG +} diff --git a/format/ts/demuxer.go b/format/ts/demuxer.go index 78564f8..8c02825 100644 --- a/format/ts/demuxer.go +++ b/format/ts/demuxer.go @@ -3,13 +3,15 @@ package ts import ( "bufio" "fmt" + "io" + "time" + "github.com/deepch/vdk/av" "github.com/deepch/vdk/codec/aacparser" "github.com/deepch/vdk/codec/h264parser" + "github.com/deepch/vdk/codec/mjpeg" "github.com/deepch/vdk/format/ts/tsio" "github.com/deepch/vdk/utils/bits/pio" - "io" - "time" ) type Demuxer struct { @@ -117,6 +119,8 @@ func (self *Demuxer) initPMT(payload []byte) (err error) { self.streams = append(self.streams, stream) case tsio.ElementaryStreamTypeAdtsAAC: self.streams = append(self.streams, stream) + case tsio.ElementaryStreamTypeAlignmentDescriptor: + self.streams = append(self.streams, stream) } } return @@ -228,8 +232,16 @@ func (self *Stream) payloadEnd() (n int, err error) { return } self.data = nil - switch self.streamType { + case tsio.ElementaryStreamTypeAlignmentDescriptor: + if self.CodecData == nil { + self.CodecData = mjpeg.CodecData{} + } + b := make([]byte, 4+len(payload)) + pio.PutU32BE(b[0:4], uint32(len(payload))) + copy(b[4:], payload) + self.addPacket(b, time.Duration(0), 0) + n++ case tsio.ElementaryStreamTypeAdtsAAC: var config aacparser.MPEG4AudioConfig diff --git a/format/ts/tsio/tsio.go b/format/ts/tsio/tsio.go index ba045f6..3fc616e 100644 --- a/format/ts/tsio/tsio.go +++ b/format/ts/tsio/tsio.go @@ -33,8 +33,9 @@ var ErrParsePMT = fmt.Errorf("invalid PMT") var ErrParsePAT = fmt.Errorf("invalid PAT") const ( - ElementaryStreamTypeH264 = 0x1B - ElementaryStreamTypeAdtsAAC = 0x0F + ElementaryStreamTypeH264 = 0x1B + ElementaryStreamTypeAdtsAAC = 0x0F + ElementaryStreamTypeAlignmentDescriptor = 0x06 ) type PATEntry struct {