|
|
|
@ -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)
|
|
|
|
|