expose PTS,PCR SimpleH264Writer
This commit is contained in:
parent
62476ce8e0
commit
b0b956fc26
22
writer.go
22
writer.go
@ -542,8 +542,8 @@ type SimpleH264Writer struct {
|
|||||||
tswPMT *TSWriter
|
tswPMT *TSWriter
|
||||||
tswH264 *TSWriter
|
tswH264 *TSWriter
|
||||||
|
|
||||||
pts uint64
|
PTS uint64
|
||||||
pcr uint64
|
PCR uint64
|
||||||
|
|
||||||
prepared bool
|
prepared bool
|
||||||
writeSPS bool
|
writeSPS bool
|
||||||
@ -589,11 +589,16 @@ func (self *SimpleH264Writer) prepare() (err error) {
|
|||||||
|
|
||||||
self.tswH264.EnableVecWriter()
|
self.tswH264.EnableVecWriter()
|
||||||
|
|
||||||
self.pts = PTS_HZ
|
if self.PTS == 0 {
|
||||||
self.pcr = PCR_HZ
|
self.PTS = PTS_HZ
|
||||||
|
}
|
||||||
|
if self.PCR == 0 {
|
||||||
|
self.PCR = PCR_HZ
|
||||||
|
}
|
||||||
|
|
||||||
self.pesBuf = &bytes.Buffer{}
|
self.pesBuf = &bytes.Buffer{}
|
||||||
|
|
||||||
|
self.prepared = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -602,7 +607,6 @@ func (self *SimpleH264Writer) WriteHeader() (err error) {
|
|||||||
if err = self.prepare(); err != nil {
|
if err = self.prepare(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.prepared = true
|
|
||||||
}
|
}
|
||||||
self.tswPAT.W = self.W
|
self.tswPAT.W = self.W
|
||||||
if err = self.tswPAT.Write(self.patBuf); err != nil {
|
if err = self.tswPAT.Write(self.patBuf); err != nil {
|
||||||
@ -634,7 +638,7 @@ func (self *SimpleH264Writer) WriteNALU(sync bool, duration int, nalu []byte) (e
|
|||||||
|
|
||||||
pes := PESHeader{
|
pes := PESHeader{
|
||||||
StreamId: StreamIdH264,
|
StreamId: StreamIdH264,
|
||||||
PTS: self.pts,
|
PTS: self.PTS,
|
||||||
}
|
}
|
||||||
if err = WritePESHeader(self.pesBuf, pes); err != nil {
|
if err = WritePESHeader(self.pesBuf, pes); err != nil {
|
||||||
return
|
return
|
||||||
@ -654,15 +658,15 @@ func (self *SimpleH264Writer) WriteNALU(sync bool, duration int, nalu []byte) (e
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.tswH264.RandomAccessIndicator = sync
|
self.tswH264.RandomAccessIndicator = sync
|
||||||
self.tswH264.PCR = self.pcr
|
self.tswH264.PCR = self.PCR
|
||||||
|
|
||||||
self.tswH264.W = self.W
|
self.tswH264.W = self.W
|
||||||
if err = self.tswH264.WriteIovec(data); err != nil {
|
if err = self.tswH264.WriteIovec(data); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pts += uint64(duration)*PTS_HZ/uint64(self.TimeScale)
|
self.PTS += uint64(duration)*PTS_HZ/uint64(self.TimeScale)
|
||||||
self.pcr += uint64(duration)*PCR_HZ/uint64(self.TimeScale)
|
self.PCR += uint64(duration)*PCR_HZ/uint64(self.TimeScale)
|
||||||
self.pesBuf.Reset()
|
self.pesBuf.Reset()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user