Exemplo n.º 1
0
player_log = logging.getLogger("Player 1")
try:
    player = OMXPlayer("/home/pi/Projects/MuzeApp/media.mp4",
                       args=[
                           '--loop', '--vol', volume, '-o', 'both', '--no-osd',
                           '--win', '0 0 ' + m_width + ' ' + m_height
                       ],
                       dbus_name='org.mpris.MediaPlayer2.omxplayer1' +
                       str(random.randint(0, 99)))
except Exception as e:
    print(e)
player.playEvent += lambda _: player_log.info("Play")
player.pauseEvent += lambda _: player_log.info("Pause")
player.stopEvent += lambda _: player_log.info("Stop")
player.action(PAUSE)
time.sleep(5)
player.pause()
player.set_alpha(0)

#GPIO Mode (BOARD / BCM)
GPIO.setmode(GPIO.BCM)

#set GPIO Pins
GPIO_TRIGGER = 23
GPIO_ECHO = 24
GPIO_BUTTON = 4

#set GPIO direction (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
Exemplo n.º 2
0
class OmxPlayer():
    def __init__(self):
        self.player = None
        self.paired = False
        self.masterIp = None
        self.audio_volume = 100.0

    # omxplayer callbacks

    def posEvent(self, a, b):
        print('Position event!' + str(a) + " " + str(b))
        # print('Position: ' + str(player.position()) + "s")
        return

    def seekEvent(self, a, b):
        print('seek event! ' + str(b))
        return

    def triggerStart(self, pathToTrack, withPause=False):
        # lrpi_player#105
        # Audio output can be routed through hdmi or the jack,
        # if settings.json is corrupted, default to the hdmi

        settings_json = settings.get_settings()
        output_route = settings_json.get("audio_output")
        normalised_output_route = 'hdmi'
        omxArgs = []

        if output_route == 'hdmi':
            normalised_output_route = 'hdmi'
            omxArgs += ['-w', '--layout', '5.1']
        elif output_route == 'jack':
            normalised_output_route = 'local'

        omxArgs += ['-o', normalised_output_route]

        print('OUTPUT: ' + normalised_output_route)
        print('Full playing args: ' + str(omxArgs))

        if not withPause:
            self.player = OMXPlayer(
                pathToTrack,
                args=omxArgs,
                dbus_name='org.mpris.MediaPlayer2.omxplayer0')
            sleep(0.25)
        elif withPause:
            self.player = OMXPlayer(
                pathToTrack,
                args=omxArgs,
                dbus_name='org.mpris.MediaPlayer2.omxplayer0',
                pause=True)
            # Might need to set the volume to 0 a different way,
            # for some tracks omxplayer plays a short, sharp, shock
            # before setting the volume to 0
            self.player.set_volume(0)
            sleep(0.5)

    def primeForStart(self, pathToTrack):
        self.triggerStart(pathToTrack, withPause=True)

    def start(self, pathToTrack, syncTimestamp=None, master=False):
        print("Playing on omx... :", master)
        print("\n")
        print(pathToTrack)

        settings_json = settings.get_settings()
        volume = settings_json.get("audio_volume")

        try:
            if not master:
                if self.player:
                    self.player.quit()
                self.player = None

            if syncTimestamp:
                pause.until(syncTimestamp)

            if self.player is None or syncTimestamp is None:
                self.triggerStart(pathToTrack)

            self.player.positionEvent += self.posEvent
            self.player.seekEvent += self.seekEvent
            # self.player.set_position(0)

            if volume is not None:
                self.audio_volume = volume
                print("Volume set to %s" % self.audio_volume)

            self.player.set_volume(float(self.audio_volume) / 100.0)

            print('synctime in omxplayer: ', ctime(syncTimestamp))
            if master:
                self.player.play()
            return str(self.player.duration())
        except Exception as e:
            print(
                "ERROR: Could not start player... but audio may still be playing!"
            )
            print("Why: ", e)
            print("returning position 0...")
            return str(0)

    # action 16 is emulated keypress for playPause
    def playPause(self, syncTimestamp=None):
        print("Playpausing with syncTimeStamp: ", syncTimestamp)
        if syncTimestamp:
            pause.until(syncTimestamp)
        self.player.action(16)
        return str(self.player.duration())

    def getPosition(self):
        return self.player.position()

    def getDuration(self):
        return str(self.player.duration())

    def mute(self):
        print(self.player.volume())
        self.player.mute()

    def volumeUp(self):
        print("upper: ", self.player.volume())
        self.player.set_volume(self.player.volume() + 0.1)

    def volumeDown(self, interval):
        # If we're right at the end of the track, don't try to
        # lower the volume or else dbus will disconnect and
        # the server will look at though it's crashed

        if self.player.duration() - self.player.position() > 1:
            print("omx downer: ", self.player.volume())
            if (self.player.volume() <= 0.07 or interval == 0):
                return False
            else:
                self.player.set_volume(self.player.volume() -
                                       ((1.0 / interval) / 4.0))
                return True
        return False

    def seek(self, position, syncTimestamp=None):
        if self.player.can_seek():
            self.player.set_position(self.player.duration() *
                                     (position / 100.0))
        return self.player.duration() * (position / 100.0)

    def status(self, status):
        if self.player != None:
            print('status requested from omxplayer!')
            try:
                status["source"] = self.player.get_source()
                status["playerState"] = self.player.playback_status()
                status["canControl"] = self.player.can_control()
                status["position"] = self.player.position()
                status["trackDuration"] = self.player.duration()
                status["error"] = ""
            except Exception as e:
                status["playerState"] = ""
                status["canControl"] = False
                status[
                    "error"] = "Something went wrong with player status request: " + str(
                        e)

        else:
            status["playerState"] = ""
            status["canControl"] = False
            status["error"] = "Player is not initialized!"

        status["paired"] = self.paired
        status["master_ip"] = self.masterIp

        return status

    def setPaired(self, val, masterIp):
        self.paired = val
        self.masterIp = masterIp
        print('paired set to: ', val)
        print('master_ip set to: ', masterIp)

    def exit(self, syncTimestamp=None):
        if syncTimestamp:
            pause.until(syncTimestamp)

        if self.player:
            self.player.quit()
            self.__del__()
            killOmx()
        else:
            return 1

    def __del__(self):
        if self.player:
            self.player.quit()
        self.player = None
        killOmx()
        print("OMX died")
