stream/mts & stream/rtp: fixed timing calculations

Currently time calculations in the mts encoder are based on the premise that each mpegts packet is a 'frame', and in the rtp encoder that
each encoding of multiple packets into one rtp packet is a 'frame', these are both false. Mpegts encoding and rtp encoding should do
timestamp calculations using a reasonable approximation of time at encoding/send.
This commit is contained in:
saxon 2019-02-16 09:09:54 +10:30
parent bfdefa97f8
commit da5fdccaf3
2 changed files with 8 additions and 2 deletions

View File

@ -122,6 +122,7 @@ type Encoder struct {
dst io.Writer
clock time.Duration
lastTime time.Time
frameInterval time.Duration
ptsOffset time.Duration
tsSpace [PacketSize]byte
@ -247,7 +248,9 @@ func (e *Encoder) writePSI() error {
// tick advances the clock one frame interval.
func (e *Encoder) tick() {
e.clock += e.frameInterval
now := time.Now()
e.clock += now.Sub(e.lastTime)
e.lastTime = now
}
// pts retuns the current presentation timestamp.

View File

@ -51,6 +51,7 @@ type Encoder struct {
seqNo uint16
clock time.Duration
frameInterval time.Duration
lastTime time.Time
fps int
buffer []byte
pktSpace [defPktSize]byte
@ -120,7 +121,9 @@ func (e *Encoder) Encode(payload []byte) error {
// tick advances the clock one frame interval.
func (e *Encoder) tick() {
e.clock += e.frameInterval
now := time.Now()
e.clock += now.Sub(e.lastTime)
e.lastTime = now
}
// nxtTimestamp gets the next timestamp