Exemplo n.º 1
0
    def _show_video(self, video_uri, time_window, touch_enabled, text):
        pygame.display.flip()

        t_start = time.time()
        running = True
        try:
            player = OMXPlayer(video_uri)
            player.set_aspect_mode("stretch")
            while not player.is_playing():
                time.sleep(0.1)
        except Exception as e:
            raise Exception("Video not loaded. Error is: " + str(e))

        while time.time() - t_start < time_window and running:
            for event in pygame.event.get():
                if event.type == pygame.MOUSEBUTTONDOWN and touch_enabled:
                    running = False
                    player.quit()
                    break
            try:
                if not player.is_playing():
                    running = False
            except Exception as e:
                running = False

        try:
            if player.is_playing():
                player.quit()
        except Exception as e:
            pass

        self._show_black()
        return {'reaction_time': time.time() - t_start}
Exemplo n.º 2
0
class ToonPlayer(object):
    """omxplayer-wrapper throws an exception if it can't find an
    active dbus listing.  This isn't really what I want so I'll
    fix that with my own class and some composition.

    -b is here to black out the background terminal.
    """
    def __init__(self, source):
        self._player = OMXPlayer(source, '-b')
        sleep(2)

    def play(self, source):
        self._player.load(source)

    def seek(self, time):
        self._player.seek(time)

    def active(self):
        try:
            if self._player.is_playing():
                return True
            else:
                return False
        except Exception as ex:
            return False
Exemplo n.º 3
0
def playFile(path):
    global player
    global isPlaying

    quitPlayer()

    print("play {0}".format(path))
    isPlaying = True
    player = OMXPlayer(path, args=["--video_fifo", "10"])
    while not player.is_playing():
        wiringpi.delay(50)
Exemplo n.º 4
0
def playFile(audioPath):
    player = OMXPlayer(audioPath,
                       dbus_name='org.mpris.MediaPlayer2.omxplayer1')
    time.sleep(2.5)  # establish player
    try:
        while player.is_playing():
            time.sleep(0.3)
            ringSensor.readTrill()
            if ringSensor.getNumTouches() >= 3:
                print("3 ring sensor touches - stopping")
                player.pause()
    except:
        player.quit()
    player.quit()
class videoPlayer:
    def __init__(self, videoPath):
        self.videoPath = videoPath
        self.classPlayer = OMXPlayer(self.videoPath)
        sleep(0.2)
        self.classPlayer.pause()

    def playVideo(self):
        self.classPlayer.play()

    def end(self):
        return self.classPlayer.is_playing()

    def length(self):
        return self.classPlayer.duration()

    def freeze(self):
        self.classPlayer.quit()
	def text2Speech(self, text):
		if text not in self.__TTSCache:
			print("Not in cache")
			textInput = texttospeech.types.SynthesisInput(text=text)
			response = self.__CLIENT.synthesize_speech(textInput, 
													   self.__VOICE, 
													   self.__AUDIO_CONFIG)
			
			f = tempfile.NamedTemporaryFile(suffix=".mp3")
			f.write(response.audio_content)
			self.__TTSCache[text] = f.name
			print("Temp location: ", self.__TTSCache[text])

		try:
			player = OMXPlayer(self.__TTSCache[text])

			while player.is_playing():
				pass
		except Exception as e:
			print("only omxplayer works, but it is buggy as hell")
Exemplo n.º 7
0
class Player:

    def __init__(self, video_file):
        self.player = None
        self.path = ''
        self.load(video_file)

    def load(self, video_file):
        print('Player loading {0}'.format(video_file))
        #if self.player != None:
        #    self.player.stop()
        #    del self.player
        self.path = os.path.join(media_dir, video_file)
        if self.player is None:
            self.player = OMXPlayer(self.path, args=['--loop', '--blank', '-o', 'both'])
        else:
            self.player.load(self.path)
        self.player.stopEvent += lambda _: self._complete()
        self.player.pauseEvent += lambda _: self._pauseEvent()
        self.player.playEvent += lambda _: self._playEvent()
        self.player.positionEvent += lambda _: self._positionEvent()
        self.player.seekEvent += lambda _: self._seekEvent()

    def _complete(self):
        print('Playback finished.')
   
    def _pauseEvent(self):
        print('Player pause event.')
   
    def _playEvent(self):
        print('Player play event.')

    def _positionEvent(self):
        print('Player position event.')

    def _positionEvent(self):
        print('Player seek event.')

    def set_pause(self, p):
        if p:
            self.player.pause()
        else:
            self.player.play()

    def get_pause(self):
        if self.player.is_playing():
            return False
        else:
            return True

    def toggle_pause(self):
        if self.player.is_playing():
            self.player.pause()
        else:
            self.player.play()

    def stop(self):
        self.player.stop()

    def quit(self):
        self.player.quit()

    def reload(self):
        print('Reloading {0}'.format(self.path))
        self.load(self.path)

    def get_path(self):
        return self.path
