Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wis/mpvSockets
creates one IPC socket per mpv instance
https://github.com/wis/mpvSockets
mpv
Last synced: 3 months ago
JSON representation
creates one IPC socket per mpv instance
- Host: GitHub
- URL: https://github.com/wis/mpvSockets
- Owner: wis
- License: mit
- Created: 2019-03-26T04:30:55.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-02-13T13:03:58.000Z (9 months ago)
- Last Synced: 2024-06-30T11:36:29.840Z (5 months ago)
- Topics: mpv
- Language: Lua
- Homepage:
- Size: 5.86 KB
- Stars: 69
- Watchers: 6
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-mpv - Sockets - creates one IPC sockets per mpv instance, instead of one socket for the last started instance. _Supports_: Linux, MacOS and Windows. (Input)
README
# mpvSockets
creates a socket for each instance of mpv started, name of the socket is based on the process ID of the mpv instance.dangling sockets for crashed or killed mpv processes is an issue, i'm not sure if this script should handle/remove them or the clients/users, or both.
# Installation
Download the single script file to your mpv-scripts-directory
## Linux / unixes:
``` bash
your_mpv_config_dir_path="$HOME/.config/mpv";
curl "https://raw.githubusercontent.com/wis/mpvSockets/master/mpvSockets.lua" --create-dirs -o "$your_mpv_config_dir_path/scripts/mpvSockets.lua"
```## Windows (untested)
powershell:
``` powershell
Invoke-WebRequest -OutFile "$env:LOCALAPPDATA\mpv\scripts\mpvSockets.lua" "https://raw.githubusercontent.com/wis/mpvSockets/master/mpvSockets.lua"
```# Usage, with Mpv's [JSON IPC](https://github.com/mpv-player/mpv/blob/master/DOCS/man/ipc.rst)
## Linux / unixes (unix sockets):
a script that pauses all running mpv instances:
bash:
``` bash
#!/bin/bash
for i in $(ls /tmp/mpvSockets/*); do
echo '{ "command": ["set_property", "pause", true] }' | socat - "$i";
done
# Socat is a command line based utility that establishes two bidirec-tional byte streams and transfers data between them.
# available on Linux and FreeBSD, propably most unixes. you can also use
```## Windows (named pipes):
quote from https://mpv.io/manual/stable/#command-prompt-example
> Unfortunately, it's not as easy to test the IPC protocol on Windows, since Windows ports of socat (in Cygwin and MSYS2) don't understand named pipes. In the absence of a simple tool to send and receive from bidirectional pipes, the echo command can be used to send commands, but not receive replies from the command prompt.
>
> Assuming mpv was started with:
>
> `mpv file.mkv --input-ipc-server=\\.\pipe\mpvsocket`
> You can send commands from a command prompt:
>
> `echo show-text ${playback-time} >\\.\pipe\mpvsocket`
To be able to simultaneously read and write from the IPC pipe, like on Linux, it's necessary to write an external program that uses overlapped file I/O (or some wrapper like .NET's NamedPipeClientStream.)powershell client writer and reader (untested):
``` powershell
# socat.ps1
# usage: socat.ps1
$sockedName = args[0]
$message = args[1]$npipeClient = new-object System.IO.Pipes.NamedPipeClientStream('.', $socketName, [System.IO.Pipes.PipeDirection]::InOut, [System.IO.Pipes.PipeOptions]::None, [System.Security.Principal.TokenImpersonationLevel]::Impersonation)
$pipeReader = $pipeWriter = $null
try {
$npipeClient.Connect()
$pipeReader = new-object System.IO.StreamReader($npipeClient)
$pipeWriter = new-object System.IO.StreamWriter($npipeClient)
$pipeWriter.AutoFlush = $true$pipeWriter.WriteLine($message)
while (($data = $pipeReader.ReadLine()) -ne $null) {
$data
}
}
catch {
"An error occurred that could not be resolved."
}
finally {
$npipeClient.Dispose()
}
```