From a9a5840692767f95e914ccd9a390cf534d8a8ab4 Mon Sep 17 00:00:00 2001 From: Erik Forkalsrud Date: Sun, 3 Jul 2011 01:16:22 -0700 Subject: [PATCH] tried to add "duration" metadata to flv stream --- .gitignore | 2 +- .../org/forkalsrud/album/exif/DirectoryEntry.java | 4 ++++ .../java/org/forkalsrud/album/exif/Thumbnail.java | 8 ++++++++ .../java/org/forkalsrud/album/video/MovieCoder.java | 13 +++++++++---- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 37e96b3..99747de 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,5 @@ cache.properties /.project /.settings /.springBeans - +/bin /target diff --git a/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java b/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java index ee98424..0815dca 100644 --- a/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java +++ b/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java @@ -173,6 +173,10 @@ public class DirectoryEntry extends EntryWithChildren { setThumbnail(thumbnail); } } + String duration = props.getProperty("file." + name + ".length"); + if (duration != null) { + thumbnail.setDuration(duration); + } } } else if (key.startsWith("dir.") && !key.endsWith(".hidden")) { String name = key.substring("dir.".length()); diff --git a/src/main/java/org/forkalsrud/album/exif/Thumbnail.java b/src/main/java/org/forkalsrud/album/exif/Thumbnail.java index 2535800..37d7a0a 100644 --- a/src/main/java/org/forkalsrud/album/exif/Thumbnail.java +++ b/src/main/java/org/forkalsrud/album/exif/Thumbnail.java @@ -15,6 +15,7 @@ public class Thumbnail { Dimension size; int orientation; String etag; + String duration; public Thumbnail(File path) { @@ -68,4 +69,11 @@ public class Thumbnail { public File getPath() { return path; } + + public String getDuration() { + return duration; + } + public void setDuration(String duration) { + this.duration = duration; + } } diff --git a/src/main/java/org/forkalsrud/album/video/MovieCoder.java b/src/main/java/org/forkalsrud/album/video/MovieCoder.java index 2a1e431..52e5f14 100644 --- a/src/main/java/org/forkalsrud/album/video/MovieCoder.java +++ b/src/main/java/org/forkalsrud/album/video/MovieCoder.java @@ -102,7 +102,7 @@ public class MovieCoder { List lines = IOUtils.readLines(p.getInputStream()); int returnStatus = p.waitFor(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss"); - String width = "", height = ""; + String width = "", height = "", length = ""; for (String line : lines) { int pos = line.indexOf('='); if (pos >= 0) { @@ -110,6 +110,7 @@ public class MovieCoder { String value = line.substring(pos + 1); if (name.equals("ID_VIDEO_WIDTH")) width = value; if (name.equals("ID_VIDEO_HEIGHT")) height = value; + if (name.equals("ID_LENGTH")) length = value; } } props.put("type", "movie"); @@ -117,6 +118,7 @@ public class MovieCoder { props.put("dimensions", new Dimension(width, height).toString()); props.put("captureDate", sdf.format(new Date(f.lastModified()))); props.put("etag", Integer.toHexString(f.getName().hashCode() + Long.valueOf(f.lastModified()).hashCode())); + props.put("length", length); return props; } @@ -289,8 +291,9 @@ public class MovieCoder { "-g", "150", "-cmp", "2", "-subcmp", "2", "-mbd", "2", "-flags", "+aic+cbp+mv0+mv4", "-trellis", "1", "-f", "flv", + "-metadata", "duration=" + thumbnail.getDuration(), "-"); - + log.info(pb.command().toString()); pb.redirectErrorStream(false); Process p = pb.start(); p.getOutputStream().close(); @@ -351,9 +354,10 @@ public class MovieCoder { public void stream(File file, Thumbnail thumbnail, String size, OutputStream out) throws IOException, InterruptedException { - +System.out.println("being asked to stream " + file + " size=" + size); Dimension targetSize = thumbnail.getSize().scale(size); -// new EncodingProcess(file, thumbnail, targetSize).streamTo(out); + new EncodingProcess(file, thumbnail, targetSize).streamTo(out); +/* String key = file.getPath() + ":" + targetSize.getWidth(); int chunkNo = 0; boolean done = false; @@ -364,6 +368,7 @@ public class MovieCoder { } out.write(chunk.bits); } +*/ } }