Beispiel #1
0
def playVideo(video, player_log):

    if Path(video.path).is_file():

        player = OMXPlayer(video.path, dbus_name='org.mpris.MediaPlayer2.omxplayer1', args=['--loop'])

        player.playEvent += lambda _: player_log.info("Play")
        player.pauseEvent += lambda _: player_log.info("Pause")
        player.stopEvent += lambda _: player_log.info("Stop")

        player.hide_video()

        player.set_position(video.start)
        player.set_volume(video.volume)

        if video.crop != None:
            player.set_video_crop(video.crop[0], video.crop[1], video.crop[2], video.crop[3])

        player.set_aspect_mode(video.aspect)

        player.show_video()
        player.play()

        return player

    else:

        return None
Beispiel #2
0
def single_video_player_looper(video_clip_path, sleep_minutes, test_mode):
    """
    Loops a single video.

    Arguments
        video_clip_path     string
                            The path of the video clip being played.

        sleep_minutes       integer or float
                            Length of time to pause between loops.

        test_mode           boolean
                            True of False. If test_mode is True, clip is not
                            played in full screen mode.
    """

    test_mode_length = "720"
    test_mode_width = "360"
    play_message = "{} - Playing {}".format(current_time(), video_clip_path)
    if test_mode is True:
        player = OMXPlayer(video_clip_path,
                           args=[
                               "--no-osd", "--loop", "--win",
                               "0, 0, {0}, {1}".format(test_mode_length,
                                                       test_mode_width)
                           ])
        play_message = "{} in test mode".format(play_message)
    else:
        player = OMXPlayer(video_clip_path,
                           args=[
                               "--no-osd", "--loop", "--orientation", "180",
                               "--aspect-mode", "fill"
                           ])

    print(play_message)
    print("{} - {} minute(s) pause between each play".format(
        current_time(), sleep_minutes))

    try:
        player.pause()

        while True:
            print(play_message)
            player.play()
            sleep(player.duration())
            player.pause()
            player.set_position(0.0)
            if sleep_minutes > 0:
                if sleep_minutes < 1:
                    sleep_message = "{} seconds".format(
                        int(60.0 * sleep_minutes))
                else:
                    sleep_message = "{} minute(s)".format(sleep_minutes)
                print("{} - Sleeping {} before starting again".format(
                    current_time(), sleep_message))
                sleep(60 * sleep_minutes)
    except KeyboardInterrupt:
        print("{} - Exiting".format(current_time()))
        player.quit()
        sys.exit()
def play_film(filename="demo.mp4", duration=0, position=0):
    debug("\nfilename:", filename)
    debug("  position:", position)
    debug("  duration:", duration)
    trim_from_end = 0.5
    #trim_from_end = 0
    player = OMXPlayer(filename)
    player.set_position(0.0)
    debug("  pre-play pos:", player.position())
    player.play()
    # check and set position
    full_length = player.duration()
    # if the position is imposible, set it to 0
    if position <= 0 or position > full_length:
        position = 0.0
    player.set_position(position)
    # check and set duration
    length_to_end = player.duration()
    # if duration is imposible, set it to the length_to_end
    if duration == 0 or duration > length_to_end:
        wait = length_to_end - trim_from_end
    else:
        wait = duration
    if wait < 0:
        wait = 0
    debug("  full length: ", full_length)
    debug("  length to end: ", length_to_end)
    debug("  wait: ", wait)
    sleep(wait)
    debug("  post sleep pos:", player.position())
    player.pause()
    player.quit()
    debug("  post pause pos:", player.position())
    return True
def playBGVideo(video, startPos):
    video_path = VIDEO_PATH + video
    player_log = logging.getLogger("Stone Player - BG")

    try:

        bgPlayer = OMXPlayer(video_path,
                             args=['--loop'],
                             dbus_name='org.mpris.MediaPlayer2.omxplayer0')

        if bgPlayer.playback_status() == "Playing":
            return

        bgPlayer.playEvent += lambda _: player_log.info("Play")
        bgPlayer.pauseEvent += lambda _: player_log.info("Pause")
        bgPlayer.stopEvent += lambda _: player_log.info("Stop")

        # global playbackStatus
        # playbackStatus = player.playback_status()

        sleep(5)
        bgPlayer.set_position(startPos)  #seconds from the start of the video
        # player.pause()

        # sleep(2)

        # player.set_aspect_mode('stretch')
        # player.set_video_pos(0, 0, 200, 200)
        bgPlayer.play()
        bgPlayer.quit()

    except Exception as err:
        print("bgPlayer ERROR:", str(err))
Beispiel #5
0
def play_film(filename="demo.mp4", duration=0, position=0):
    debug("\nfilename:", filename)
    debug("  position:", position)
    debug("  duration:", duration)
    trim_from_end = 0.5
    #trim_from_end = 0
    player = OMXPlayer(filename)
    player.set_position(0.0)
    debug("  pre-play pos:", player.position())
    player.play()
    # check and set position
    full_length = player.duration()
    # if the position is imposible, set it to 0
    if position <= 0 or position > full_length:
        position = 0.0
    player.set_position(position)
    # check and set duration
    length_to_end = player.duration()
    # if duration is imposible, set it to the length_to_end
    if duration == 0 or duration > length_to_end:
        wait = length_to_end - trim_from_end
    else:
        wait = duration
    if wait < 0:
        wait = 0
    debug("  full length: ", full_length)
    debug("  length to end: ", length_to_end)
    debug("  wait: ", wait)
    sleep(wait)
    debug("  post sleep pos:", player.position())
    player.pause()
    player.quit()
    debug("  post pause pos:", player.position())
    return True
