mpv的外部控制
mpv本身有一种外部通信机制,通过pipe基于json的ipc通信协议进行控制,简单试一下先。
创建pipe
# windows mpv --no-config --input-ipc-server=\\.\pipe\mpv z.mp4 # linux mpv --no-config --input-ipc-server=/tmp/mpvsocket z.mp4
windows的管道文件创建在UNC路径下,所以检查是否创建成功,要用\\.\pipe\这种路径看看有没有生成pipe文件。
ls \\.\pipe\ | findstr mpv
基础功能
有了pipe文件之后,就可以通过对其写入进行通信。
暂停
echo '{"command": ["setproperty", "pause", true]}' > \\.\pipe\mpv
快进快退
echo '{"command": ["seek", 10, "relative"]}' > \\.\pipe\mpv echo '{"command": ["seek", -10, "relative"]}' > \\.\pipe\mpv
设置音量
echo '{"command": ["setproperty", "volume", "100"]}' > \\.\pipe\mpv
关闭
echo '{ "command": ["quit"] }' > \\.\pipe\mpv
给所有mpv实例都构建pipe
我个人喜欢把这种pipe的通信给每个实例都加上,所以在mpv的配置lua中添加了下面的代码,让所有mpv实例都拥有一个mpv-socket-[pid] 这种以mpv-socket-开头进程id为后缀的格式。
mp.set_property('input-ipc-server', 'mpv-socket-' .. mp.get_property('pid')) mp.register_event('shutdown', function () os.remove([[\\.\pipe\]] .. mp.get_property('input-ipc-server')) end)