Files
FastAnime/fastanime/libs/mpv/player.py

50 lines
1.3 KiB
Python

from subprocess import Popen, PIPE, DEVNULL
import os
import threading
class MPVPlayer:
def __init__(self):
self.mpv_process = None
self.mpv_thread = None
def start_mpv(self):
if self.mpv_process is None:
self.mpv_thread = threading.Thread(target=self.run_mpv)
self.mpv_thread.start()
def run_mpv(self, url):
self.mpv_process = Popen(
["mpv", "--input-ipc-server=/tmp/mpvsocket", "--osc", url],
stdin=PIPE,
stdout=DEVNULL,
stderr=DEVNULL,
preexec_fn=os.setsid,
)
self.mpv_process.wait()
self.mpv_process = None
def send_command(self, command):
if self.mpv_process:
if not self.mpv_process.stdin:
return
self.mpv_process.stdin.write(f"{command}\n".encode("utf-8"))
self.mpv_process.stdin.flush()
def pause(self):
self.send_command('{"command": ["set_property", "pause", true]}')
def play(self):
self.send_command('{"command": ["set_property", "pause", false]}')
def stop_mpv(self):
if self.mpv_process:
self.send_command('{"command": ["quit"]}')
self.mpv_process = None
if not self.mpv_thread:
return
self.mpv_thread.join()
mpv_player = MPVPlayer()