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() {