Exemplo n.º 8
0
class Omx():
    def __init__(self):
        self.url = "None"
        self.player = None
        self.srt = None
        self.dvdplayer = None
        self.subs = 0
        self.audio_tracks = 0
        self.titles = 0
        return

    def youtube(self):
        proc = subprocess.Popen(['youtube-dl', '-g', '-f', 'mp4', self.url],
                                stdout=subprocess.PIPE)
        url = proc.stdout.read()
        if url.decode("utf-8") == '':
            return False
        self.player = OMXPlayer(url.decode("utf-8", "strict")[:-1],
                                args=['-o', 'hdmi'])
        return True

    def start_media(self, host, file):
        address = "http://" + str(host) + ":8090/" + file
        self.player = OMXPlayer(address.replace(" ", "%20"),
                                args=['-o', 'hdmi'])
        i = 0
        while not self.player.is_playing():
            time.sleep(1)
            i += 1
            if i >= 40:
                break
            return False
        return True

    def start_dvd(self):
        self.dvdplayer = mpv.MPV()
        self.dvdplayer.fullscreen = True
        self.dvdplayer['vo'] = 'rpi'
        self.dvdplayer['rpi-osd'] = 'yes'
        self.dvdplayer['osd-bar'] = 'yes'
        self.dvdplayer['osd-on-seek'] = 'msg-bar'
        self.dvdplayer['osd-level'] = '1'
        self.dvdplayer['osd-duration'] = '8000'
        self.dvdplayer['loop-file'] = 'no'
        self.dvdplayer['end'] = '-5'
        self.dvdplayer['osd-playing-msg'] = 'Now Playing Your DVD'
        self.dvdplayer['dvd-device'] = '/dev/nbd0'
        self.dvdplayer.play('dvd://')
        self.audio_tracks = 0
        self.subs = 0
        self.titles = 0
        return True

    def get_tracks(self):
        #Get the amount of audio tracks and subtitles avaible on DVD(May cause issues when more than 1 movie on DVD)
        self.subs = 0
        self.audio_tracks = 0
        print(self.dvdplayer._get_property('disc-titles', 'length'))
        for item in self.dvdplayer._get_property("track-list"):
            if item['type'] == 'sub':
                self.subs += 1
            if item['type'] == 'audio':
                self.audio_tracks += 1
        return

    def close_srt(self):
        if self.srt and self.srt.poll() is None:
            self.srt.terminate()
            self.srt.wait()

    def pause(self):
        if self.player:
            time.sleep(1)
            self.player.pause()
        self.close_srt()

    def mirror(self):
        self.make_pipe()
        self.player = OMXPlayer(NAMED_PIPE,
                                args=[
                                    '-o', 'hdmi', '--lavfdopts',
                                    'probesize:8000', '--timeout', '0',
                                    '--threshold', '0'
                                ])
        with open(NAMED_PIPE, "wb", 0) as output_stream:
            self.srt = subprocess.Popen([
                "stransmit", "srt://:8090?mode=server&pbkeylen=0", "file://con"
            ],
                                        stdout=output_stream)
        return

    def make_pipe(self):
        if os.path.exists(NAMED_PIPE):
            os.remove(NAMED_PIPE)
        os.mkfifo(NAMED_PIPE)
Exemplo n.º 9
0
        upper = np.array(upper, dtype="uint8")
        mask = cv2.inRange(frame, lower, upper)
        output = cv2.bitwise_and(frame, frame, mask=mask)
        output = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)
        (thresh, output) = cv2.threshold(output, 127, 255, cv2.THRESH_BINARY)
        blue_pixels = cv2.countNonZero(output)
        textsurface = myfont.render(str(blue_pixels), False, (0, 255, 0))

    if debug:
        screen.fill([0, 0, 0])
        output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
        output = np.rot90(output)
        output = pygame.surfarray.make_surface(output)
        screen.blit(output, (0, 0))
        screen.blit(textsurface, (120, 120))

        pygame.display.update()

    else:
        if blue_pixels > 1000:
            if not player.is_playing():
                player.play()
        else:
            player.pause()

    for event in pygame.event.get():
        if event.type == KEYDOWN:
            pygame.quit()
            cv2.destroyAllWindows()
            sys.exit(0)
