class Player(Thread): def __init__(self): Thread.__init__(self) self.id = "1000-" + str(random.randint(0, 100)) self.peer = Peer(self.id, self.resource_loaded) self.playlist_uri = "http://cdn.bem.tv/stream/soccer2sec/soccer/playlist.m3u8" self.player_buffer = [] self.start() def run(self): segments = m3u8.load(self.playlist_uri).segments self.segment_duration = segments[0].duration self.playlist = [str(seg).split("\n")[1] for seg in segments] self.running = True self.startup() self.start_polling_and_fetching_chunks() def startup(self): logger.info(self.id, "Player: Buffering") for segment in self.playlist[7:]: self.request_resource(segment) def start_polling_and_fetching_chunks(self): logger.info( self.id, "Player: Fetching playlist and chunks every " + str(self.segment_duration) + "seconds") while self.running: time.sleep(self.segment_duration) last_segments = [ str(seg).split("\n")[1] for seg in m3u8.load(self.playlist_uri).segments ][7:] [ self.request_resource(seg) for seg in last_segments if seg not in self.player_buffer ] def request_resource(self, segment): # logger.info(self.id, "Player: requesting " + segment); self.peer.download_chunk(segment) def resource_loaded(self, segment): # logger.info(self.id, "Player: resource loaded " + segment); self.player_buffer.append(segment) def connect(self, other_player): self.peer.add_peer(other_player.peer) def shutdown(self): # logger.info(self.id, "Player Stats:" + str(self.peer.stats) + " Player buffer: " + str(sorted(self.player_buffer))) self.running = False
class Player(Thread): def __init__(self): Thread.__init__(self) self.id = "eb5bbe4c-3b4a-41a8-9092-" + str(random.randint(0, 100)) self.peer = Peer(self.id, self.resource_loaded) self.playlist_uri = "http://cdn.bem.tv/stream/soccer4sec/soccer/playlist.m3u8" self.player_buffer = [] self.start() def run(self): segments = m3u8.load(self.playlist_uri).segments self.segment_duration = segments[0].duration self.playlist = [str(seg).split("\n")[1] for seg in segments] self.running = True self.startup() self.start_polling_and_fetching_chunks() def startup(self): logger.info(self.id ,"Player: Buffering") for segment in self.playlist[7:]: self.request_resource(segment) def start_polling_and_fetching_chunks(self): logger.info(self.id, "Player: Fetching playlist and chunks every " + str(self.segment_duration) + "seconds") while self.running: time.sleep(self.segment_duration) last_segments = [str(seg).split("\n")[1] for seg in m3u8.load(self.playlist_uri).segments][7:] [self.request_resource(seg) for seg in last_segments if seg not in self.player_buffer] def request_resource(self, segment): logger.info(self.id, "Player: requesting " + segment); self.peer.download_chunk(segment) def resource_loaded(self, segment): logger.info(self.id, "Player: resource loaded " + segment); self.player_buffer.append(segment) def connect(self, other_player): self.peer.add_peer(other_player.peer) def shutdown(self): logger.info(self.id, "Player Stats:" + str(self.peer.stats) + " Player buffer: " + str(sorted(self.player_buffer))) self.running = False