dump.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. extern crate mp4parse;
  2. use std::env;
  3. use std::fs::File;
  4. use std::io::{Read, Take};
  5. use std::thread;
  6. fn limit<'a>(f: &'a mut File, h: &mp4parse::BoxHeader) -> Take<&'a mut File> {
  7. f.take(h.size - h.offset)
  8. }
  9. fn dump_file(filename: String) {
  10. let mut f = File::open(filename).unwrap();
  11. let task = thread::spawn(move || {
  12. loop {
  13. match mp4parse::read_box_header(&mut f) {
  14. Some(h) => {
  15. match &(mp4parse::fourcc_to_string(h.name))[..] {
  16. "ftyp" => {
  17. let mut content = limit(&mut f, &h);
  18. println!("{}", mp4parse::read_ftyp(&mut content, &h).unwrap())
  19. },
  20. _ => {
  21. println!("{}", h);
  22. mp4parse::skip_box_content(&mut f, &h).unwrap();
  23. },
  24. }
  25. },
  26. None => break,
  27. }
  28. }
  29. });
  30. // Catch and ignore any panics in the thread.
  31. task.join().ok();
  32. }
  33. fn main() {
  34. for filename in env::args().skip(1) {
  35. println!("-- dump of '{}' --", filename);
  36. dump_file(filename);
  37. }
  38. }