mediaplayer 0.1.0

Safe Rust bindings for MediaPlayer.framework — Now Playing info and Remote Commands on macOS
Documentation

mediaplayer-rs

Safe Rust bindings for Apple's MediaPlayer.framework on macOS — Now Playing info and Remote Commands.

Status: v0.1.0 covers MPNowPlayingInfoCenter metadata, MPRemoteCommandCenter handler registration, and MPMediaItemArtwork creation from file paths.

Quick start

use mediaplayer::prelude::*;

fn main() {
    let center = NowPlayingInfoCenter::default_center();

    let info = NowPlayingInfo::new()
        .title("My Song")
        .artist("doom-fish")
        .album_title("Tests")
        .playback_duration(300.0)
        .elapsed_playback_time(0.0)
        .playback_rate(1.0)
        .media_type(NowPlayingMediaType::Audio);

    center.set_now_playing_info(&info);
    center.set_playback_state(PlaybackState::Playing);

    let rcc = RemoteCommandCenter::shared();

    let _play = rcc.on_play(|_| HandlerStatus::Success);
    let _pause = rcc.on_pause(|_| HandlerStatus::Success);

    // … your playback loop …

    center.clear();   // or just drop `center`
}

Highlights

  • NowPlayingInfoCenter — fluent NowPlayingInfo builder, set_now_playing_info, set_playback_state, clear(), auto-clear on drop.
  • RemoteCommandCenteradd_handler + per-command convenience (on_play, on_pause, on_toggle_play_pause, on_next_track, on_previous_track, on_skip_forward, on_skip_backward, on_seek_forward, on_seek_backward, on_change_playback_position).
  • CommandToken — RAII guard that deregisters and frees the handler on drop.
  • ArtworkMPMediaItemArtwork from a file path; optional explicit bounds CGSize via apple-cf.
  • constants — now-playing info dictionary key strings for documentation reference.

Availability

  • MPNowPlayingInfoCenter, MPRemoteCommandCenter — macOS 10.12.2+
  • MPNowPlayingInfoCenter.playbackState — macOS 10.12.2+
  • MPMediaItemArtwork(boundsSize:requestHandler:) — macOS 10.12.2+

Smoke example

cargo run --example 01_now_playing_smoke

License

Licensed under either of Apache-2.0 or MIT at your option.