refacted video_player and omx_driver into one class

This commit is contained in:
langolierz
2017-12-26 04:22:00 +00:00
parent 176ac1cc02
commit 958eef0246
4 changed files with 102 additions and 111 deletions

View File

@@ -7,7 +7,6 @@ import traceback
from data_centre import * from data_centre import *
from tkinter import * from tkinter import *
import tkinter.font import tkinter.font
import omxdriver
import video_centre import video_centre
import data_centre import data_centre
@@ -37,7 +36,7 @@ video_driver = video_centre.video_driver(frame)
# our data store # our data store
data_object = data_centre.data() 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() browser_list = data_object.get_browser_data_for_display()
@@ -272,7 +271,8 @@ def up_key(event):
global browser_index global browser_index
global browser_start_index global browser_start_index
elif display_mode == "LOOPER": elif display_mode == "LOOPER":
video_driver.current_player.jump_video_back() pass
#video_driver.current_player.jump_video_back()
def down_key(event): def down_key(event):
if display_mode in ["BROWSER", "SETTINGS"]: if display_mode in ["BROWSER", "SETTINGS"]:
@@ -280,7 +280,8 @@ def down_key(event):
global browser_index global browser_index
global browser_start_index global browser_start_index
elif display_mode == "LOOPER": elif display_mode == "LOOPER":
video_driver.current_player.jump_video_forward() pass
#video_driver.current_player.jump_video_forward()
def backspace_key(event): def backspace_key(event):

View File

@@ -1 +1 @@
7 3

View File

@@ -1,7 +1,7 @@
import time import time
try: try:
from omxdriver import omx_driver # <== for deving only from video_player import video_player # <== for deving only
has_omx = True has_omx = True
except ImportError: except ImportError:
has_omx = False has_omx = False
@@ -34,7 +34,7 @@ class video_driver(object):
# TODO: the first clip will be a demo # TODO: the first clip will be a demo
# first_context = '/home/pi/pp_home/media/01_trashpalaceintro.mp4' # first_context = '/home/pi/pp_home/media/01_trashpalaceintro.mp4'
self.current_player.load_content() self.current_player.load()
self.wait_for_first_load() self.wait_for_first_load()
@@ -58,10 +58,10 @@ class video_driver(object):
def play_video(self): def play_video(self):
logger.info('{} is about to play'.format(self.current_player.name)) 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.last_player.exit()
self.next_player.load_content() self.next_player.load()
self.wait_for_next_cycle() self.wait_for_next_cycle()
@@ -75,10 +75,6 @@ class video_driver(object):
self.next_player.name)) self.next_player.name))
self.switch_players() self.switch_players()
self.play_video() 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: else:
logger.info('{} is not loaded yet!'.format( logger.info('{} is not loaded yet!'.format(
self.next_player.name)) self.next_player.name))
@@ -96,8 +92,8 @@ class video_driver(object):
def get_info_for_video_display(self): def get_info_for_video_display(self):
if has_omx: if has_omx:
return self.current_player.bank_number, self.current_player.omx.status, self.next_player.bank_number, \ return self.current_player.bank_number, self.current_player.status, self.next_player.bank_number, \
self.next_player.omx.status, self.current_player.get_position(), self.current_player.length self.next_player.status, self.current_player.get_position(), self.current_player.length
else: else:
return 0, 'test', 1, 'test', 0, 10 return 0, 'test', 1, 'test', 0, 10
@@ -105,99 +101,3 @@ class video_driver(object):
self.next_player.exit() self.next_player.exit()
self.current_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()

90
video_player.py Normal file
View File

@@ -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