Files
r_e_c_u_r/video_centre/video_player.py
2018-01-06 00:40:16 +00:00

143 lines
4.1 KiB
Python

try:
from omxplayer.player import OMXPlayer
except:
pass
class video_player:
def __init__(self, root, message_handler, data, name):
self.root = root
self.message_handler = message_handler
self.data = data
self.screen_size = self.set_screen_size()
self.omx_player = None
self.name = name
self.omx_running = False
self.status = 'N/A'
self.duration = 0.0
self.bank_number = '-'
self.start = -1.0
self.end = -1.0
self.length = 0.0
self.location = ''
self.arguments = ['--no-osd', '--win', self.screen_size, '--alpha', '0']
def load(self):
self.get_context_for_player()
self.status = 'LOADING'
self.omx_player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
self.omx_running = True
print('duration is: {}'.format(self.duration))
self.duration = self.omx_player.duration() # <-- uneeded once self.duration stores float
print('new duration is: {}'.format(self.duration))
if(self.end is -1):
self.end = self.duration
if(self.start is -1):
self.start = 0
print('{}: the duration is {}'.format(self.name, self.duration))
if(self.start > 0.5):
self.set_position(self.start - 0.5)
self.pause_at_start()
def pause_at_start(self):
position = self.get_position()
start_threshold = self.start - 0.05
if(position > start_threshold):
self.status = 'LOADED'
self.omx_player.pause()
self.omx_player.set_alpha(255)
elif(self.omx_running):
self.root.after(5,self.pause_at_start)
def play(self):
self.status = 'PLAYING'
self.omx_player.play()
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):
self.exit()
self.omx_running = False
self.load()
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.duration = next_context['length']
self.start = next_context['start']
self.end = next_context['end']
self.length = self.end - self.start
self.bank_number = next_context['bank_number']
def toggle_pause(self):
self.omx_player.play_pause()
self.status = self.omx_player.playback_status().upper()
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 set_position(self, position):
self.omx_player.set_position(position)
def exit(self):
try:
self.omx_player.quit()
self.status = 'N/A'
self.omx_running = False
except:
pass
def set_screen_size(self):
if self.data.DEV_MODE == 'ON':
return '50,350,550,750'
else:
return '45,15,970,760'
class fake_video_player:
def __init__(self):
self.player = None
self.name = 'fake'
self.omx_running = False
self.status = 'N/A'
self.duration = 0
self.bank_number = '-'
self.start = -1
self.end = -1
self.length = 0
self.location = ''