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. |