cli_player/
cli_player.rs

1
2// This file is an example for vlc-rs, licensed under CC0.
3// https://creativecommons.org/publicdomain/zero/1.0/deed
4
5extern crate vlc;
6
7use std::sync::mpsc::channel;
8
9use vlc::{Instance, Media, MediaPlayer, Event, EventType, State};
10
11fn main() {
12    let args: Vec<String> = std::env::args().collect();
13
14    let path = match args.get(1) {
15        Some(s) => s,
16        None => {
17            println!("Usage: cli_audio_player path_to_a_media_file");
18            return;
19        }
20    };
21    let instance = Instance::new().unwrap();
22    
23    let md = Media::new_path(&instance, path).unwrap();    
24    let mdp = MediaPlayer::new(&instance).unwrap();
25    
26    let (tx, rx) = channel::<()>();
27    
28    let em = md.event_manager();
29    let _ = em.attach(EventType::MediaStateChanged, move |e, _| {
30        match e {
31            Event::MediaStateChanged(s) => {
32                println!("State : {:?}", s);
33                if s == State::Ended || s == State::Error {
34                    tx.send(()).unwrap();
35                }
36            },
37            _ => (),
38        }
39    });
40    
41    mdp.set_media(&md);
42    
43    // Start playing
44    mdp.play().unwrap();
45    
46    // Wait for end state
47    rx.recv().unwrap();    
48}
49
50