safe libmpv bindings for Rust.
mpv is a media player based on MPlayer and mplayer2. It supports a wide variety of video file formats, audio and video codecs, and subtitle types.
The crate is a safe libmpv API binding in Rust. For more info about mpv, see here.
[dependencies] mpv = "0.2"
the mpv package is needed for this to run.
On linux, you can ask your package manager to install it for you.
# pacman -S mpv
# apt-get install libmpv1
libmpv can be found here for windows. You need to copy the library into your rust binaries folder for it to be linked properly.
2 examples are available from the get go in this crate.
simple.rs will alow you to display a standard mpv player in a new window. Controls will be available.
$ cargo run --example simple
sdl2.rs will embed mpv in an sdl2 window. Controls will not be available and cannot be. If you want an interface on top of this player, you must draw your own with OpenGL calls or SDL2 calls.
$ cargo run --example sdl2
Any contribution is welcome, as well as any code review !
What is left to implement
If you want to contribute, there are quite a few less-used functions and structs of mpv that can be added to mpv-rs
- (advanced) ClientMessage
MpvHandler impls :
- (easy) load_config_file
- (easy) detach_destroy (if only I knew what this was for ?)
- (easy) client_name
- (advanced) set_wakeup_callback
- (advanced) get_wakeup_pipe
- (easy) request_log_messages
- (easy) request_event
MpvHandlerWithGl impls :
- (easy) raw_opengl_ctx() : return the raw opengl context
- (easy, but hard testing) report_flip
- (very hard, probably requires a third-party library such as futures-rs) set_update_callback (partially implemented via update_available)
(easy, long) This crate was done on my early rust days, and as such the current code is very poorly organized. Without changing how this crate works, refactoring everything in coherent files would be a huge plus.
Submitting an issue
Any question concerning the mpv-rs API is welcome in the issues.
If your mpv crashes, please make sure it's coming from this Rust binding and not from libmpv itself.
mpv is globally licensed under GPLv2+ (see here), but this crate is licensed under the MIT/Apache-2.0 (at your option).