joy4/av/pktque/walltime.go
2016-07-12 14:36:48 +08:00

34 lines
596 B
Go

package pktque
import (
"time"
"github.com/nareix/joy4/av"
)
type WalltimeDemuxer struct {
av.Demuxer
firsttime time.Time
}
func (self *WalltimeDemuxer) ReadPacket() (pkt av.Packet, err error) {
if pkt, err = self.Demuxer.ReadPacket(); err != nil {
return
}
if pkt.Idx == 0 {
if self.firsttime.IsZero() {
self.firsttime = time.Now()
}
pkttime := self.firsttime.Add(pkt.Time)
delta := pkttime.Sub(time.Now())
if delta > 0 {
time.Sleep(delta)
}
}
return
}
func NewWalltimeDemuxer(demuxer av.Demuxer) *WalltimeDemuxer {
return &WalltimeDemuxer{Demuxer: demuxer}
}