|
@@ -2,6 +2,7 @@ use vlc::{Instance, Media, MediaPlayer};
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
use std::sync::{Arc, Mutex, Condvar};
|
|
|
+use std::ffi::CString;
|
|
|
|
|
|
fn main()
|
|
|
-> std::result::Result<(), ()>
|
|
@@ -18,10 +19,26 @@ fn main()
|
|
|
let player = MediaPlayer::new(&instance).unwrap();
|
|
|
let evt_mgr = player.event_manager();
|
|
|
|
|
|
- let local_var = Arc::new((Mutex::new(false), Condvar::new()));
|
|
|
+ let raw_media = media.raw();
|
|
|
+ let option_sout = CString::new(concat!(
|
|
|
+ ":sout=#transcode{vcodec=h264}",
|
|
|
+ ":std{access=http,mux=mkv,dst=:8090/test.mkv}")).unwrap();
|
|
|
+ let option_start = CString::new(":start-time=5").unwrap();
|
|
|
+ let option_stop = CString::new(":stop-time=10").unwrap();
|
|
|
+
|
|
|
+ unsafe {
|
|
|
+ vlc::sys::libvlc_media_add_option(raw_media, option_sout.as_ptr());
|
|
|
+ vlc::sys::libvlc_media_add_option(raw_media, option_start.as_ptr());
|
|
|
+ vlc::sys::libvlc_media_add_option(raw_media, option_stop.as_ptr());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ let local_var = Arc::new((Mutex::new(true), Condvar::new()));
|
|
|
let libvlc_var = local_var.clone();
|
|
|
|
|
|
evt_mgr.attach(vlc::EventType::MediaPlayerEndReached, move |event, obj| {
|
|
|
+ println!("MediaPlayer: EndReached");
|
|
|
+
|
|
|
let (lock, cond_var) = &*libvlc_var;
|
|
|
let mut running = lock.lock().unwrap();
|
|
|
*running = false;
|
|
@@ -34,7 +51,7 @@ fn main()
|
|
|
let (lock, cond_var) = &*local_var;
|
|
|
let mut running = lock.lock().unwrap();
|
|
|
|
|
|
- while !*running
|
|
|
+ while *running
|
|
|
{
|
|
|
running = cond_var.wait(running).unwrap();
|
|
|
}
|