Exemplo n.º 3
0
import os

from omxplayer.player import OMXPlayer
# from pathlib import Path
from time import sleep
import sys

# VIDEO_PATH = Path("./vid.mp4")

player = OMXPlayer("./vid.mp4", args=[])
player.set_alpha(125)

try:
  sleep(5)
  player.pause()
  player.action(2)
  sleep(1)
  player.pause()
  player.action(2)
  player.play()
  sleep(1)
  player.action(2)
  sleep(1)
  player.action(2)
  sleep(1)
except KeyboardInterrupt:
  player.quit()
  sys.exit()
# os.system('mkfifo t cat t | omxplayer --no-osd -b vid.mp4 &')
# os.system('echo p > t rm t')
Exemplo n.º 4
0
class ScreenMovie(LcarsScreen):
    def setup(self, all_sprites):
        ############ Start base screen #############

        ### BASE_ui

        all_sprites.add(LcarsBackgroundImage(), layer=0)
        self.ui_screen_base = all_sprites.get_sprites_from_layer(0)

        all_sprites.add(LcarsTab(colours.COM2, 3, (50, 80)), layer=1)
        all_sprites.add(LcarsImageBlock(colours.BLUE5,
                                        pos=(50, 115),
                                        rectSize=(1688, 38)),
                        layer=1)
        all_sprites.add(LcarsTab(colours.COM2, 4, (50, 1810)), layer=1)

        all_sprites.add(LcarsTab(colours.COM2, 1, (953, 50)), layer=1)
        all_sprites.add(LcarsImageBlock(colours.BLUE5,
                                        pos=(953, 1361),
                                        rectSize=(443, 77)),
                        layer=1)
        all_sprites.add(LcarsBlockSmall(
            colours.BLUE6, (953, 116),
            "REWIND",
            self.rewHandler,
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf"),
                        layer=2)
        all_sprites.add(LcarsBlockSmall(
            colours.BLUE6, (953, 365),
            "PLAY",
            self.playHandler,
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf"),
                        layer=2)
        all_sprites.add(LcarsBlockSmall(
            colours.BLUE6, (953, 614),
            "F F",
            self.ffHandler,
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf"),
                        layer=2)
        all_sprites.add(LcarsBlockSmall(
            colours.BLUE6, (953, 863),
            "STOP",
            self.stopHandler,
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf"),
                        layer=2)
        all_sprites.add(LcarsBlockSmall(
            colours.BLUE6, (953, 1112),
            "BASE",
            self.mainHandler,
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf"),
                        layer=2)
        all_sprites.add(LcarsImageBlock(colours.BLUE5,
                                        pos=(953, 1361),
                                        rectSize=(443, 77)),
                        layer=1)
        all_sprites.add(LcarsTab(colours.COM2, 2, (953, 1810)), layer=1)

        self.fileList = LcarsTextBlock(colours.BLUE6, (94, 365),
                                       self.dirlist(),
                                       rectSize=(1694, 781))
        all_sprites.add(self.fileList, layer=3)
        all_sprites.add(LcarsImageBlock(colours.BLUE2,
                                        pos=(94, 116),
                                        text="01-3906",
                                        rectSize=(243, 100)),
                        layer=3)
        all_sprites.add(LcarsImageBlock(colours.BLUE3,
                                        pos=(200, 116),
                                        text="96-4783",
                                        rectSize=(243, 500)),
                        layer=3)
        all_sprites.add(LcarsImageBlock(colours.BLUE4,
                                        pos=(706, 116),
                                        text="32-6487",
                                        rectSize=(243, 163)),
                        layer=3)
        all_sprites.add(LcarsElbow(colours.BLUE5, 0, (875, 116)), layer=3)
        all_sprites.add(LcarsImageBlock(colours.BLUE4,
                                        pos=(904, 398),
                                        rectSize=(1074, 43)),
                        layer=3)
        all_sprites.add(LcarsImageBlock(colours.BLUE3,
                                        pos=(875, 1478),
                                        rectSize=(44, 72)),
                        layer=3)
        all_sprites.add(LcarsElbow(colours.BLUE5, 3, (875, 1528)), layer=3)
        self.file_address = LcarsText(
            colours.BLACK, (900, 450),
            "NO MEDIA SELECTED",
            textSize=.75,
            fontFace="assets/OpenSansCondensed-Bold.ttf")
        all_sprites.add(self.file_address, layer=3)

        self.list_block = all_sprites.get_sprites_from_layer(3)

        #self.VIDEO_1_PATH = "./assets/video/LittleShopofHorrors1960Color.mp4"
        ### sound effects
        self.beep1 = Sound("assets/audio/panel/201.wav")
        self.lastClockUpdate = 0
        #Sound("assets/audio/panel/220.wav").play()

        ############ End base screen #############

    def dirlist(self, dirPath='./assets/video'):
        #os.scandir(dirPath)
        file_names = []
        for item in os.scandir(dirPath):
            if item.is_file() or item.is_dir():
                file_names.append(item.name)
        return file_names

    def update(self, screenSurface, fpsClock):
        if pygame.time.get_ticks() - self.lastClockUpdate > 500:
            if self.fileList.visible == True:
                if self.fileList.get_state() == None:
                    self.file_address.setText("NO MEDIA SELECTED")
                else:
                    self.file_address.setText(self.fileList.get_state())
            self.lastClockUpdate = pygame.time.get_ticks()
        LcarsScreen.update(self, screenSurface, fpsClock)

    def handleEvents(self, event, fpsClock):
        if event.type == pygame.MOUSEBUTTONDOWN:
            self.beep1.play()

        if event.type == pygame.MOUSEBUTTONUP:
            return False

    def playHandler(self, item, event, clock):
        try:
            self.player.play_pause()
        except:
            try:
                self.VIDEO_1_PATH = './assets/video/' + self.fileList.get_state(
                )
                self.player = OMXPlayer(
                    self.VIDEO_1_PATH,
                    dbus_name='org.mpris.MediaPlayer2.omxplayer1')
                self.player.set_aspect_mode('stretch')
                self.player.set_video_pos(116, 94, 1804, 947)
                self.player.set_alpha(255)
                self.showhide(self.list_block)
            except:
                pass

    def rewHandler(self, item, event, clock):
        try:
            self.player.action(omxkey.REWIND)
        except:
            pass

    def showhide(self, listofitems):
        for items in listofitems:
            items.visible = not items.visible

    def stopHandler(self, item, event, clock):

        try:
            self.player.stop()
            self.showhide(self.list_block)
        except:
            pass

    def ffHandler(self, item, event, clock):
        try:
            self.player.action(omxkey.FAST_FORWARD)
        except:
            pass

    ###### Screen Handling #####

    def mainHandler(self, item, event, clock):
        try:
            self.player.stop()
        except:
            pass
        from screens.base import ScreenBase
        self.loadScreen(ScreenBase())

    def logoutHandler(self, item, event, clock):
        from screens.authorize import ScreenAuthorize
        self.loadScreen(ScreenAuthorize())

    def libraryHandler(self, item, event, clock):
        from screens.library import ScreenLibrary
        self.loadScreen(ScreenLibrary())