summaryrefslogtreecommitdiffstats
path: root/DOCS/man/ipc.rst
diff options
context:
space:
mode:
Diffstat (limited to 'DOCS/man/ipc.rst')
-rw-r--r--DOCS/man/ipc.rst140
1 files changed, 140 insertions, 0 deletions
diff --git a/DOCS/man/ipc.rst b/DOCS/man/ipc.rst
new file mode 100644
index 0000000000..b488cd738c
--- /dev/null
+++ b/DOCS/man/ipc.rst
@@ -0,0 +1,140 @@
+JSON IPC
+========
+
+mpv can be controlled by external programs using the JSON-based IPC protocol. It
+can be enabled by specifying the path to a unix socket using the option
+``--input-unix-socket``. Clients can connect to this socket and send commands to
+the player or receive events from it.
+
+Protocol
+--------
+
+Clients can execute commands on the player by sending JSON messages of the
+following form:
+
+::
+
+ { "command": ["command_name", "param1", "param2", ...] }
+
+where ``command_name`` is the name of the command to be executed, followed by a
+list of parameters. Parameters must be formatted as native JSON values
+(integers, strings, booleans, ...). Every message **must** be terminated with
+``\n``. Additionally, ``\n`` must not appear anywhere inside the message. In
+practice this means that messages should be minified before being sent to mpv.
+
+mpv will then send back a reply indicating whether the command was run
+correctly, and an additional field holding the command-specific return data (it
+can also be null).
+
+::
+
+ { "error": "success", "data": null }
+
+mpv will also send events to clients with JSON messages of the following form:
+
+::
+
+ { "event": "event_name" }
+
+where ``event_name`` is the name of the event. Additional event-specific fields
+can also be present. See `List of events`_ for a list of all supported events.
+
+Commands
+--------
+
+Additionally to the commands described in `List of Input Commands`_, a few
+extra commands can also be used as part of the protocol:
+
+``client_name``
+ Return the name of the client as string. This is the string ``ipc-N`` with
+ N being an integer number.
+
+``get_time_us``
+ Return the current mpv internal time in microseconds as a number. This is
+ basically the system time, with an arbitrary offset.
+
+``get_property``
+ Return the value of the given property. The value will be sent in the data
+ field of the replay message.
+
+ Example:
+
+ ::
+
+ { "command": ["get_property", "volume"] }
+ { "data": 50.0, "error": "success" }
+
+``get_property_string``
+ Like ``get_property``, but the resulting data will always be a string.
+
+ Example:
+
+ ::
+
+ { "command": ["get_property_string", "volume"] }
+ { "data": "50.000000", "error": "success" }
+
+``set_property``
+ Set the given property to the given value. See `Properties`_ for more
+ information about properties.
+
+ Example:
+
+ ::
+
+ { "command": ["set_property", "pause", true] }
+ { "error": "success" }
+
+``set_property_string``
+ Like ``set_property``, but the argument value must be passed as string.
+
+ Example:
+
+ ::
+
+ { "command": ["set_property_string", "pause", "yes"] }
+ { "error": "success" }
+
+``observe_property``
+ Watch a property for changes. If the given property is changed, then an
+ event of type ``property-change`` will be generated
+
+ Example:
+
+ ::
+
+ { "command": ["observe_property", 1, "volume"] }
+ { "error": "success" }
+ { "event": "property-change", "id": 1, "data": 52.0, "name": "volume" }
+
+``observe_property_string``
+ Like ``observe_property``, but the resulting data will always be a string.
+
+ Example:
+
+ ::
+
+ { "command": ["observe_property", 1, "volume"] }
+ { "error": "success" }
+ { "event": "property-change", "id": 1, "data": "52.000000", "name": "volume" }
+
+``unobserve_property``
+ Undo ``observe_property`` or ``observe_property_string``. This requires the
+ numeric id passed to the observe command as argument.
+
+ Example:
+
+ ::
+
+ { "command": ["unobserve_property", 1] }
+ { "error": "success" }
+
+``suspend``
+ Suspend the mpv main loop. There is a long-winded explanation of this in
+ the C API function ``mpv_suspend()``. In short, this prevents the player
+ from displaying the next video frame, so that you don't get blocked when
+ trying to access the player.
+
+``resume``
+ Undo one ``suspend`` call. ``suspend`` increments an internal counter, and
+ ``resume`` decrements it. When 0 is reached, the player is actually resumed.