Exemplo n.º 10
0
class VideoPlayer:
    def __init__(self):
        self._logger = getLogger("raspberry.videoplayer")
        self.is_running = False
        self._current_player = None
        self._thread = Thread()
        self._logger.info("ready")

    def start(self, video_list_queue):
        self._thread = Thread(target=self._run, args=(video_list_queue, ))
        self._thread.start()

    def stop(self):
        self.is_running = False
        self._logger.info("Waiting for all actions to terminate")
        if self._current_player:
            self._current_player.stop()
            self._current_player.quit()
        self._thread.join()
        self._logger.info("Finished")

    def _run(self, video_list_queue):
        """
        :type video_list_queue: Queue.Queue
        """
        self.is_running = True
        pygame.init()
        pygame.mouse.set_visible(False)
        screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
        screen.fill((0, 0, 0))

        while self.is_running:
            self._logger.info("waiting for a playlist...")
            video_list = []
            while self.is_running:
                try:
                    video_list = video_list_queue.get(block=True, timeout=5)
                    self._logger.info("got a playlist!")
                    break
                except Empty:
                    continue

            current_video = 0
            while self.is_running:
                if self.play_video(video_list[current_video]):
                    current_video = (current_video + 1) % len(video_list)
                else:
                    #    self._logger.info("Removing from the playlist")
                    current_video = (current_video + 1) % len(video_list)
                #    del video_list[current_video]
                #    if len(video_list) > 0:
                #        current_video = current_video % len(video_list)
                #    else:
                #        self._logger.warning("Playlist is empty.")

                if len(video_list) == 0 or not video_list_queue.empty():
                    break

        pygame.quit()

    def play_video(self, path):
        """
        :type path: str
        """
        # print "[video player] Playing video %s" % path
        try:
            self._logger.info("Starting video")
            self._current_player = OMXPlayer(path)
            test = True
            while test:
                time.sleep(5)
                try:
                    test = self._current_player.is_playing()
                    self._logger.debug("Video playing...")
                except:
                    test = False

            self._logger.debug("Video finished")
            return True
        except Exception as e:
            self._logger.error("Error playing %s : %s" % (path, str(e)))
            return False
Exemplo n.º 11
0
    player.set_position(feeding)
    print("player seeked to " + str(player.position()) + "for feeding")


def flyaway_mode():
    player.set_position(flyaway)
    print("player seeked to " + str(player.position()) + "for flyaway")


def empty_mode():
    player.set_position(empty)
    print("player seeked to " + str(player.position()) + "for empty")


try:
    while player.is_playing() == False:
        player.play()

    while GPIO.input(
            GPIO_PIR
    ) == 1:  #loop while the motion sensor is setting up and still reading high
        print("Waiting for PIR to settle ...")
        time.sleep(2)

    print("  Ready")

    while True:

        if int(
                player.position()
        ) > player_length:  #check once for error here, in case the cue is missed and this overruns the player length
Exemplo n.º 12
0
from ffprobe import FFProbe
from omxplayer.player import OMXPlayer
from time import sleep
import logging
logging.basicConfig(level=logging.INFO)

VIDEO_1_PATH = "app/static/videos/Iowa_Launch.mp4"

sleep(5)
player_log = logging.getLogger("Player 1")

player = OMXPlayer(VIDEO_1_PATH)
sleep(5)
player.play()
print
print "Player is playing : ", player.is_playing()
print "Player can play : ", player.can_play()

sleep(10)
player.quit()
Exemplo n.º 13
0
    player.set_position(feeding)
    print("player seeked to " + str(player.position()) + "for feeding")


def flyaway_mode():
    player.set_position(flyaway)
    print("player seeked to " + str(player.position()) + "for flyaway")


def empty_mode():
    player.set_position(empty)
    print("player seeked to " + str(player.position()) + "for empty")


