diff --git a/webrtc.py b/webrtc.py index 2421ffb..b21654c 100644 --- a/webrtc.py +++ b/webrtc.py @@ -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)