Beispiel #6
0
    def run(self, filename):
        global omxplayer

        gpio_control = GPIOControl()
        return_code = 0  # OK

        try:
            omxplayer = OMXPlayer(filename, OMXPLAYER_ARGS, None, None, True)
            omxplayer.pause()

            print 'Video player is armed!'
            print 'Video duration = ' + str(omxplayer.duration())

            #while(gpio_control.motion_detected()):
            #	continue;

            gpio_control.start()

            #loop_num = int(omxplayer.duration() / duration_sect)

            i = duration_sect
            last_sect = False

            while True:
                status = 0

                while status != 1:
                    pos = omxplayer.position()
                    #print str(pos)
                    if pos + 0.01 >= i:
                        if last_sect:
                            omxplayer.set_position(0)
                            last_sect = False
                            i = 0
                        status = 1
                    continue
                if gpio_control.motion_detected() == 0:
                    gpio_control.turn_off_relay()
                    omxplayer.pause()

                i += duration_sect
                if i + duration_sect >= omxplayer.duration():
                    last_sect = True

        except IOError as e:
            return_code = -1

        except KeyboardInterrupt:
            print 'KeyboardInterrupt'
            omxplayer.quit()

        print('EXIT')
        GPIO.cleanup()
        return return_code
Beispiel #7
0
def playMedia(path="../tests/media/test_media_1.mp4", duration=0, position=0):
    player = OMXPlayer(path, args=["--no-osd"])
    player.set_aspect_mode("fill")
    if position > 0:
        player.set_position(position)
    #player.duration() # this only works if this line is here
    if duration == 0:
        duration = player.duration() - position
    player.play()
    time.sleep(duration)
    player.quit()
def playMedia(path="../tests/media/test_media_1.mp4", duration=0, position=0):
    player = OMXPlayer(path, args=["--no-osd"])
    player.set_aspect_mode("fill")
    if position > 0:
            player.set_position(position)
    #player.duration() # this only works if this line is here
    if duration == 0:
            duration = player.duration() - position
    player.play()
    time.sleep(duration)
    player.quit()
Beispiel #9
0
def play_video():
    player = OMXPlayer('video.mp4',
                       dbus_name='org.mpris.MediaPlayer2.omxplayer1',
                       args=['--loop', '--no-osd'])
    sleep(2.5)
    player.set_position(5)
    player.pause()
    sleep(2)
    player.set_aspect_mode('stretch')
    #player.set_fullscreen()
    # player.set_video_pos(0, 0, 200, 200)
    player.play()
    return player
Beispiel #10
0
    def initPlayer(self, video, dbusName, log):

        player = OMXPlayer(video.path, dbus_name=dbusName, args=['--loop'])

        player.hide_video()
        player.pause()
        player.set_position(video.start)
        player.set_volume(video.volume)
        player.set_aspect_mode(video.aspect)

        player.active = False

        return player
Beispiel #11
0
class Player(object):
    def __init__(self, media_dir):
        self.media_dir = media_dir
        self.player = None
        self.subtitles = True

    def play(self, filename):
        if self.player:
            self.player.quit()
            self.player = None
        video_path = Path(self.media_dir + filename)
        self.player = OMXPlayer(video_path, args=['--no-osd'])

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

    def pause(self):
        self.player.play_pause()

    def seek(self, val):
        self.player.set_position(val)

    def set_volume(self, val):
        self.player.set_volume(val)

    def toggle_subtitles(self):
        if self.subtitles:
            self.player.hide_subtitles()
        else:
            self.player.show_subtitles()
        self.subtitles = not self.subtitles

    def set_subtitle_track(self, val):
        self.player.select_subtitle(val)

    @property
    def status(self):
        if self.player != None:
            return {
                'time': int(self.player.position()),
                'length': int(self.player.duration()),
                'volume': int(self.player.volume()),
                'subtitle_tracks': self.player.list_subtitles()
            }
        return {'time': 0, 'length': 0, 'volume': 0, 'subtitle_tracks': []}
Beispiel #12
0
	def __init__(self):
		#loading settings from setup.config
		settings = sl_settings.Settings()
		if not settings.load():
			error(1)

		ip_setup = dynamic_ip()
		ip_setup.set(settings.get("ip_address"))
	
		plr = OMXPlayer(settings.get("file_name"),["--blank","--no-osd"])

		if settings.get("ismaster") == "True":
			if ip_setup.waitForConnections(settings.get("num_clients")):
				ip_setup.sendStartSignal()
		else:
			ip_setup.connectToServer()
			ip_setup.waitForStartSignal()
			print "this function is not ready yet"
			### TODO: error check 
		#loop_time = plr.duration() - float(settings.get("load_time"))
		plr.play()
	
		while True:
			try:
				if settings.get("ismaster") == "False":
					ip_setup.waitForStartSignal()
					plr.set_position(0)
				elif settings.get("ismaster") == "True":
					sleep(plr.duration() - 1.0)
					#sleep(6)
					ip_setup.sendStartSignal()
					plr.set_position(0)
			except KeyboardInterrupt:
				print "interrupted!"
				ip_setup.closeConnection()
				ip_setup.setOldIp()
				plr.stop()
				plr.quit()
				break
		#plr.stop()

		ip_setup.setOldIp()
Beispiel #13
0
                                   '1',
                                   '--align',
                                   'center',
                                   '--font-size',
                                   '100',
                                   '--layer',
                                   '1',
                               ],
                               dbus_name='org.mpris.MediaPlayer2.omxplayer1')
            player.show_subtitles()
            #player.load(VIDEO_PATH)
        except Exception as e:
            print(e)
            handleCrash(False, VIDEO_PATH)

        player.set_position(clipDuration)
        print('now playing ' + str(VIDEO_PATH))
        loadingClip = True
        sleep(0.5)

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                print("LEFT")
                staticPlayer.unmute()

                # adjust channel number and re-initialize fileList
                currentChanNum -= 1
                if currentChanNum < 1:
                    currentChanNum = maxChans
Beispiel #14
0
margin = 10

#get playback rate from arguments
rate = float(sys.argv[1])

starting_pos = int(sys.argv[2])
play_time = int(sys.argv[3])

print('rate', rate)
print('starting_pos', starting_pos)
print('play_time', play_time)

sleep(1)

player.set_rate(rate)
player.set_position(starting_pos)
sleep(1)
player.pause()
print('duration', player.duration())

def play_video(p, sensor, pos, d, r):
    if d == 'UP':
        t = float(HALF_TIME)
    else:
        t = float(FULL_TIME)

    #we shouldnt play longer the video - the margin
    if(pos < t - margin - interval / 1000):
        p.play()
        sleep(play_time)
        p.pause()
Beispiel #15
0
#VIDEO_1_PATH = "/home/pirate/test/lushtest2.mp4"
player_log = logging.getLogger("Player 1")

