Exemplo n.º 1
0
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
Exemplo n.º 2
0
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())