package rtputil
import "time"
type RTPConverter struct {
ts uint64
rtp uint64
}
func NewRTPConverter(clockRate int64) *RTPConverter {
ts := time.Second.Nanoseconds()
for _, i := range []int64{10, 3, 2} {
for ts%i == 0 && clockRate%i == 0 {
ts /= i
clockRate /= i
}
}
return &RTPConverter{ts: uint64(ts), rtp: uint64(clockRate)}
}
func (r *RTPConverter) ToDuration(rtpTicks uint32) time.Duration {
return time.Duration(uint64(rtpTicks) * r.ts / r.rtp)
}
func (r *RTPConverter) ToDurationExt(rtpExtTicks uint64) time.Duration {
return time.Duration(uint64(rtpExtTicks) * r.ts / r.rtp)
}
func (r *RTPConverter) ToRTP(duration time.Duration) uint32 {
return uint32(duration.Nanoseconds() * int64(r.rtp) / int64(r.ts))
}
func (r *RTPConverter) ToRTPExt(duration time.Duration) uint64 {
return uint64(duration.Nanoseconds() * int64(r.rtp) / int64(r.ts))
}