Probably better seeking and syncing

This commit is contained in:
Uriziel 2012-06-21 19:34:40 +02:00
parent 393e6f3306
commit fb75c22925

View File

@ -271,26 +271,24 @@ class Manager(object):
if not (self.running and self.protocol): if not (self.running and self.protocol):
return return
self.counter += 10 self.counter += 10
self.protocol.send_seek(self.counter, time.time(), self.player_position) self.protocol.send_seek(self.counter, time.time(), self.player_position)
print 'You seeked to', format_time(self.player_position)
def send_filename(self): def send_filename(self):
if self.protocol and self.player_filename: if self.protocol and self.player_filename:
self.protocol.send_playing(self.player_filename) self.protocol.send_playing(self.player_filename)
def exectue_seek_cmd(self, seek_type, minutes, seconds): def exectue_seek_cmd(self, seek_type, minutes, seconds):
if not (self.running and self.protocol):
return
self.player_position_before_last_seek = self.player_position self.player_position_before_last_seek = self.player_position
if seek_type == 's': if seek_type == 's':
self.counter += 10
if seconds <> None: if seconds <> None:
seconds = int(seconds) seconds = int(seconds)
else: else:
seconds = 0 seconds = 0
if minutes <> None: if minutes <> None:
seconds += int(minutes) * 60 seconds += int(minutes) * 60
self.protocol.send_seek(self.counter, time.time(), seconds) self.player.set_position(seconds)
else: #seek_type s+ else: #seek_type s+
if seconds <> None: if seconds <> None:
seconds = int(seconds) seconds = int(seconds)
@ -300,8 +298,8 @@ class Manager(object):
seconds += int(minutes) * 60 seconds += int(minutes) * 60
else: else:
seconds += 60 seconds += 60
self.protocol.send_seek(self.counter, time.time(), self.player_position+seconds) self.player.set_position(self.player_position+seconds)
def execute_command(self, data): def execute_command(self, data):
RE_SEEK = re.compile("^(s[+s]?) ?(-?\d+)?([^0-9](\d+))?$") RE_SEEK = re.compile("^(s[+s]?) ?(-?\d+)?([^0-9](\d+))?$")
matched_seek = RE_SEEK.match(data) matched_seek = RE_SEEK.match(data)
@ -312,7 +310,9 @@ class Manager(object):
tmp_pos = self.player_position tmp_pos = self.player_position
self.protocol.send_seek(self.counter, time.time(), self.player_position_before_last_seek) self.protocol.send_seek(self.counter, time.time(), self.player_position_before_last_seek)
self.player_position_before_last_seek = tmp_pos self.player_position_before_last_seek = tmp_pos
elif data == "p":
self.player.set_paused(not self.player_paused)
def update_player_status(self, paused, position): def update_player_status(self, paused, position):
self.status_ask_received += 1 self.status_ask_received += 1
if self.status_ask_received < self.status_ask_sent: if self.status_ask_received < self.status_ask_sent:
@ -322,16 +322,21 @@ class Manager(object):
self.player_paused = paused self.player_paused = paused
self.player_position = position self.player_position = position
self.last_player_update = time.time() self.last_player_update = time.time()
diff = position - self.get_global_position()
if old_paused and not paused: if old_paused and not paused:
self.player_paused_at = None self.player_paused_at = None
if old_paused != paused and self.global_paused != paused: if old_paused != paused and self.global_paused != paused:
self.send_status(True) self.send_status(True)
if paused:
print "You have paused"
if(diff > 0):
self.player.set_position(self.get_global_position())
else:
print "You have resumed"
if not (self.global_paused or self.seek_sent_wait): if not (self.global_paused or self.seek_sent_wait):
diff = position - self.get_global_position()
if (0.4 if self.player_speed_fix else 0.6) <= diff <= 4: if (0.4 if self.player_speed_fix else 0.6) <= diff <= 4:
#print 'server is %0.2fs ahead of client, slowing down' % diff #print 'client is %0.2fs ahead of server, slowing down' % diff
if not self.player_speed_fix: if not self.player_speed_fix:
self.player.set_speed(0.75) self.player.set_speed(0.75)
self.player_speed_fix = True self.player_speed_fix = True
@ -340,12 +345,12 @@ class Manager(object):
#print 'resetting speed' #print 'resetting speed'
self.player.set_speed(1) self.player.set_speed(1)
self.player_speed_fix = False self.player_speed_fix = False
if abs(diff) > 8: if abs(diff) > 8:# and not self.seek_sent_wait:
self.send_seek() self.send_seek()
self.seek_sent_wait = True self.seek_sent_wait = True
if not paused and self.player_paused_at is not None and position >= self.player_paused_at: if not paused and self.player_paused_at is not None and position >= self.player_paused_at:
#print 'Pausing %0.2fs after pause point' % (position - self.player_paused_at) print 'Pausing %0.2fs after pause point' % (position - self.player_paused_at)
self.player.set_paused(True) self.player.set_paused(True)
self.ask_player() self.ask_player()
@ -387,6 +392,8 @@ class Manager(object):
diff = self.get_player_position() - position diff = self.get_player_position() - position
if abs(diff) > 4: if abs(diff) > 4:
self.player.set_position(position) self.player.set_position(position)
#self.player.set_paused(True)
print "Rewind due to time difference"
changed = True changed = True
if self.player_paused and not paused: if self.player_paused and not paused:
self.player_paused_at = None self.player_paused_at = None
@ -415,7 +422,6 @@ class Manager(object):
self.player_position_before_last_seek = self.player_position self.player_position_before_last_seek = self.player_position
self.player.set_position(position) self.player.set_position(position)
self.ask_player() self.ask_player()
print who, 'seeked to', format_time(position) print who, 'seeked to', format_time(position)