player = OMXPlayer(VIDEO_1_PATH, dbus_name='org.mpris.MediaPlayer2.omxplayer1')
player.playEvent += lambda _: player_log.info("Play")
player.pauseEvent += lambda _: player_log.info("Pause")
player.stopEvent += lambda _: player_log.info("Stop")

#player.select_subtitle(SUBTITLE_1_PATH)

print(dir(player))

#print(player.list_subtitles())

# it takes about this long for omxplayer to warm up and start displaying a picture on a rpi3
sleep(2.5)

player.set_position(5)
player.pause()

sleep(2)

#player.set_aspect_mode('stretch')
#player.set_video_pos(0, 0, 200, 200)
player.play()
#print(player.list_subtitles())

sleep(10)

player.quit()
        if nr == 3:
            thread2.run()
            sleep(5)


thread1 = Thread(target=thread1_func)


end = datetime.now() + timedelta(minutes=configs["duration"])

try:
    file = configs["video_name"]
    player = OMXPlayer(file,  args=['--no-osd', '--loop'])
    # pir = MotionSensor(4)
    # player.play()
    player.set_position(configs["start"])
    # player.pause()
    sleep(1)
    while True:
        player.pause()
        if datetime.now() < end:
            player.quit()
            kill = ["killall", "omxplayer"]
            subprocess.run(kill)
            # command = ["shutdown", "-P", "now"]
            # subprocess.run(command)
            subprocess.run(["echo", "done"])
            sleep(2)
            exit()
        # if pir.motion_detected:
        if thread2.is_alive():
Beispiel #17
0
class VideoPlayerScreen(Screen):
    slider = ObjectProperty()
    minimized = BooleanProperty(True)
    video_path = StringProperty()  # 20200308tagesthemen.mp4

    def is_playing(self):
        if hasattr(self, 'player'):
            try:
                return self.player.is_playing()
            except OMXPlayerDeadError:
                self.leave_player()
                return False
        else:
            return False

    def set_play_pause_bttn(self, *args):
        print(self.ids)
        if self.is_playing():
            self.ids.play_pause_image.source = 'atlas://data/images/defaulttheme/media-playback-pause'
        else:
            self.ids.play_pause_image.source = 'atlas://data/images/defaulttheme/media-playback-start'

    def play(self):
        VIDEO_PATH = Path("videos/" + self.video_path)
        print(VIDEO_PATH)
        self.player = OMXPlayer(VIDEO_PATH,
                                args=['-o', 'alsa', '--layer', '100000'])
        self.player.set_video_pos(0, 0, 800, 480)
        self.set_slider()
        self.change_size()
        Clock.schedule_interval(self.set_slider, 3)
        Clock.schedule_interval(self.set_play_pause_bttn, 1)

    def player_stop(self):
        Clock.unschedule(self.set_play_pause_bttn)
        Clock.unschedule(self.set_slider)
        if self.is_playing():
            self.player.stop()

    @staticmethod
    def leave_player():
        App.get_running_app().root.current = 'base'

    def play_pause(self):
        self.player.play_pause()

    def quit(self, gg, **kwargs):
        self.player.quit()
        App.get_running_app().stop()

    def set_slider(self, *args):
        try:
            pos = self.player.position()  # in seconds as int
            duration = self.player.duration()  # in seconds as float
            self.slider.value_normalized = pos / duration
        except OMXPlayerDeadError:
            self.leave_player()

    def set_videopos(self, *args):
        pos = self.player.position()  # in seconds as int
        duration = self.player.duration()  # in seconds as float
        if abs(pos / duration - self.slider.value_normalized) > 0.05:
            self.player.set_position(self.slider.value_normalized * duration)

    def change_size(self):

        if self.minimized:
            self.player.set_alpha(255)
        else:
            self.player.set_alpha(100)
        self.minimized = not self.minimized
Beispiel #18
0
def main():
    """
      Insert 'python3 <YOUR_PATH>/LivingPortraitFaceDetection.py &'
      to /etc/rc.local in order for the script to run
      during boot.
    """
  try:
    sleep(30) # Allow plenty of time for everything to load
    if not CASCADE_PATH.exists() or not VIDEO_PATH.exists():
      print("{0}|{1} File(s) not found!" \
            .format(CASCADE_PATH.name, VIDEO_PATH.name))
      exit(2)
    faceCascade = cv2.CascadeClassifier(CASCADE_PATH._str)
    player = OMXPlayer(VIDEO_PATH, args=OMX_PLAYER_ARGS)
    sleep(1)
    player.set_position(0.0)
    player.pause()
    sleep(1)

    # sudo modprobe bcm2835-v4l2 you may need to run this command
    # or add bcm2835-v4l2 to /etc/modules, then reboot
    capture = cv2.VideoCapture(0)
    sleep(1)
    #capture.set(3,640) # set Width
    #capture.set(4,480) # set Height
    capture.set(cv2.CAP_PROP_BUFFERSIZE, 3)

    face_detected = False
    face_detected_count = 0
    scene_count = 0
    is_face_on_first_pass = False
