class AirPlay: playing = False seekable = False action_play = False action_play_pause = False add_to_playlist_and_play = "" action_stop = False action_seek_time = 0 omxArgs = "" def __init__(self): args = len(sys.argv) if args > 1: if sys.argv[1] == "jack": self.omxArgs = "" print "Audio output over 3,5mm jack" else: self.omxArgs = "-o hdmi" print "Audio output over HDMI" self.videoAirPlay = None self.videoAirPlay = self self.omx = None self.videoAirPlay.service = VideoAirPlayPlayer( videoAirPlay=self.videoAirPlay, name="VideoAirPi on %s" % (platform.node()), host=self.get_ip_address("eth0"), port=8000, ) def signal_handler(self, signal, frame): print "\nQuiting - please wait...." self.Stop() self.videoAirPlay.service.exit() sys.exit(0) def get_ip_address(self, ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack("256s", ifname[:15]))[20:24]) # SIOCGIFADDR def PlayMedia(self, fullpath, startPosition): # , tag, unknown1, unknown2, unknown3): global parsed_path global media_key global duration # print startPosition # print 'Args' # print self.omxArgs # not supported in HLS video stream # if (startPosition != 0): # self.omxArgs += " -f " + str(startPosition) # print self.omxArgs if self.omx: self.Stop() print fullpath self.omx = OMXPlayer(fullpath, args=self.omxArgs, start_playback=True) def Pause(self, message): if self.omx: self.omx.set_speed(1) self.omx.toggle_pause() def Play(self, message): if self.omx: ret = self.omx.set_speed(1) if ret == 0: self.omx.toggle_pause() def Stop(self, message=""): if self.omx: self.omx.stop() self.omx = None def do_activate(self): pass def do_deactivate(self): self.videoAirPlay.service.__del__() def is_playing(self): return self.playing def get_property(self, propertyType): return 100 def action_stop(self): pass def action_play(self): pass def is_seekable(self): return self.seekable
class xbmcCommands: def __init__(self, omxArgs): self.media = None self.plex = PlexInterface() self.omx = None self.omxArgs = omxArgs def PlayMedia(self, fullpath, tag, unknown1, unknown2, unknown3): global parsed_path global media_key global duration parsed_path = urlparse(fullpath) media_path = parsed_path.scheme + "://" + parsed_path.netloc + tag self.media = self.plex.getMedia(media_path) #print 'mediapath', mediapath if(self.omx): self.Stop() transcodeURL = self.media.getTranscodeURL() print transcodeURL self.omx = OMXPlayer(transcodeURL, args=self.omxArgs, start_playback=True) def Pause(self, message): if(self.omx): self.omx.set_speed(1) self.omx.toggle_pause() def Play(self, message): if(self.omx): ret = self.omx.set_speed(1) if(ret == 0): self.omx.toggle_pause() def Stop(self, message=""): if(self.omx): self.omx.stop() self.omx = None def stopPyplex(self, message): self.Stop() global service pygame.quit() exit() def SkipNext(self, message = None): if(self.omx): self.omx.increase_speed() def SkipPrevious(self, message = None): if(self.omx): self.omx.decrease_speed() def StepForward(self, message = None): if(self.omx): self.omx.increase_speed() def StepBack(self, message = None): if(self.omx): self.omx.decrease_speed() def BigStepForward(self, message = None): if(self.omx): self.omx.jump_fwd_600() def BigStepBack(self, message = None): if(self.omx): self.omx.jump_rev_600() def getMilliseconds(self,s): hours, minutes, seconds = (["0", "0"] + ("%s" % s).split(":"))[-3:] hours = int(hours) minutes = int(minutes) seconds = float(seconds) miliseconds = int(3600000 * hours + 60000 * minutes + 1000 * seconds) return miliseconds def getPosMilli(self): return self.getMilliseconds(self.omx.position) def setPlayed(self): self.media.setPlayed() def isFinished(self): if(self.omx): finished = self.omx.finished else: finished = True return finished def isRunning(self): if(self.omx): return True return False def updatePosition(self): if self.isFinished(): if (self.getPosMilli() > (self.media.duration * .95)): self.setPlayed() self.Stop() else: self.media.updatePosition(self.getPosMilli())