You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by se...@apache.org on 2012/02/21 14:03:13 UTC
svn commit: r1291755 - in
/incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app:
data/file/FileProcessor.java
data/flvrecord/converter/FlvExplorerConverter.java documents/GenerateSWF.java
Author: sebawagner
Date: Tue Feb 21 13:03:12 2012
New Revision: 1291755
URL: http://svn.apache.org/viewvc?rev=1291755&view=rev
Log:
Fixes: OPENMEETINGS-66 Whiteboard Player should aspect ratio when importing a video to the whiteboard
Modified:
incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/file/FileProcessor.java
incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/flvrecord/converter/FlvExplorerConverter.java
incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/documents/GenerateSWF.java
Modified: incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/file/FileProcessor.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/file/FileProcessor.java?rev=1291755&r1=1291754&r2=1291755&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/file/FileProcessor.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/file/FileProcessor.java Tue Feb 21 13:03:12 2012
@@ -23,6 +23,7 @@ import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.openmeetings.app.OpenmeetingsVariables;
@@ -219,7 +220,13 @@ public class FileProcessor {
HashMap<String, String> processThumb = generateThumbs.generateThumb("_thumb_", current_dir, completeName, 50);
returnError.put("processThumb", processThumb);
} else if (isVideo) {
- flvExplorerConverter.startConversion(fileExplorerItemId, completeName + newFileExtDot);
+ List<HashMap<String, String>> returnList = flvExplorerConverter.startConversion(fileExplorerItemId, completeName + newFileExtDot);
+
+ int i=0;
+ for (HashMap<String, String> returnMap : returnList) {
+ returnError.put("processFLV "+i, returnMap);
+ }
+
}
returnError.put("returnAttributes", returnAttributes);
Modified: incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/flvrecord/converter/FlvExplorerConverter.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/flvrecord/converter/FlvExplorerConverter.java?rev=1291755&r1=1291754&r2=1291755&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/flvrecord/converter/FlvExplorerConverter.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/data/flvrecord/converter/FlvExplorerConverter.java Tue Feb 21 13:03:12 2012
@@ -21,6 +21,8 @@ package org.openmeetings.app.data.flvrec
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.openmeetings.app.OpenmeetingsVariables;
import org.openmeetings.app.data.file.dao.FileExplorerItemDaoImpl;
@@ -41,8 +43,18 @@ public class FlvExplorerConverter extend
private FileExplorerItemDaoImpl fileExplorerItemDaoImpl;
@Autowired
private FlvRecordingLogDaoImpl flvRecordingLogDaoImpl;
+
+ private class FlvDimension {
+ public FlvDimension(int width, int height) {
+ this.width = width;
+ this.height = height;
+ }
+ public int width = 0;
+ public int height = 0;
+ }
- public void startConversion(Long fileExplorerItemId, String moviePath) {
+ public List<HashMap<String, String>> startConversion(Long fileExplorerItemId, String moviePath) {
+ List<HashMap<String, String>> returnLog = new LinkedList<HashMap<String, String>>();
try {
FileExplorerItem fileExplorerItem = this.fileExplorerItemDaoImpl
@@ -51,41 +63,44 @@ public class FlvExplorerConverter extend
log.debug("fileExplorerItem "
+ fileExplorerItem.getFileExplorerItemId());
- // Strip Audio out of all Audio-FLVs
- this.convertToFLV(fileExplorerItem, moviePath);
+ // Convert to FLV
+ return this.convertToFLV(fileExplorerItem, moviePath);
// Add empty pieces at the beginning and end of the wav
} catch (Exception err) {
log.error("[startConversion]", err);
+ HashMap<String, String> returnMap = new HashMap<String, String>();
+ returnMap.put("process", "startConversion");
+ returnMap.put("error", err.getMessage());
+ returnMap.put("exception", err.toString());
+ returnMap.put("exitValue", "-1");
+ returnLog.add(returnMap);
}
+ return returnLog;
+
}
- private void convertToFLV(FileExplorerItem fileExplorerItem,
+ private List<HashMap<String, String>> convertToFLV(FileExplorerItem fileExplorerItem,
String moviePath) {
+ List<HashMap<String, String>> returnLog = new LinkedList<HashMap<String, String>>();
try {
- List<HashMap<String, String>> returnLog = new LinkedList<HashMap<String, String>>();
-
String streamFolderName = getStreamFolderName("hibernate");
String outputFullFlv = streamFolderName + "UPLOADFLV_"
+ fileExplorerItem.getFileExplorerItemId() + ".flv";
- int flvWidth = 300;
- int flvHeight = 240;
-
- fileExplorerItem.setFlvWidth(flvWidth);
- fileExplorerItem.setFlvHeight(flvHeight);
fileExplorerItem.setIsVideo(true);
String[] argv_fullFLV = null;
argv_fullFLV = new String[] { getPathToFFMPEG(), "-i", moviePath,
"-ar", "22050", "-acodec", "libmp3lame", "-ab", "32k",
- "-s", flvWidth + "x" + flvHeight, "-vcodec", "flv",
+ "-vcodec", "flv",
outputFullFlv };
+ // "-s", flvWidth + "x" + flvHeight,
log.debug("START generateFullFLV ################# ");
String tString = "";
@@ -95,9 +110,20 @@ public class FlvExplorerConverter extend
}
log.debug(tString);
log.debug("END generateFullFLV ################# ");
+
+ HashMap<String, String> returnMapConvertFLV = GenerateSWF.executeScript("uploadFLV ID :: "
+ + fileExplorerItem.getFileExplorerItemId(), argv_fullFLV);
+
+ //Parse the width height from the FFMPEG output
+ FlvDimension flvDimension = getFlvDimension(returnMapConvertFLV.get("error"));
+ int flvWidth = flvDimension.width;
+ int flvHeight = flvDimension.height;
+
+
+ fileExplorerItem.setFlvWidth(flvWidth);
+ fileExplorerItem.setFlvHeight(flvHeight);
- returnLog.add(GenerateSWF.executeScript("uploadFLV ID :: "
- + fileExplorerItem.getFileExplorerItemId(), argv_fullFLV));
+ returnLog.add(returnMapConvertFLV);
String hashFileFullNameJPEG = "UPLOADFLV_"
+ fileExplorerItem.getFileExplorerItemId() + ".jpg";
@@ -131,11 +157,38 @@ public class FlvExplorerConverter extend
this.flvRecordingLogDaoImpl.addFLVRecordingLog(
"generateFFMPEG", null, returnMap);
}
+
+
} catch (Exception err) {
log.error("[convertToFLV]", err);
+ HashMap<String, String> returnMap = new HashMap<String, String>();
+ returnMap.put("process", "convertToFLV");
+ returnMap.put("error", err.getMessage());
+ returnMap.put("exception", err.toString());
+ returnMap.put("exitValue", "-1");
+ returnLog.add(returnMap);
}
+ return returnLog;
}
-
+
+ private FlvDimension getFlvDimension(String txt) throws Exception {
+
+ Pattern p = Pattern.compile("\\d{2,4}(x)\\d{2,4}");
+
+ Matcher matcher = p.matcher(txt);
+
+ while ( matcher.find() ) {
+ String foundResolution = txt.substring(matcher.start(), matcher.end());
+
+ String[] resultions = foundResolution.split("x");
+
+ return new FlvDimension(Integer.valueOf(resultions[0]).intValue(), Integer.valueOf(resultions[1]).intValue());
+
+ }
+
+ return null;
+ }
+
}
Modified: incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/documents/GenerateSWF.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/documents/GenerateSWF.java?rev=1291755&r1=1291754&r2=1291755&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/documents/GenerateSWF.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/app/org/openmeetings/app/documents/GenerateSWF.java Tue Feb 21 13:03:12 2012
@@ -37,7 +37,7 @@ import org.springframework.beans.factory
public class GenerateSWF {
private static final Logger log = Red5LoggerFactory
- .getLogger(GeneratePDF.class);
+ .getLogger(GenerateSWF.class);
@Autowired
private Configurationmanagement cfgManagement;
@@ -56,6 +56,7 @@ public class GenerateSWF {
try {
returnMap.put("command", Arrays.toString(argv));
+ returnMap.put("out","");
// By using the process Builder we have access to modify the
// environment variables
@@ -73,9 +74,10 @@ public class GenerateSWF {
Worker worker = new Worker(proc);
InputStreamWatcher inputWatcher = new InputStreamWatcher(proc);
errorWatcher.start();
- worker.start();
-
inputWatcher.start();
+ worker.start();
+
+
try {
worker.join(timeout);
if (worker.exit != null) {
@@ -102,6 +104,7 @@ public class GenerateSWF {
} finally {
proc.destroy();
}
+
} catch (TimeoutException e) {
// Timeout exception is processed above
log.error("executeScript",e);
@@ -117,6 +120,7 @@ public class GenerateSWF {
returnMap.put("exception", t.toString());
returnMap.put("exitValue", "-1");
}
+
return returnMap;
}
@@ -158,7 +162,6 @@ public class GenerateSWF {
String line = br.readLine();
while (line != null) {
error += line;
- log.debug("line: " + line);
line = br.readLine();
}
} catch (IOException ioexception) {
@@ -168,11 +171,14 @@ public class GenerateSWF {
}
// This one just reads script's output stream so it can
- // finish normally, see issue 801
+ // finish normally, see issue 801 http://code.google.com/p/openmeetings/issues/detail?id=801
+ // needs verification, swagner 21.02.2012
private static class InputStreamWatcher extends Thread {
+
private final InputStream stderr;
private final InputStreamReader isr;
private final BufferedReader br;
+ public String message;
private InputStreamWatcher(Process process) {
stderr = process.getInputStream();
@@ -191,6 +197,11 @@ public class GenerateSWF {
return;
}
}
+
+ public String getOutputString() {
+ return message;
+ }
+
}
private String getPathToSwfTools() {