Beispiel #19
0
class VideoPlayer:
    def __init__(self, root, message_handler, data, name):
        self.root = root
        self.message_handler = message_handler
        self.data = data
        self.omx_player = None
        self.name = name
        self.omx_running = False
        self.status = 'EMPTY'
        self.total_length = 0.0
        self.bankslot_number = '*-*'
        self.start = -1.0
        self.end = -1.0
        self.rate = 1
        self.crop_length = 0.0
        self.location = ''
        self.load_attempts = 0
        self.alpha = 0

    def try_load(self, layer):
        load_attempts = 0
        while (load_attempts < 2):
            load_attempts = load_attempts + 1
            if self.load(layer):
                print('load success')
                return True
            else:
                print('load failed')
        self.message_handler.set_message('ERROR', 'failed to load')
        self.status = 'ERROR'
        return False

    def load(self, layer):
        #try:
        self.get_context_for_player()
        is_dev_mode, first_screen_arg, second_screen_arg = self.set_screen_size_for_dev_mode(
        )
        arguments = [
            '--no-osd', '--layer',
            str(layer), '--adev', 'local', '--alpha', '0', first_screen_arg,
            second_screen_arg
        ]
        if not is_dev_mode:
            arguments.append('--blank=0x{}'.format(
                self.data.get_background_colour()))
        self.status = 'LOADING'
        print('the location is {}'.format(self.location))
        if self.location == '':
            self.status = 'EMPTY'
            return True
        self.omx_player = OMXPlayer(self.location,
                                    args=arguments,
                                    dbus_name=self.name)
        self.omx_running = True
        self.total_length = self.omx_player.duration(
        )  # <-- uneeded once self.duration stores float
        if (self.end is -1):
            self.end = self.total_length
        if (self.start is -1):
            self.start = 0
        self.crop_length = self.end - self.start
        print('{}: the duration is {}'.format(self.name, self.total_length))
        if self.start > 0.9:
            self.set_position(self.start - 0.9)
        if 'show' in self.data.settings['sampler']['ON_LOAD']['value']:
            self.set_alpha_value(255)
        else:
            self.set_alpha_value(0)
        self.pause_at_start()
        return True
        #except (ValueError, SystemError) as e:
        #  print(e)
        #self.message_handler.set_message('ERROR', 'load attempt fail')
        #return False

    def pause_at_start(self):
        position = self.get_position()
        start_threshold = round(self.start - 0.02, 2)
        if position > start_threshold:
            if self.status == 'LOADING':
                self.status = 'LOADED'
                self.omx_player.pause()
        elif self.omx_running:
            self.root.after(5, self.pause_at_start)

    def start_video(self):
        if 'show' in self.data.settings['sampler']['ON_START']['value']:
            self.set_alpha_value(255)
        else:
            self.set_alpha_value(0)
        if 'play' in self.data.settings['sampler']['ON_START']['value']:
            self.status = 'PLAYING'
            self.omx_player.play()
        else:
            self.status = 'START'
        self.pause_at_end()

    def pause_at_end(self):
        position = self.get_position()
        end_threshold = self.end - 0.2
        if (position > end_threshold):
            self.status = 'FINISHED'
            self.omx_player.pause()

            print('its paused at end!')
        elif (self.omx_running):
            self.root.after(5, self.pause_at_end)

    def reload(self, layer):
        self.exit()
        self.omx_running = False
        self.try_load(layer)

    def is_loaded(self):
        return self.status is 'LOADED'

    def is_finished(self):
        return self.status is 'FINISHED'

    def get_position(self):
        try:
            return self.omx_player.position()
        except:
            print('{}: error get_position'.format(self.name))
            return -1

    def get_context_for_player(self):
        next_context = self.data.get_next_context()
        self.location = next_context['location']
        #self.total_length = next_context['length']
        self.start = next_context['start']
        self.end = next_context['end']
        self.bankslot_number = next_context['bankslot_number']
        self.rate = next_context['rate']

    def toggle_pause(self):
        self.omx_player.play_pause()
        self.status = self.omx_player.playback_status().upper()

    def toggle_show(self):
        if self.alpha > 127:
            self.show_toggle_on = False
            self.set_alpha_value(0)
        else:
            self.show_toggle_on = True
            self.set_alpha_value(255)

    def set_alpha_value(self, amount):
        self.omx_player.set_alpha(amount)
        self.alpha = amount

    def seek(self, amount):
        position = self.get_position()
        after_seek_position = position + amount
        if after_seek_position > self.start and after_seek_position < self.end:
            self.set_position(after_seek_position)
            #self.player.seek(amount)
        else:
            self.message_handler.set_message('INFO',
                                             'can not seek outside range')

    def change_rate(self, amount):
        new_rate = self.rate + amount
        if (new_rate > self.omx_player.minimum_rate()
                and new_rate < self.omx_player.maximum_rate()):
            updated_speed = self.omx_player.set_rate(new_rate)
            self.rate = new_rate
            print('max rate {} , min rate {} '.format(
                self.omx_player.maximum_rate(),
                self.omx_player.minimum_rate()))
            return new_rate
        else:
            self.message_handler.set_message(
                'INFO', 'can not set speed outside of range')
            return self.rate

    def set_position(self, position):
        self.omx_player.set_position(position)

    def exit(self):
        try:
            self.omx_player.quit()
            self.status = 'EMPTY'
            self.omx_running = False
        except:
            pass

    def set_screen_size_for_dev_mode(self):
        ## only dev mode is needed now that auto handles all modes... can be removed probably ...
        if self.data.settings['other']['DEV_MODE_RESET']['value'] == 'on':
            return True, '--win', '50,350,550,750'
        else:
            aspect_mode = self.data.settings['video']['SCREEN_MODE']['value']
            return False, '--aspect-mode', aspect_mode
Beispiel #20
0
class Omx:
    def __init__(self, media_folder):
        self.player = None
        self.media_folder = media_folder
        self.expects_loading_exit = False
        self.looping = False

    def play(self, filename, loop=False):
        if self.player:
            self.expects_loading_exit = True
            self.player.load(filename)
        else:
            args = ['-b', '--no-osd', '-o', 'both']

            if loop:
                args += ['--loop']
                self.looping = True
            else:
                self.looping = False

            try:
                self.player = OMXPlayer(filename, args=args)
            except SystemError as e:
                print(e)

            self.player.stopEvent += self.on_player_stop
            self.player.exitEvent += self.on_player_exit

    def on_player_stop(self, player):
        self.player = None

    def on_player_exit(self, player, exit_status):
        if self.expects_loading_exit:
            self.expects_loading_exit = False
        else:
            self.player = None

    def stop(self):
        if not self.player:
            return

        self.player.stop()
        self.player = None

    def pause(self):
        if not self.player:
            return

        self.player.play_pause()

    def seek_fraction(self, fraction):
        if not self.player:
            return

        duration = self.player.duration()
        self.player.set_position(fraction * duration)

    def set_volume(self, volume):
        if not self.player:
            return

        if volume > 10:
            volume = 10
        elif volume < 0:
            volume = 0

        self.player.set_volume(volume)

    def get_source(self):
        """ Get player source and remove media folder """
        source = self.player.get_source()
        if source.startswith(self.media_folder + "/"):
            return source[len(self.media_folder) + 1:]
        else:
            return source

    def status(self):
        if not self.player:
            return {
                'status': 'stopped',
                'source': None,
            }

        return {
            'status': self.player.playback_status(),
            'source': self.get_source(),
            'position': self.player.position(),
            'duration': self.player.duration(),
            'volume': self.player.volume(),
            'looping': self.looping,
        }
