diff --git a/pkg/media/ivfreader/ivfreader.go b/pkg/media/ivfreader/ivfreader.go index 1006fef902c..04a5df1bfe0 100644 --- a/pkg/media/ivfreader/ivfreader.go +++ b/pkg/media/ivfreader/ivfreader.go @@ -52,7 +52,8 @@ type IVFFrameHeader struct { type IVFReader struct { stream io.Reader bytesReadSuccesfully int64 - fileHeader *IVFFileHeader + timebaseDenominator uint32 + timebaseNumerator uint32 } // NewWith returns a new IVF reader and IVF file header @@ -70,7 +71,8 @@ func NewWith(in io.Reader) (*IVFReader, *IVFFileHeader, error) { if err != nil { return nil, nil, err } - reader.fileHeader = header + reader.timebaseDenominator = header.TimebaseDenominator + reader.timebaseNumerator = header.TimebaseNumerator return reader, header, nil } @@ -83,7 +85,7 @@ func (i *IVFReader) ResetReader(reset func(bytesRead int64) io.Reader) { } func (i *IVFReader) ptsToTimestamp(pts uint64) uint64 { - return pts * uint64(i.fileHeader.TimebaseDenominator) / uint64(i.fileHeader.TimebaseNumerator) + return pts * uint64(i.timebaseDenominator) / uint64(i.timebaseNumerator) } // ParseNextFrame reads from stream and returns IVF frame payload, header, diff --git a/pkg/media/ivfwriter/ivfwriter.go b/pkg/media/ivfwriter/ivfwriter.go index 4f482b99dc8..bf1a357d333 100644 --- a/pkg/media/ivfwriter/ivfwriter.go +++ b/pkg/media/ivfwriter/ivfwriter.go @@ -123,8 +123,8 @@ func (i *IVFWriter) timestampToPts(timestamp uint64) uint64 { func (i *IVFWriter) writeFrame(frame []byte, timestamp uint64) error { frameHeader := make([]byte, 12) - binary.LittleEndian.PutUint32(frameHeader[0:], uint32(len(frame))) // Frame length - binary.LittleEndian.PutUint64(frameHeader[4:], i.timestampToPts(timestamp)) + binary.LittleEndian.PutUint32(frameHeader[0:], uint32(len(frame))) // Frame length + binary.LittleEndian.PutUint64(frameHeader[4:], i.timestampToPts(timestamp)) // PTS i.count++ if _, err := i.ioWriter.Write(frameHeader); err != nil {