add writePaddingTSPackets

This commit is contained in:
nareix 2016-05-03 22:54:50 +08:00
parent 12f2f28f55
commit 5b03e2383f
2 changed files with 30 additions and 13 deletions

View File

@ -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]

View File

@ -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
}