code: def __render(self):
  		
  
  		# Render first frame
  		self.__render_videoframe()
  
  		# Start videoclock with start of this thread
  		self.clock.start()
  
  		logger.debug("Started rendering loop.")
  		# Main rendering loop
  		while self.status in [PLAYING,PAUSED]:
  			current_frame_no = self.clock.current_frame
  
  			# Check if end of clip has been reached
  			if self.clock.time >= self.duration:
  				logger.debug("End of stream reached at {}".format(self.clock.time))
  				if self.loop:
  					logger.debug("Looping: restarting stream")
  					# Seek to the start
  					self.rewind()
  					self.loop_count += 1
  				else:
  					# End of stream has been reached
  					self.status = EOS
  					break
  
  			if self.last_frame_no != current_frame_no:
  				# A new frame is available. Get it from te stream
  				self.__render_videoframe()
  
  			self.last_frame_no = current_frame_no
  
  			# Sleeping is a good idea to give the other threads some breathing
  			# space to do their work.
  			time.sleep(0.005)
  
  		# Stop the clock.
  		self.clock.stop()
  		logger.debug("Rendering stopped.")
docs: Main render loop. 
  
  		Checks clock if new video and audio frames need to be rendered. 
  		If so, it passes the frames to functions that take care 
  		of rendering these frames.