mpv.py: Add play_bytes convenience function
This commit is contained in:
parent
141ec7d372
commit
4e76f01ecc
2 changed files with 29 additions and 0 deletions
11
mpv.py
11
mpv.py
|
|
@ -1981,6 +1981,17 @@ class MPV(object):
|
||||||
yield write
|
yield write
|
||||||
q.put(EOF)
|
q.put(EOF)
|
||||||
|
|
||||||
|
def play_bytes(self, data):
|
||||||
|
frame = sys._getframe()
|
||||||
|
stream_name = f'__python_mpv_play_generator_{hash(frame)}'
|
||||||
|
|
||||||
|
@self.python_stream(stream_name)
|
||||||
|
def reader():
|
||||||
|
yield data
|
||||||
|
reader.unregister() # unregister itself
|
||||||
|
|
||||||
|
self.play(f'python://{stream_name}')
|
||||||
|
|
||||||
def python_stream_catchall(self, cb):
|
def python_stream_catchall(self, cb):
|
||||||
""" Register a catch-all python stream to be called when no name matches can be found. Use this decorator on a
|
""" Register a catch-all python stream to be called when no name matches can be found. Use this decorator on a
|
||||||
function that takes a name argument and returns a (generator, size) tuple (with size being None if unknown).
|
function that takes a name argument and returns a (generator, size) tuple (with size being None if unknown).
|
||||||
|
|
|
||||||
|
|
@ -664,6 +664,24 @@ class TestStreams(unittest.TestCase):
|
||||||
m.terminate()
|
m.terminate()
|
||||||
disp.stop()
|
disp.stop()
|
||||||
|
|
||||||
|
def test_play_bytes(self):
|
||||||
|
handler = mock.Mock()
|
||||||
|
|
||||||
|
disp = Display()
|
||||||
|
disp.start()
|
||||||
|
m = mpv.MPV(vo=testvo)
|
||||||
|
def cb(evt):
|
||||||
|
handler(evt.as_dict(decoder=mpv.lazy_decoder))
|
||||||
|
m.register_event_callback(cb)
|
||||||
|
|
||||||
|
with open(TESTVID, 'rb') as f:
|
||||||
|
m.play_bytes(f.read())
|
||||||
|
|
||||||
|
m.wait_for_playback()
|
||||||
|
handler.assert_any_call({'event': 'end-file', 'reason': 'eof', 'playlist_entry_id': 1})
|
||||||
|
m.terminate()
|
||||||
|
disp.stop()
|
||||||
|
|
||||||
|
|
||||||
class TestLifecycle(unittest.TestCase):
|
class TestLifecycle(unittest.TestCase):
|
||||||
def test_create_destroy(self):
|
def test_create_destroy(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue