mirror of https://bitbucket.org/ausocean/av.git
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:
parent
bfdefa97f8
commit
da5fdccaf3
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue