diff --git a/display_centre.py b/display_centre.py index bde448f..b6faa4b 100644 --- a/display_centre.py +++ b/display_centre.py @@ -7,7 +7,6 @@ import traceback from data_centre import * from tkinter import * import tkinter.font -import omxdriver import video_centre import data_centre @@ -37,7 +36,7 @@ video_driver = video_centre.video_driver(frame) # our data store data_object = data_centre.data() -video_player = omxdriver.omx_driver(frame, 'nope') +#video_player = omxdriver.omx_driver(frame, 'nope') browser_list = data_object.get_browser_data_for_display() @@ -272,7 +271,8 @@ def up_key(event): global browser_index global browser_start_index elif display_mode == "LOOPER": - video_driver.current_player.jump_video_back() + pass + #video_driver.current_player.jump_video_back() def down_key(event): if display_mode in ["BROWSER", "SETTINGS"]: @@ -280,7 +280,8 @@ def down_key(event): global browser_index global browser_start_index elif display_mode == "LOOPER": - video_driver.current_player.jump_video_forward() + pass + #video_driver.current_player.jump_video_forward() def backspace_key(event): diff --git a/next_bank_number.json b/next_bank_number.json index c793025..e440e5c 100644 --- a/next_bank_number.json +++ b/next_bank_number.json @@ -1 +1 @@ -7 \ No newline at end of file +3 \ No newline at end of file diff --git a/video_centre.py b/video_centre.py index 6566950..8d1f55b 100644 --- a/video_centre.py +++ b/video_centre.py @@ -1,7 +1,7 @@ import time try: - from omxdriver import omx_driver # <== for deving only + from video_player import video_player # <== for deving only has_omx = True except ImportError: has_omx = False @@ -34,7 +34,7 @@ class video_driver(object): # TODO: the first clip will be a demo # first_context = '/home/pi/pp_home/media/01_trashpalaceintro.mp4' - self.current_player.load_content() + self.current_player.load() self.wait_for_first_load() @@ -58,10 +58,10 @@ class video_driver(object): def play_video(self): logger.info('{} is about to play'.format(self.current_player.name)) - self.current_player.play_content() + self.current_player.play() # self.last_player.exit() - self.next_player.load_content() + self.next_player.load() self.wait_for_next_cycle() @@ -75,10 +75,6 @@ class video_driver(object): self.next_player.name)) self.switch_players() self.play_video() - elif(self.next_player.failed_to_load): - self.switch_players() - self.next_player.load_content() - self.widget.after(self.delay, self.wait_for_next_cycle) else: logger.info('{} is not loaded yet!'.format( self.next_player.name)) @@ -96,8 +92,8 @@ class video_driver(object): def get_info_for_video_display(self): if has_omx: - return self.current_player.bank_number, self.current_player.omx.status, self.next_player.bank_number, \ - self.next_player.omx.status, self.current_player.get_position(), self.current_player.length + return self.current_player.bank_number, self.current_player.status, self.next_player.bank_number, \ + self.next_player.status, self.current_player.get_position(), self.current_player.length else: return 0, 'test', 1, 'test', 0, 10 @@ -105,99 +101,3 @@ class video_driver(object): self.next_player.exit() self.current_player.exit() - -class video_player(object): - def __init__(self, widget, name): - self.widget = widget - self.name = name - self.video_name = '' - self.status = 'UNASSIGNED' - self.bank_number = '-' - self.position = 0 - self.start = '' - self.end = '' - self.length = 10 - self.location = '' - self.failed_to_load = False - self.omx = omx_driver(self.widget, dbus_name=self.name) - - def is_loaded(self): - return self.omx.status is 'LOADED' - - def is_finished(self): - return self.omx.status is 'FINISHED' - - def get_position(self): - if self.omx.status is not 'LOADING': - return self.omx.get_position() - else: - return 0 - - def play_content(self): - - logger.info('{} is playing now'.format(self.name)) - self.omx.play() - - def load_content(self): - try: - self.get_context_for_this_player() - logger.info('{} is loading now {}'.format( - self.name,self.location )) - if self.location == '' : - data_centre.set_message("failed to load - bank empty") - print('failed to load') - self.failed_to_load = True - else: - self.omx.load(self.location, - ['--no-osd']) #'{}'.format(screen_size), - except Exception as e: - print('load problems, the current message is: {}'.format(e.message)) - data_centre.set_message(e.message) - - def get_context_for_this_player(self): - next_context = data_centre.get_next_context() - self.location = next_context['location'] - self.length = next_context['length'] - self.start = next_context['start'] - self.end = next_context['end'] - self.video_name = next_context['name'] - self.bank_number = next_context['bank_number'] - - def reload_content(self): - self.status = 'RELOADING' - if self.is_loaded(): - self.exit() - else: - self.widget.after(50, self.reload_content) - print("trying to reload") - self.load_content() - - def exit(self): - try: - if (self.is_loaded): - logger.info('{} is exiting omx'.format(self.name)) - self.omx.quit() - self.omx = omx_driver(self.widget, dbus_name=self.name) - except Exception as e: - print('the current message is: {}'.format(e.message)) - data_centre.set_message(e.message) - - def toggle_pause(self): - self.omx.toggle_pause() - - def jump_video_forward(self): - self.omx.seek(30) - - def jump_video_back(self): - self.omx.seek(-30) - - -# tk = Tk() - -# canvas = Canvas(tk,width=500,height=400, bd=0, highlightthickness=0) -# canvas.pack() - -# driver = video_driver(canvas) - -# while True: -# tk.update() diff --git a/video_player.py b/video_player.py new file mode 100644 index 0000000..b698a08 --- /dev/null +++ b/video_player.py @@ -0,0 +1,90 @@ +from omxplayer.player import OMXPlayer +import data_centre + +class video_player: + def __init__(self, root, name): + self.root = root + self.player = None + self.name = name + self.omx_running = False + self.status = 'UNASSIGNED' + self.duration = 0 + self.bank_number = '-' + self.start = -1 + self.end = -1 + self.length = 0 + self.location = '' + self.arguments = ['--no-osd'] #'{}'.format(screen_size), + + def load(self): + self.get_context_for_player() + + self.status = 'LOADING' + self.player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name) + self.omx_running = True + self.duration = self.player.duration() + print('{}: the duration is {}'.format(self.name, self.duration)) + self.pause_at_start() + + def pause_at_start(self): + position = self.get_position() + print('{}: the pause_at_start position is {}'.format(self.name, position)) + if(position > -0.05): + self.status = 'LOADED' + self.player.pause() + print('{}: its paused'.format(self.name)) + else: + self.root.after(5,self.pause_at_start) + + def play(self): + self.status = 'PLAYING' + self.player.play() + self.pause_at_end() + + def pause_at_end(self): + position = self.get_position() + print('{}: the pause_at_end position is {}'.format(self.name, position)) + if(position > (self.duration - 0.15 )): + self.status = 'FINISHED' + print('time to end is {}'.format(self.duration - position)) + self.player.pause() + print('its finished') + elif(self.omx_running): + self.root.after(5,self.pause_at_end) + + 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.player.position() + except: + return -1 + + def get_context_for_player(self): + next_context = data_centre.get_next_context() + self.location = next_context['location'] + self.length = next_context['length'] + self.start = next_context['start'] + self.end = next_context['end'] + self.bank_number = next_context['bank_number'] + + def toggle_pause(self): + self.player.play_pause() + + self.status = self.player.playback_status().upper() + + def seek(self, amount): + self.player.seek(amount) + + def exit(self): + try: + self.player.quit() + self.omx_running = False + except: + pass + +