34 lines
596 B
Go
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}
|
|
}
|
|
|