Beispiel #21
0
class VideoPlayer(object):
    def __init__(self):
        self.player = None
        self.logger = LogObject('Video Player')
        self.args = ['-b']

        self.STATUS_MAP = {
            'volume': self._videoVolume,
            'length': self._videoLength,
            'playback': self._playbackStatus,
            'position': self._videoPosition
        }

        self.CONTROL_MAP = {
            'playpause': self._playPause,
            'stop': self._stop,
            'mute': self._mute,
            'unmute': self._unmute,
            'play': self._play,
            'pause': self._pause
        }

        self.SEEK_MAP = {'relative': self._seek, 'absolute': self._setPosition}

    def playUrl(self, url):

        if not self.player:
            self.player = OMXPlayer(url, args=self.args)
        else:
            self.player.load(url)

    def setVolume(self, volume):
        self._checkPlayerExist()
        try:
            self.player.set_volume(volume)
            return self.logger.writeAndReturnLog('VOL0003', {'volume': volume})
        except (AttributeError, OMXPlayerDeadError):
            self._raisePlayerError('VOL0004')

    def sendCommand(self, command):
        self._checkPlayerExist()
        try:
            return self.CONTROL_MAP[command]()
        except (AttributeError, OMXPlayerDeadError):
            self._raisePlayerError('CTRL0003')

    def _stop(self):
        self.player.quit()
        return self.logger.writeAndReturnLog('CTRL0004')

    def _mute(self):
        self.player.mute()
        return self.logger.writeAndReturnLog('CTRL0006')

    def _unmute(self):
        self.player.unmute()
        return self.logger.writeAndReturnLog('CTRL0007')

    def _playPause(self):
        self.player.play_pause()
        return self.logger.writeAndReturnLog('CTRL0005')

    def _play(self):
        self.player.play()
        return self.logger.writeAndReturnLog('CTRL0008')

    def _pause(self):
        self.player.pause()
        return self.logger.writeAndReturnLog('CTRL0009')

    def seek(self, option, time):
        self._checkPlayerExist()
        try:
            return self.SEEK_MAP[option](time)
        except (AttributeError, OMXPlayerDeadError):
            self._raisePlayerError('SEEK0007')

    def _seek(self, seekTime):
        self.player.seek(seekTime)
        return self.logger.writeAndReturnLog('SEEK0005',
                                             {'position': seekTime})

    def _setPosition(self, position):
        if position > self._videoLength() or position < 0:
            self._raisePlayerError('SEEK0004', {'position': position})
        self.player.set_position(position)
        return self.logger.writeAndReturnLog('SEEK0006',
                                             {'position': position})

    def _checkPlayerExist(self):
        if not self.player:
            self._raisePlayerError('CTRL0003')

    def videoStatus(self, status):
        if not self.player:
            self._raisePlayerError('STAT0003')
        try:
            return self.STATUS_MAP[status]()
        except (AttributeError, OMXPlayerDeadError):
            self._raisePlayerError('STAT0003')

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

    def _videoLength(self):
        return self.player.duration()

    def _videoVolume(self):
        return self.player.volume()

    def _playbackStatus(self):
        return self.player.playback_status()

    def _raisePlayerError(self, logReference, variablesDict={}):
        returnMsg = self.logger.writeAndReturnLog(logReference, variablesDict)
        raise PlayerError(returnMsg)
Beispiel #22
0
videos.append(video('../shared/testcard.mp4', None, 'fill', 0, 0.35))
videos.append(video('../shared/timer.mp4', None, 'fill', 10, 0.35))

player_log = logging.getLogger("Player 1")


# Create player 1
player1 = OMXPlayer(videos[0].path, dbus_name='org.mpris.MediaPlayer2.omxplayer1', args=['--loop'])

player1.playEvent += lambda _: player_log.info("Play")
player1.pauseEvent += lambda _: player_log.info("Pause")
player1.stopEvent += lambda _: player_log.info("Stop")

player1.pause()
player1.hide_video()
player1.set_position(videos[0].start)
player1.set_volume(videos[0].volume)
player1.set_aspect_mode(videos[0].aspect)

# Show player 1
player1.show_video()
player1.play()

sleep(5)

