|
From: <fg...@us...> - 2011-11-06 18:15:22
|
Revision: 3692
http://openutils.svn.sourceforge.net/openutils/?rev=3692&view=rev
Author: fgiust
Date: 2011-11-06 18:15:15 +0000 (Sun, 06 Nov 2011)
Log Message:
-----------
MEDIA-267 Avoid in-memory buffering of big files for extracting mp4 metadata
Modified Paths:
--------------
trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java
trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java
Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java
===================================================================
--- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java 2011-11-06 17:48:11 UTC (rev 3691)
+++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java 2011-11-06 18:15:15 UTC (rev 3692)
@@ -229,6 +229,15 @@
}
String downloadUrl = getUrl(media);
+ return parseFLVMetaData(downloadUrl);
+ }
+
+ /**
+ * @param downloadUrl
+ * @return
+ */
+ private VideoMetaData parseFLVMetaData(String downloadUrl)
+ {
for (ExternalVideoSupport external : videoSupportHandlers)
{
if (external.isEnabled() && external.canHandle(downloadUrl))
Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java
===================================================================
--- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java 2011-11-06 17:48:11 UTC (rev 3691)
+++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java 2011-11-06 18:15:15 UTC (rev 3692)
@@ -19,8 +19,12 @@
package net.sourceforge.openutils.mgnlmedia.media.utils;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
@@ -186,30 +190,36 @@
{
VideoMetaData meta = new VideoMetaData();
- InputStream is = stream;
- ByteBuffer bb = ByteBuffer.wrap(IOUtils.toByteArray(is));
- IsoBufferWrapper buf = new IsoBufferWrapper(bb);
- // Properties properties = new Properties();
- // properties.setProperty(MovieBox.TYPE, "com.coremedia.iso.boxes.MovieBox()");
- // PropertyBoxParserImpl boxParser = new PropertyBoxParserImpl(properties);
- IsoFile isoFile = new IsoFile(buf); // , boxParser);
- isoFile.parse();
+ File tempFile = File.createTempFile("medatadaextraction", ".mp4");
+ OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));
+ IOUtils.copy(stream, out);
+ out.close();
- MovieBox box = (MovieBox) IsoFileConvenienceHelper.get(isoFile, MovieBox.TYPE);
- meta.setDuration(box.getMovieHeaderBox().getDuration() / box.getMovieHeaderBox().getTimescale());
- meta.setFrameRate(box.getMovieHeaderBox().getRate());
- // meta.setCreatedDate(box.getMovieHeaderBox().getCreationTime());
+ try
+ {
+ IsoBufferWrapper buf = new IsoBufferWrapper(tempFile);
+ IsoFile isoFile = new IsoFile(buf);
+ isoFile.parse();
- for (long trackid : box.getTrackNumbers())
- {
- TrackHeaderBox thb = box.getTrackMetaData(trackid).getTrackBox().getTrackHeaderBox();
- if (thb.getWidth() > 0)
+ MovieBox box = (MovieBox) IsoFileConvenienceHelper.get(isoFile, MovieBox.TYPE);
+ meta.setDuration(box.getMovieHeaderBox().getDuration() / box.getMovieHeaderBox().getTimescale());
+ meta.setFrameRate(box.getMovieHeaderBox().getRate());
+
+ for (long trackid : box.getTrackNumbers())
{
- meta.setWidth((long) thb.getWidth());
- meta.setHeight((long) thb.getHeight());
- break;
+ TrackHeaderBox thb = box.getTrackMetaData(trackid).getTrackBox().getTrackHeaderBox();
+ if (thb.getWidth() > 0)
+ {
+ meta.setWidth((long) thb.getWidth());
+ meta.setHeight((long) thb.getHeight());
+ break;
+ }
}
}
+ finally
+ {
+ tempFile.delete();
+ }
return meta;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|