77 lines
1.7 KiB
Python
77 lines
1.7 KiB
Python
# Copyright 2019 (c) Anna Schumaker.
|
|
from . import artwork
|
|
from gi.repository import GLib, Gst
|
|
|
|
Playbin = Gst.ElementFactory.make("playbin")
|
|
Fakesink = Gst.ElementFactory.make("fakesink")
|
|
Bus = Playbin.get_bus()
|
|
|
|
Bus.add_signal_watch()
|
|
|
|
|
|
def get_state():
|
|
(ret, state, pending) = Playbin.get_state(Gst.CLOCK_TIME_NONE)
|
|
if ret == Gst.StateChangeReturn.SUCCESS:
|
|
return state
|
|
return ret
|
|
|
|
def get_property(key):
|
|
return Playbin.get_property(key)
|
|
|
|
def set_property(key, value):
|
|
Playbin.set_property(key, value)
|
|
|
|
set_property("video-sink", Fakesink)
|
|
|
|
|
|
def set_uri(uri, state=None):
|
|
uri = GLib.filename_to_uri(uri)
|
|
if state != None:
|
|
Playbin.set_state(Gst.State.NULL)
|
|
artwork.reset()
|
|
set_property("uri", uri)
|
|
if state != None:
|
|
Playbin.set_state(state)
|
|
|
|
def set_volume(volume):
|
|
set_property("volume", volume / 100.0)
|
|
|
|
|
|
def position():
|
|
(res, pos) = Playbin.query_position(Gst.Format.TIME)
|
|
return pos if res == True else 0
|
|
|
|
def duration():
|
|
(res, dur) = Playbin.query_duration(Gst.Format.TIME)
|
|
return dur if res == True else 0
|
|
|
|
def remaining():
|
|
return duration() - position()
|
|
|
|
def progress():
|
|
dur = duration()
|
|
return (position() * 100) / dur if dur > 0 else 0
|
|
|
|
|
|
def play():
|
|
return Playbin.set_state(Gst.State.PLAYING)
|
|
|
|
def pause():
|
|
return Playbin.set_state(Gst.State.PAUSED)
|
|
|
|
def seek_percent(percent):
|
|
pos = (duration() * percent) / 100.0
|
|
return Playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH, pos)
|
|
|
|
def seek_step(step):
|
|
pos = position() + (step * Gst.SECOND)
|
|
if pos < 0:
|
|
pos = 0
|
|
return Playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH, pos)
|
|
|
|
|
|
def reset():
|
|
Playbin.set_state(Gst.State.NULL)
|
|
seek_percent(0)
|
|
set_volume(100)
|