# Load player 1 with video 2
player1.pause()
player1.hide_video()
player1.load(videos[1].path, pause=True)
player1.set_position(videos[1].start)
player1.set_volume(videos[1].volume)
Beispiel #23
0
class VideoPlayer:
    def __init__(self,
                 VIDEO_NAME,
                 IMAGE_WIDTH,
                 IMAGE_HEIGHT,
                 USING_VLC=False,
                 audioPlayerRef=None,
                 pygameRef=None):

        self.USING_VLC = USING_VLC
        self.VIDEO_FILE = VIDEO_NAME
        #get a reference to the audio player
        self.audioPlayerRef = audioPlayerRef

        self.player = None

        if self.USING_VLC:
            if (pygameRef == None):
                print(
                    "VIDEOPLAYER ERROR: don't have a reference to pygame window!"
                )

            self.vlcInstance = vlc.Instance()
            #tmp (remove comment here) self.media = self.vlcInstance.media_new('/home/pi/code/' + self.VIDEO_FILE)
            self.media = self.vlcInstance.media_new(self.VIDEO_FILE)

            # Create new instance of vlc player
            self.player = self.vlcInstance.media_player_new()
            self.player.stop()

            # Pass pygame window id to vlc player, so it can render its contents there.
            win_id = pygameRef.display.get_wm_info()['window']
            self.player.set_xwindow(win_id)
            self.player.set_media(self.media)

            # TODO: correct the line below
            mouse.move(IMAGE_WIDTH, IMAGE_HEIGHT, True, 0)
        else:
            self.omx_stdin = None
            self.omx_process = None
            self.tot_sec = None

        self.STARTED = False
        self.PAUSED = False
        if (self.USING_VLC):
            print("VIDEOPLAYER: using VLC")
        else:
            print("VIDEOPLAYER: using OMX")

        # info about video
        self.info_video = {}
        self.chapters = self.get_chapters()
        self.curr_chapter = 0
        print('VIDEOPLAYER: info video \n\t# chapter:{}\n\t{}'.format(
            len(self.chapters), self.chapters))

    def start(self):
        print("VIDEOPLAYER: Starting video...")
        self.STARTED = True
        self.PAUSED = False

        if self.USING_VLC:
            self.player.play()
        else:
            if self.player:
                self.player.quit()
                self.player = None
            self.player = OMXPlayer(self.VIDEO_FILE, args=['--no-osd'])
        time.sleep(1)

    def stop(self):
        print("VIDEOPLAYER: Stopping video...")
        self.STARTED = False
        #TODO: is it necessary
        #self.PAUSED = True
        if self.USING_VLC:
            self.player.stop()
        else:
            self.player.quit()
            self.player = None

    def pause(self):
        print("VIDEOPLAYER: Pausing video...")
        # TODO: add some code here??
        #self.PAUSED = True #??

    def needUpdate(self):
        return (self.STARTED and self.player)

    def update(self):
        #print("VIDEOPLAYER: update")
        if self.USING_VLC:
            if self.player.get_length() - self.player.get_time(
            ) < 2000 and not self.PAUSED:
                print("VIDEOPLAYER VLC: a due secondi dalla fine")
                self.PAUSED = True
                self.player.set_pause(1)
        else:
            if self.player.duration() - self.player.position(
            ) < 2 and not self.PAUSED:
                print('VIDEOPLAYER OMX: a due secondi dalla fine')
                self.PAUSED = True
                self.player.pause()
        #self.printStatus()

    def printStatus(self):
        print("VIDEOPLAYER: started {}, paused {}".format(
            self.STARTED, self.PAUSED))

    def changeChapter(self, chapter):
        print("VIDEOPLAYER: change chapter")
        if chapter != 0:
            print("VIDEOPLAYER: chapter != 0")
            # in origin era così riga commentata)
            #if self.PAUSED == True:
            #if self.PAUSED == False:
            #print("VIDEOPLAYER: paused is true")
            if self.USING_VLC:
                self.player.set_pause(0)
            else:
                if self.player:
                    self.player.play()
            self.PAUSED = False

            if self.USING_VLC:
                self.handle_chapter_vlc(chapter)
            else:
                self.handle_chapter_omx(chapter)
        """
		if self.USING_VLC:
			if  self.player.get_length() - self.player.get_time() < 2000 and not self.PAUSED:
				self.PAUSED = True
				self.player.set_pause(1)
		else:
			if  self.player.duration() - self.player.position() < 2 and not self.PAUSED:
				print('...pausing video')
				self.PAUSED = True
				self.player.pause()
				
		"""
        """
		#not using language right now
		# return to italian language
		if self.audioPlayerRef:
			self.audioPlayerRef.switchToITA()
		"""

    def isPlaying(self):
        return self.STARTED

    def switch_language(self):
        print("Video: switch language...")
        if self.audioPlayerRef:
            self.audioPlayerRef.switchLanguage()
        if self.player:
            self.player.set_position(0)

    # get all chapters of video file
    def get_chapters(self):
        buff = sp.check_output([
            "ffmpeg", "-i", self.VIDEO_FILE, "-f", 'ffmetadata', "file.txt",
            '-y'
        ],
                               stderr=sp.STDOUT,
                               universal_newlines=True)
        #print(buff)
        self.chapters = []
        self.chapters_info = {}
        names = []
        i = 0
        for line in iter(buff.splitlines()):
            m = re.match(
                r".*Chapter #(\d+:\d+): start (\d+\.\d+), end (\d+\.\d+).*",
                line)
            if m != None and m.group(1) not in names:
                names.append(m.group(1))
                self.chapters.append({
                    "name": i + 1,
                    "start": float(m.group(2)),
                    "end": float(m.group(3))
                })
                i = i + 1
        if len(self.chapters) == 2:
            self.chapters[len(self.chapters) - 1]['name'] = 3
        return self.chapters

    # check where i am:
    # 0: before chapter 1
    # 1: chapter 1
    # 2: chapter 2
    # 3: chapter 3
    # 10 last chapter
    def pos2chapter(self, pos):
        # ~ print('actual position', pos)
        for x in self.chapters:
            if pos >= x['start'] / 1000 and pos <= x['end']:
                return x['name']
        if pos < self.chapters[0]['start']:
            return 0
        if pos > self.chapters[len(self.chapters) - 1]['end']:
            return self.chapters[len(self.chapters) - 1]['name']

    # vlc chapter manager
    def handle_chapter_vlc(self, c):
        print('VIDEOPLAYER VLC: going to', len(self.chapters), c)
        if len(self.chapters) == 2:
            if c == 3:
                print(1)
                self.player.set_chapter(1)
            if c == 1:
                print(2)
                self.player.set_chapter(0)
        else:
            self.player.set_chapter(c - 1)
        self.audioPlayerRef.stop()
        if c == 1:
            self.audioPlayerRef.start()
        self.curr_chapter = c

    # chapter manager
    def handle_chapter_omx(self, c):
        self.curr_chapter = self.pos2chapter(self.player.position())
        print('VIDEOPLAYER OMX: Handle chapter: from', self.curr_chapter, 'to',
              c)
        # ~ if c != curr_chapter and c in [f['name'] for f in chapters]:
        if c in [f['name'] for f in self.chapters]:
            cpt = self.chapters[[
                y for y, x in enumerate(self.chapters) if x['name'] == c
            ][0]]
            time.sleep(1)
            print('going to', cpt['start'])
            self.player.set_position(cpt['start'])
            time.sleep(1)
            self.audioPlayerRef.stop()
            if c == 1:
                self.audioPlayerRef.start()
            self.curr_chapter = c

    def kill(self):
        print("Kill video...")
        if self.USING_VLC:
            self.player.stop()
        else:
            self.player.quit()
            self.player = None
from pathlib import Path
from time import sleep
import logging
#import RPi.GPIO as GPIO

#GPIO.setmode (GPIO.BOARD)
#GPIO.setwarnings (False)

VIDEO_PATH = "/home/pi/Desktop/elephant.mp4"
player_log = logging.getLogger("Player1")


intro = OMXPlayer(VIDEO_PATH, ['-o', 'local'], dbus_name='org.mpris.MediaPlayer2.omxplayer1')

