fix timestamp may overflow

main
lipku 3 months ago
parent a9c36c76e5
commit 4063ff9a67

@ -29,7 +29,7 @@ import numpy as np
AUDIO_PTIME = 0.020 # 20ms audio packetization
VIDEO_CLOCK_RATE = 90000
VIDEO_PTIME = 1 / 25 # 30fps
VIDEO_PTIME = 0.040 #1 / 25 # 30fps
VIDEO_TIME_BASE = fractions.Fraction(1, VIDEO_CLOCK_RATE)
SAMPLE_RATE = 16000
AUDIO_TIME_BASE = fractions.Fraction(1, SAMPLE_RATE)
@ -56,6 +56,7 @@ class PlayerStreamTrack(MediaStreamTrack):
self._player = player
self._queue = asyncio.Queue()
self.timelist = [] #记录最近包的时间戳
self.current_frame_count = 0
if self.kind == 'video':
self.framecount = 0
self.lasttime = time.perf_counter()
@ -72,7 +73,8 @@ class PlayerStreamTrack(MediaStreamTrack):
if hasattr(self, "_timestamp"):
#self._timestamp = (time.time()-self._start) * VIDEO_CLOCK_RATE
self._timestamp += int(VIDEO_PTIME * VIDEO_CLOCK_RATE)
wait = self._start + (self._timestamp / VIDEO_CLOCK_RATE) - time.time()
self.current_frame_count += 1
wait = self._start + self.current_frame_count * VIDEO_PTIME - time.time()
# wait = self.timelist[0] + len(self.timelist)*VIDEO_PTIME - time.time()
if wait>0:
await asyncio.sleep(wait)
@ -89,7 +91,8 @@ class PlayerStreamTrack(MediaStreamTrack):
if hasattr(self, "_timestamp"):
#self._timestamp = (time.time()-self._start) * SAMPLE_RATE
self._timestamp += int(AUDIO_PTIME * SAMPLE_RATE)
wait = self._start + (self._timestamp / SAMPLE_RATE) - time.time()
self.current_frame_count += 1
wait = self._start + self.current_frame_count * AUDIO_PTIME - time.time()
# wait = self.timelist[0] + len(self.timelist)*AUDIO_PTIME - time.time()
if wait>0:
await asyncio.sleep(wait)

Loading…
Cancel
Save