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)
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")
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')
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())