intro.playEvent += lambda _: player_log.info("Play")
intro.pauseEvent += lambda _: player_log.info("Pause")
intro.stopEvent += lambda _: player_log.info("Stop")

sleep(2.5)

intro.set_position(5)
intro.pause()

sleep(1)
intro.set_aspect_mode("letterbox")
intro.set_video_pos(50,100,1000,1000)

intro.play()

sleep(5)
intro.quit()
Beispiel #25
0
vidPath = "raspi.avi"
player_log = logging.getLogger("Player 1")

player = OMXPlayer(vidPath, dbus_name='org.mpris.MediaPlayer2.omxplayer1')
player.playEvent += lambda _: player_log.info("Play")
player.pauseEvent += lambda _: player_log.info("Pause")
player.stopEvent += lambda _: player_log.info("Stop")

player.set_aspect_mode('stretch')
player.set_video_pos(0, 0, 700, int(512 * 2.14))
sleep(10)

if noCommMode:
    # for debugging
    player.set_position(120 * 60)
    #    player.play()
    #    sleep(1)
    #    player.pause()
    sleep(20)
    player.set_position(130 * 60)
    #    player.play()
    sleep(20)
    player.set_position(140 * 60)
    sleep(20)
    player.stop()

else:
    while True:
        data = conn.recv(1024)
        print('received: ' + str(data))
Beispiel #26
0
#player1.stopEvent += lambda _: print("Stop event triggered") #player_log.info("Stop")

player2.playEvent += lambda _: print("Play event triggered for 2"
                                     )  #player_log.info("Play")
player2.pauseEvent += lambda _: print("Pause event triggered for 2"
                                      )  #player_log.info("Pause")
player2.stopEvent += lambda _: print("Stop event triggered for 2"
                                     )  #player_log.info("Stop")

time.sleep(2.5)

player2.play()
# it takes about this long for omxplayer to warm up and start displaying a picture on a rpi3
time.sleep(15.5)

player2.set_position(20)
player2.pause()

time.sleep(2)

#player.set_aspect_mode('stretch')
#player.set_video_pos(0, 0, 200, 200)
player2.play()

time.sleep(5)
player2.pause()
player2.load(VIDEO_1_PATH)
player2.play()
#player1.play()
time.sleep(5)
Beispiel #27
0
        time.sleep(0.00001)                      
        GPIO.output(TRIG, False)                 

        while GPIO.input(ECHO)==0:
            pulse_start = time.time()

        while GPIO.input(ECHO)==1:
            pulse_end = time.time()

        pulse_duration = pulse_end - pulse_start 

        distance = pulse_duration * 17150        
        distance = round(distance, 2)    

        #Check whether the distance is within range
        if distance > 2 and distance < distSensado:
            #print ("Distancia:",distance - 0.5,"cm")
            print("Accion numero {}".format(tgr),"- Distancia:",distance - 0.5,"cm")
            player.play()
            time.sleep(player.duration())
            tgr = tgr + 1
        else:
            print ("Usuario fuera de rango")

        player.set_position(0.0)

except KeyboardInterrupt:
    player.quit()
    GPIO.cleanup()
    time.sleep(3)
    sys.exit()
Beispiel #28
0
class VideoPlayerScreen(Screen):
    slider = ObjectProperty()
    minimized = BooleanProperty(False)

    @staticmethod
    def clearbckgrnd():
        Window.clearcolor = (0, 0, 0, 0)

    @staticmethod
    def addbckgrnd():
        Window.clearcolor = (0, 0, 0, 1)

    def play(self):
        VIDEO_PATH = Path("../videos/20200308tagesthemen.mp4")

        self.player = OMXPlayer(VIDEO_PATH,
                                args=['-o', 'alsa', '--layer', '10000'])
        #self.player = OMXPlayer('/home/pi/Documents/Radio/videos/20200223tagesthemen.mp4')
        self.player.set_video_pos(0, 0, 800, 480)
        #self.player.hide_video()
        #self.player.show_video()
        self.player.set_alpha(100)
        self.set_slider()
        #Clock.schedule_once(self.quit, 20)
        Clock.schedule_interval(self.set_slider, 3)

    def playpause(self):
        self.player.play_pause()

    def quit(self, gg, **kwargs):
        self.player.quit()
        App.get_running_app().stop()

    def set_slider(self, *args):
        pos = self.player.position()  # in seconds as int
        duration = self.player.duration()  # in seconds as float
        #return pos/duration
        self.slider.value_normalized = pos / duration
        #return 0.5

    def set_videopos(self, *args):
        pos = self.player.position()  # in seconds as int
        duration = self.player.duration()  # in seconds as float
        if abs(pos / duration - self.slider.value_normalized) > 0.05:
            self.player.set_position(self.slider.value_normalized * duration)

    def change_size(self):
        # pass
        #width 800
        #height 480

        # check if crop as alternative

        if self.minimized:
            # self.player.set_video_pos(2,2,798,478)
            self.player.set_alpha(255)
        else:
            # self.player.set_video_pos(2,2,798,418)
            self.player.set_alpha(100)

        self.minimized = not self.minimized
