mpv.py: Add play_bytes convenience function

This commit is contained in:
jaseg 2024-01-22 11:52:42 +01:00
parent 141ec7d372
commit 4e76f01ecc
2 changed files with 29 additions and 0 deletions

11
mpv.py
View file

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

View file

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