mpv的外部控制

Table of Contents

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)