From 5b03e2383fd598212de97cb476daf66f12d2387f Mon Sep 17 00:00:00 2001 From: nareix Date: Tue, 3 May 2016 22:54:50 +0800 Subject: [PATCH] add writePaddingTSPackets --- demuxer.go | 10 +--------- muxer.go | 33 +++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/demuxer.go b/demuxer.go index 1887e2d..0a6ab8d 100644 --- a/demuxer.go +++ b/demuxer.go @@ -45,7 +45,7 @@ func (self *Demuxer) ReadHeader() (err error) { if self.pmt != nil { n := 0 for _, stream := range self.streams { - if len(stream.pkts) > 0 { + if len(stream.CodecData()) > 0 { n++ } } @@ -186,10 +186,6 @@ func (self *Stream) readPacket() (ret av.Packet, ok bool) { } func (self *Stream) payloadStart() { - if false { - fmt.Println("payloadStart:", self) - } - dts := self.peshdr.DTS pts := self.peshdr.PTS if dts == 0 { @@ -218,10 +214,6 @@ func (self *Stream) payloadStart() { } func (self *Stream) payloadEnd() (err error) { - if false { - fmt.Println("payloadEnd:", self) - } - payload := self.buf.Bytes() curpkt := &self.pkts[len(self.pkts)-1] diff --git a/muxer.go b/muxer.go index a07d97e..4a36ba0 100644 --- a/muxer.go +++ b/muxer.go @@ -12,6 +12,10 @@ import ( type Muxer struct { W io.Writer streams []*Stream + PaddingToMakeCounterCont bool + + tswPAT *TSWriter + tswPMT *TSWriter } func (self *Muxer) NewStream() av.Stream { @@ -26,7 +30,28 @@ func (self *Muxer) NewStream() av.Stream { return stream } +func (self *Muxer) writePaddingTSPackets(tsw *TSWriter) (err error) { + for tsw.ContinuityCounter&0xf != 0x0 { + header := TSHeader{ + PID: tsw.PID, + ContinuityCounter: tsw.ContinuityCounter, + } + if _, err = WriteTSHeader(self.W, header, 0); err != nil { + return + } + tsw.ContinuityCounter++ + } + return +} + func (self *Muxer) WriteTrailer() (err error) { + if self.PaddingToMakeCounterCont { + for _, stream := range self.streams { + if err = self.writePaddingTSPackets(stream.tsw); err != nil { + return + } + } + } return } @@ -57,18 +82,18 @@ func (self *Muxer) WriteHeader() (err error) { } WritePMT(bufPMT, pmt) - tswPMT := &TSWriter{ + self.tswPMT = &TSWriter{ PID: 0x1000, DiscontinuityIndicator: true, } - tswPAT := &TSWriter{ + self.tswPAT = &TSWriter{ PID: 0, DiscontinuityIndicator: true, } - if err = tswPAT.WriteTo(self.W, bufPAT.Bytes()); err != nil { + if err = self.tswPAT.WriteTo(self.W, bufPAT.Bytes()); err != nil { return } - if err = tswPMT.WriteTo(self.W, bufPMT.Bytes()); err != nil { + if err = self.tswPMT.WriteTo(self.W, bufPMT.Bytes()); err != nil { return }