#media-player #media #vlc #cross-platform #networking #api-bindings #utility

vlc-rc

A library used to interact with a VLC player's TCP interface

2 releases

0.1.1 May 24, 2022
0.1.0 May 23, 2022

#22 in #media-player

25 downloads per month

MIT license

27KB
483 lines


vlc-rc

A rust library used to interact with a VLC player's TCP interface.

About

This is a (WIP) rust library you can use to interact with VLC programmatically by using its built-in TCP interface.

VLC's TCP interface is not well documented, and is very unpredictable at times, making it exceedingly hard to test in a deterministic matter. Regardless, the library aims to be as stable and testable as possible!

Requirements

Enabling the VLC interface.

There are two ways to enable VLC's TCP interface.

Option 1

You can launch VLC with CLI args like so:

vlc --rc-host 127.0.0.1:9090 # Or any <host>:<port> you prefer!

Option 2

You can enable it via the GUI and it will run each time you start VLC.

  1. Start VLC player.
  2. At the top-left toolbar, go to Tools -> Preferences (Ctrl+P)
  3. Enable 'Advanced Settings' by selecting All at the bottom left of the preferences window (just under Show Settings).
  4. Scroll down until you see the Interface item and then select Main interfaces.
  5. Below 'Extra interface modules', check the Lua interpreter option.
  6. Then to the list on the left, click the arrow next to Main interfaces and then select the Lua item.
  7. At the top, set the Lua interface field's value to rc.
  8. Just below that, set the Lua interface configuration field's value to rc={host='127.0.0.1:9090'} (or any host/port you prefer).
  9. Restart VLC player to start the interface in the background.

Usage

Add the library as a dependency to Cargo.toml:

[dependencies]
vlc-rc = "0.1.1

Example

use vlc_rc::Client;

let mut client = Client::connect("127.0.0.1:9090")?;

// Set the player's volume.
client.set_volume(25)?;
assert_eq!(client.get_volume()?, 25);

// Stop the track's playback.
client.stop()?;
assert_eq!(client.is_playing()?, false);

// Skip to the next track.
client.next()?;

Contributing

See CONTRIBUTING.

Dependencies

~2.2–3MB
~54K SLoC