try:
    if player.is_playing() == False:
        player.play()

    while GPIO.input(
            GPIO_PIR
    ) == 1:  #loop while the motion sensor is setting up and still reading high
        print("Waiting for PIR to settle ...")
        time.sleep(2)

    print("  Ready")

    while True:

        if int(
                player.position()
        ) > player_length:  #check once for error here, in case the cue is missed and this overruns the player length
Exemplo n.º 14
0
        
player_stop = OMXPlayer(BLACK_PATH, 
        dbus_name='org.mpris.MediaPlayer2.omxplayer2')

# it takes about this long for omxplayer to warm up and start displaying a picture on a rpi3
player_action.pause()
sleep(2.5)
player_stop.pause()
try:
    while True:
         # Button was pressed
         
        if ( GPIO.input(button) == GPIO.LOW ):
            sleep(1)
            try:
                if (player_action.is_playing() == True):
                    player_action.stop()
                    sleep(1)
                    player_action = OMXPlayer(VIDEO_PATH, dbus_name='org.mpris.MediaPlayer2.omxplayer1')
                else:
                    player_action.play()
                    sleep(1)
            except:
                sleep(1)
                    
                
                
            
except KeyboardInterrupt:
    try:
        player_action.quit()
Exemplo n.º 15
0
class MoviePlayer(metaclass=EventDispatcher):

    # Evemts
    MOVIE_STOP_EVENT = "MoviePlayer:Stop"
    MOVIE_START_EVENT = "MoviePlayer:Start"
    MOVIE_TRIGER_EVENT = "MoviePlayer:Trigger"
    MOVIE_PLAY_EVENT = "MoviePlayer:Play"
    MOVIE_EXIT_EVENT = "MoviePlayer:Exit"

    player = None

    isPlaying = False

    _triggers = []

    def __init__(self, volume=4):
        self.volume = volume

    def play(self, url, loop=False):
        self.path = Path(url)
        self._triggers = []

        if (self.player == None):
            #, '--vol', '0'
            props = ['--no-osd', '--no-keys']

            if (loop):
                props.append('--loop')

            self.player = OMXPlayer(self.path, args=props)
            # self.player.pauseEvent += lambda _: player_log.info("Pause")
            # self.player.playEvent += lambda _: player_log.info("Play")
            self.player.exitEvent += lambda _, exit_code: self.handleExit(
                exit_code)

        else:
            self.player.load(self.path)

        self.isPlaying = True

    def handleExit(self, eve):
        self.isPlaying = False
        self.emit_event(MoviePlayer.MOVIE_EXIT_EVENT)

    def addTriggers(self, triggers):
        self._triggers = []

        if (len(triggers) > 0):
            for trigger in triggers:
                self._triggers.append(
                    Trigger(trigger["time"], trigger["actions"]))

    def update(self):
        try:
            if (self.isPlaying == True and self.player != None
                    and len(self._triggers) > 0
                    and self.player.is_playing() == True):
                frame = self.player.position()
                for t in self._triggers:
                    if (frame >= t.frame):
                        self._triggers.remove(t)
                        self.emit_event(MoviePlayer.MOVIE_TRIGER_EVENT,
                                        t.actions)
        except:
            pass

    def pause(self):
        self.isPlaying = False

    def stop(self):
        self.isPlaying = False
        self._triggers = []
        try:
            self.player.stop()
            self.player = None
        except ValueError:
            print("Oops!  That was no valid number.  Try again...")

    def destroy(self):
        self.player.quit()
        self.player = None
        self._triggers = []
Exemplo n.º 16
0
                    )  #0 + next video in array 10 seconds
        current_video = next_video_to_play
        next_video_to_play += 1

        if (
                next_video_to_play >= number_of_videos
        ):  # -1 number of videos because the last one plays with the sensor state
            print('revert to default')
            current_video = 0
            next_video_to_play = 1
            player.seek(-player.position())

    #if the player pos is greater than the video stamp plus the length of the video then revert to default content
    if (player.position() >=
        (video_timestamps[current_video] + video_lengths[current_video])):
        print('default content')
        player.seek(-player.position())
        current_video = video_timestamps[0]
        current_video = 0

    #if the videos are all complete after the last button press then play default supermodels video
    last_button_state = local_button_state

# Cleanup
print("Cleanup")
button_thread.join()  #exit thread
if (player.is_playing()):
    player.stop()

GPIO.cleanup()