Beispiel #29
0
class OmxPlayer(BasePlayer):
    def __init__(self, hplayer, name):
        super().__init__(hplayer, name)

        self._validExt = [
            'mp4', 'm4v', 'mkv', 'avi', 'mov', 'flv', 'mpg', 'wmv', '3gp',
            'mp3', 'aac', 'wma', 'wav', 'flac', 'aif', 'aiff', 'm4a', 'ogg',
            'opus', 'webm', 'jpg', 'jpeg', 'gif', 'png', 'tif', 'tiff'
        ]

        self._thread = None
        self._runflag = threading.Event()
        self.player = None

    ############
    ## private METHODS
    ############

    # MPV THREAD
    def _mpv_thread(self):

        self.emit('player-ready')
        self.emit('status', self.status())

        self.log("player ready")

        while self.isRunning():

            self._runflag.wait(0.37)
            if self._runflag.isSet():
                self.update('time', round(self.player.position(), 2))
                time.sleep(0.05)

        self.isRunning(False)
        return

    def _onPlay(self, p):
        self.update('isPlaying', True)
        self.update('isPaused', False)
        self.emit('playing')
        self._runflag.set()
        self.log('play')

    def _onPause(self, p):
        self.update('isPlaying', False)
        self.update('isPaused', True)
        self.emit('paused')
        self._runflag.clear()
        self.log('pause')

    def _onExit(self, p, c):
        self.player._connection._bus.close()
        self.player._connection = None
        self.player = None
        self._runflag.clear()
        self.update('isPlaying', False)
        self.update('isPaused', False)
        self.emit('end')
        self.emit('stopped')
        self.log('stop')

    ##########
    ## Inherited "abstract" METHODS overloads
    ##########

    #
    # Start the player:
    #   - instantiate mpv subprocess
    #   - connect IPC socket i/o
    #
    def _start(self):

        # Playback thread
        self._thread = threading.Thread(target=self._mpv_thread)
        self._thread.start()

    #
    # Exit the player
    #   - stop subprocess
    #   - close IPC socket
    #
    def _quit(self):
        self.isRunning(False)
        if self._thread:
            # self.log("stopping process thread")
            self._thread.join()
        self.log("stopped")

    def _play(self, path):
        self.log("play", path)

        if self.player:
            self.player.quit()

        self.player = OMXPlayer(path,
                                dbus_name='org.mpris.MediaPlayer2.omxplayer2')
        self.player.playEvent += self._onPlay
        self.player.pauseEvent += self._onPause
        # self.player.stopEvent += self._onStop
        self.player.exitEvent += self._onExit
        self.player.play()
        # self.player.set_video_pos(0,0,100,100)

        # self.update('duration', round(self.player.duration(),2))

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

    def _pause(self):
        if self.player:
            self.player.pause()

    def _resume(self):
        if self.player:
            self.player.play()

    def _seekTo(self, milli):
        if self.player:
            self.player.set_position(milli / 1000)
        # self.log("seek to", milli/1000)

    def _skip(self, milli):
        if self._status['time'] + milli / 1000 < self._status['duration']:
            if self.player:
                self.player.seek(milli / 1000)
        # self.log("skip", milli/1000)

    def _applyVolume(self, volume):
        if self.player:
            self.player.set_volume(volume / 10.0)
        self.log("VOLUME to", volume)
from time import sleep
import logging
logging.basicConfig(level=logging.INFO)


VIDEO_1_PATH = "../tests/media/test_media_1.mp4"
player_log = logging.getLogger("Player 1")

player = OMXPlayer(VIDEO_1_PATH, 
        dbus_name='org.mpris.MediaPlayer2.omxplayer1')
player.playEvent += lambda _: player_log.info("Play")
player.pauseEvent += lambda _: player_log.info("Pause")
player.stopEvent += lambda _: player_log.info("Stop")

# it takes about this long for omxplayer to warm up and start displaying a picture on a rpi3
sleep(2.5)

player.set_position(5)
player.pause()


sleep(2)

player.set_aspect_mode('stretch')
player.set_video_pos(0, 0, 200, 200)
player.play()

sleep(5)

player.quit()
height = '1100'
print("Starting up....")
tgr = 0
try:
    player = OMXPlayer('/home/pi/Videos/portraitsallhd.mp4',  args=['--no-osd', '--loop', '--win', '{0} {1} {2} {3}'.format(x, y, width, height)])
    pir = MotionSensor(4)
    sleep(1)
    print("Ready to trigger")
    #player.play()
    while True:
        player.pause()
        if pir.motion_detected:
            print('trigger count {}'.format(tgr))
            print('sleeping for {}'.format(obj[tgr]['duration']))
            player.play()
            sleep(obj[tgr]['duration'])
            print("Ready to trigger")
            tgr = tgr + 1
            if tgr < len(obj) : 
                player.set_position(obj[tgr]['start'])
            else:
                tgr = 0
                player.set_position(0)
        else:
            pass

except KeyboardInterrupt:
    player.quit()
    sleep(3)
    sys.exit()
duration = 65

VIDEO_PATH = Path("~/vis_display_combined.mp4")
player = OMXPlayer(VIDEO_PATH,args=["--loop","--no-osd"])
#player.set_aspect_mode("stretch")
#player.set_video_pos(0,0,1280,800)
player.mute()
print "Started Video!\n"

try:
    while True:
        message = ser.readline().rstrip().lstrip()
        print message
	if message.startswith('START'):
            id = int(message[5])
            player.set_position(timestamps[id])
            player.unmute()
	if message.startswith('TIMEOUT'):
            player.mute()
	if message.startswith('QUIT'):
            break
except KeyboardInterrupt:
	print "Interrupted"
except Exception as exception:
	#continue and quit
	print "Exception:"
	print exception

ser.close()
player.quit()
Beispiel #33
0
altSensor = YAltitude.FindAltitude(target + '.altitude')

#init video in omx
FULL_TIME = 238.5
HALF_TIME = FULL_TIME / 2
VIDEO_PATH = Path("UPP_NER_2.mp4")
player = OMXPlayer(VIDEO_PATH, args=['--no-osd'])

#get playback rate from arguments
rate = float(sys.argv[1])
print('rate', rate)

sleep(1)

player.set_rate(rate)
player.set_position(30)

print(player.rate())


def run_altiplayer(p, sensor):
    pos = 0
    first = sensor.get_currentValue()
    prev = sensor.get_currentValue()
    # prev2 = prev
    last_direction = "UP"
    while sensor.isOnline():

        if p.position() > 0:
            pos = p.position()
Beispiel #34
0
    osrs_t = 1  # Temperature oversampling x 1
    mode = 3  # Normal mode
    t_sb = 5  # Tstandby 1000ms
    filter = 0  # Filter off
    spi3w_en = 0  # 3-wire SPI Disable

    ctrl_meas_reg = (osrs_t << 5) | mode
    config_reg = (t_sb << 5) | (filter << 2) | spi3w_en

    writeReg(0xF4, ctrl_meas_reg)
    writeReg(0xF5, config_reg)


setup()
get_calib_param()

time.sleep(3)
player_sub = OMXPlayer(VIDEO_PATH_SUB)

time.sleep(3)
player_sub.set_position(0)
player_sub.pause()

if __name__ == '__main__':
    try:
        while True:
            readData()
            time.sleep(5)
    except KeyboardInterrupt:
        pass