Skip to content

JSON IPC

本节介绍 mpv 的 JSON IPC 接口。

IPC 配置

启用 IPC

bash
# 启用 JSON IPC
input-ipc-server=/tmp/mpv-socket

# Windows
input-ipc-server=\\.\pipe\mpv-socket

IPC 选项

bash
# IPC 服务器
input-ipc-server=/tmp/mpv-socket

# IPC 超时
input-ipc-timeout=10

IPC 命令

发送命令

bash
# 发送命令
echo '{"command": ["set_property", "volume", 80]}' | socat - /tmp/mpv-socket

# 获取属性
echo '{"command": ["get_property", "volume"]}' | socat - /tmp/mpv-socket

# 执行命令
echo '{"command": ["seek", 10]}' | socat - /tmp/mpv-socket

命令格式

json
{
    "command": ["command_name", "arg1", "arg2"]
}

响应格式

json
{
    "error": "success",
    "data": 80
}

IPC 命令列表

属性命令

bash
# 获取属性
{"command": ["get_property", "volume"]}

# 设置属性
{"command": ["set_property", "volume", 80]}

# 获取属性
{"command": ["get_property_string", "media-title"]}

命令命令

bash
# 执行命令
{"command": ["seek", 10]}

# 播放控制
{"command": ["set_property", "pause", true]}

# 截图
{"command": ["screenshot"]}

IPC 脚本

Python 脚本

python
import socket
import json

def send_command(command):
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect('/tmp/mpv-socket')
    
    data = json.dumps({"command": command})
    sock.send(data.encode())
    
    response = sock.recv(1024)
    sock.close()
    
    return json.loads(response)

# 使用示例
result = send_command(["get_property", "volume"])
print(result)

Node.js 脚本

javascript
const net = require('net');

function sendCommand(command) {
    return new Promise((resolve, reject) => {
        const client = net.createConnection('/tmp/mpv-socket', () => {
            const data = JSON.stringify({ command });
            client.write(data);
        });
        
        client.on('data', (data) => {
            client.end();
            resolve(JSON.parse(data));
        });
        
        client.on('error', reject);
    });
}

// 使用示例
sendCommand(['get_property', 'volume']).then(result => {
    console.log(result);
});

IPC 调试

调试信息

bash
# 显示 IPC 信息
mpv --msg-level=all=v video.mp4

# 测试 IPC
mpv --input-ipc-server=/tmp/mpv-socket video.mp4

IPC 测试

bash
# 测试 IPC 连接
echo '{"command": ["get_property", "volume"]}' | socat - /tmp/mpv-socket

# 测试 IPC 命令
echo '{"command": ["set_property", "volume", 80]}' | socat - /tmp/mpv-socket

IPC 故障排除

常见问题

  1. IPC 连接失败

    • 检查 IPC 服务器配置
    • 检查文件权限
  2. IPC 命令不执行

    • 检查命令格式
    • 检查命令参数
  3. IPC 响应异常

    • 检查响应格式
    • 检查错误信息

调试命令

bash
# 显示 IPC 信息
mpv --msg-level=all=v video.mp4

# 测试 IPC
mpv --input-ipc-server=/tmp/mpv-socket video.mp4

下一步