Skip to content

Commit

Permalink
Save-to-webm: use timestamp from samplebuilder
Browse files Browse the repository at this point in the history
This avoids desyncing by accumulating drift.
  • Loading branch information
tmatth committed Sep 30, 2022
1 parent 62ca572 commit 83158f2
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions save-to-webm/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,10 @@ func main() {
}

type webmSaver struct {
audioWriter, videoWriter webm.BlockWriteCloser
audioBuilder, videoBuilder *samplebuilder.SampleBuilder
audioTimestamp, videoTimestamp time.Duration
audioWriter, videoWriter webm.BlockWriteCloser
audioBuilder, videoBuilder *samplebuilder.SampleBuilder
hasStartAudioOffset, hasStartVideoOffset bool
startAudioOffset, startVideoOffset uint32
}

func newWebmSaver() *webmSaver {
Expand Down Expand Up @@ -66,8 +67,11 @@ func (s *webmSaver) PushOpus(rtpPacket *rtp.Packet) {
return
}
if s.audioWriter != nil {
s.audioTimestamp += sample.Duration
if _, err := s.audioWriter.Write(true, int64(s.audioTimestamp/time.Millisecond), sample.Data); err != nil {
if !s.hasStartAudioOffset {
s.startAudioOffset = sample.PacketTimestamp
s.hasStartAudioOffset = true
}
if _, err := s.audioWriter.Write(true, int64((sample.PacketTimestamp-s.startAudioOffset)/48), sample.Data); err != nil {
panic(err)
}
}
Expand Down Expand Up @@ -95,8 +99,11 @@ func (s *webmSaver) PushVP8(rtpPacket *rtp.Packet) {
}
}
if s.videoWriter != nil {
s.videoTimestamp += sample.Duration
if _, err := s.videoWriter.Write(videoKeyframe, int64(s.videoTimestamp/time.Millisecond), sample.Data); err != nil {
if !s.hasStartVideoOffset {
s.startVideoOffset = sample.PacketTimestamp
s.hasStartVideoOffset = true
}
if _, err := s.videoWriter.Write(videoKeyframe, int64((sample.PacketTimestamp-s.startVideoOffset)/90), sample.Data); err != nil {
panic(err)
}
}
Expand Down

0 comments on commit 83158f2

Please sign in to comment.