tried to add "duration" metadata to flv stream

This commit is contained in:
Erik Forkalsrud 2011-07-03 01:16:22 -07:00
parent 1e04937fab
commit a9a5840692
4 changed files with 22 additions and 5 deletions

2
.gitignore vendored
View file

@ -6,5 +6,5 @@ cache.properties
/.project
/.settings
/.springBeans
/bin
/target

View file

@ -173,6 +173,10 @@ public class DirectoryEntry extends EntryWithChildren<Entry> {
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());

View file

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

View file

@ -102,7 +102,7 @@ public class MovieCoder {
List<String> 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);
}
*/
}
}