You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Basic playback control with playerctl is possible, but triggers an error or segfault when attempting to seek to an absolute/relative position. When inspecting the D-Bus interfaces with d-feet, it becomes obvious that spotifyd offers a different interface from all other software implementing the MPRIS specification.
The SetPosition method expects a string trackid (the rationale being "to avoid race conditions where a client tries to seek to a position when the track has already changed") and a signed int64 in microseconds. Given that the implementation looks very similar to the Seek one, it's likely it's interpreted in milliseconds instead.
To Reproduce
playerctl -p spotifyd position 10 to set absolute position to 10s
playerctl -p spotifyd position 10+ to seek forward by 10s
playerctl -p spotifyd position 10- to seek backward by 10s
To use d-feet:
d-feet
Click on "Session Bus"
Narrow down search results by entering "mpris"
Select the spotifyd one
Click on the /org/mpris/MediaPlayer2 path
Click on the org.mpris.MediaPlayer2.Player interface
Click on the methods
Expected behavior
spotifyd playback continues at 10s or 10s later or 10s earlier
Thanks for the report! Apart from the two that you discovered, there are also some other methods that don't strictly conform to the spec. (There is only VolumeUp and VolumeDown, but no Volume.)
But the one that you mention should be quite easy to fix, I'll create a PR.
Description
Basic playback control with
playerctl
is possible, but triggers an error or segfault when attempting to seek to an absolute/relative position. When inspecting the D-Bus interfaces withd-feet
, it becomes obvious thatspotifyd
offers a different interface from all other software implementing the MPRIS specification.The Seek method expects a signed int64 to be able to seek backwards and forwards. Additionally, it is currently interpreted in milliseconds, but should be interpreted in microseconds.
The SetPosition method expects a string trackid (the rationale being "to avoid race conditions where a client tries to seek to a position when the track has already changed") and a signed int64 in microseconds. Given that the implementation looks very similar to the Seek one, it's likely it's interpreted in milliseconds instead.
To Reproduce
playerctl -p spotifyd position 10
to set absolute position to 10splayerctl -p spotifyd position 10+
to seek forward by 10splayerctl -p spotifyd position 10-
to seek backward by 10sTo use d-feet:
d-feet
/org/mpris/MediaPlayer2
pathorg.mpris.MediaPlayer2.Player
interfaceExpected behavior
Actual behavior
The first playerctl call segfaults:
The second and third fail with a D-Bus error:
Logs
Click to show logs
No logs, duh
Compilation flags
Versions (please complete the following information):
The text was updated successfully, but these errors were encountered: