ソースを参照

main: handle transcode option

Alexandre Janniaux 5 年 前
コミット
733a323f34
1 ファイル変更19 行追加2 行削除
  1. 19 2
      src/main.rs

+ 19 - 2
src/main.rs

@@ -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();
     }