You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2015/01/28 18:50:11 UTC

svn commit: r1655407 - in /openmeetings: branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/ branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/ branches/3.0.x/src/main/java/org/apache/openmeetings/converter/ branches/3.0...

Author: solomax
Date: Wed Jan 28 17:50:11 2015
New Revision: 1655407

URL: http://svn.apache.org/r1655407
Log:
[OPENMEETINGS-998] audio/video sync is improved

Modified:
    openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
    openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
    openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvInterviewConverter.java
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvRecorderConverter.java
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java
    openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
    openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
    openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java

Modified: openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java (original)
+++ openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java Wed Jan 28 17:50:11 2015
@@ -62,15 +62,7 @@ public class FlvRecordingMetaDataDao {
 	}
 
 	public List<FlvRecordingMetaData> getByRecording(Long recordingId) {
-		try {
-			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class);
-			query.setParameter("recordingId", recordingId);
-
-			return query.getResultList();
-		} catch (Exception ex2) {
-			log.error("[getByRecording]: ", ex2);
-		}
-		return null;
+		return em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class).setParameter("recordingId", recordingId).getResultList();
 	}
 
 	public List<FlvRecordingMetaData> getAudioMetaDataByRecording(Long flvRecordingId) {
@@ -116,8 +108,8 @@ public class FlvRecordingMetaDataDao {
 
 			flvRecordingMetaData.setRecordStart(recordStart);
 
-			flvRecordingMetaData.setIsAudioOnly(isAudioOnly);
-			flvRecordingMetaData.setIsVideoOnly(isVideoOnly);
+			flvRecordingMetaData.setAudioOnly(isAudioOnly);
+			flvRecordingMetaData.setVideoOnly(isVideoOnly);
 			flvRecordingMetaData.setScreenData(isScreenData);
 
 			flvRecordingMetaData.setStreamName(streamName);

Modified: openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java (original)
+++ openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java Wed Jan 28 17:50:11 2015
@@ -53,7 +53,7 @@ import org.simpleframework.xml.Root;
 	@NamedQuery(name = "getMetaById", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecordingMetaDataId = :id")
 	, @NamedQuery(name = "getMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId AND c.deleted = false")
 	, @NamedQuery(name = "getAudioMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId "
-			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.isAudioOnly = true OR (c.isAudioOnly = false AND c.isVideoOnly = false))")
+			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.audioOnly = true OR (c.audioOnly = false AND c.videoOnly = false))")
 	, @NamedQuery(name = "getScreenMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId"
 			+ " AND c.screenData = true")
 })
@@ -71,7 +71,7 @@ public class FlvRecordingMetaData implem
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id")
-	@Element(data = true, required = false)
+	@Element(name = "flvRecordingMetaDataId", data = true, required = false)
 	private long flvRecordingMetaDataId;
 
 	@ManyToOne(fetch = FetchType.EAGER)
@@ -96,15 +96,15 @@ public class FlvRecordingMetaData implem
 	private String freeTextUserName;
 
 	@Column(name = "is_audio_only")
-	@Element(data = true)
-	private Boolean isAudioOnly;
+	@Element(name = "isAudioOnly", data = true)
+	private boolean audioOnly;
 
 	@Column(name = "is_video_only")
-	@Element(data = true)
-	private Boolean isVideoOnly;
+	@Element(name = "isVideoOnly", data = true)
+	private boolean videoOnly;
 
 	@Column(name = "is_screen_data")
-	@Element(data = true, name = "isScreenData")
+	@Element(name = "isScreenData", data = true)
 	private boolean screenData;
 
 	@Column(name = "inserted_by")
@@ -131,8 +131,8 @@ public class FlvRecordingMetaData implem
 	private String fullWavAudioData;
 
 	@Column(name = "audio_is_valid")
-	@Element(data = true, required = false)
-	private Boolean audioIsValid;
+	@Element(name="audioIsValid", data = true, required = false)
+	private boolean audioValid;
 
 	@Column(name = "interiew_pod_id")
 	@Element(data = true, required = false)
@@ -186,20 +186,20 @@ public class FlvRecordingMetaData implem
 		this.freeTextUserName = freeTextUserName;
 	}
 
-	public Boolean getIsAudioOnly() {
-		return isAudioOnly;
+	public boolean isAudioOnly() {
+		return audioOnly;
 	}
 
-	public void setIsAudioOnly(Boolean isAudioOnly) {
-		this.isAudioOnly = isAudioOnly;
+	public void setAudioOnly(boolean audioOnly) {
+		this.audioOnly = audioOnly;
 	}
 
-	public Boolean getIsVideoOnly() {
-		return isVideoOnly;
+	public boolean isVideoOnly() {
+		return videoOnly;
 	}
 
-	public void setIsVideoOnly(Boolean isVideoOnly) {
-		this.isVideoOnly = isVideoOnly;
+	public void setVideoOnly(boolean videoOnly) {
+		this.videoOnly = videoOnly;
 	}
 
 	public Long getInsertedBy() {
@@ -266,12 +266,12 @@ public class FlvRecordingMetaData implem
 		this.fullWavAudioData = fullWavAudioData;
 	}
 
-	public Boolean getAudioIsValid() {
-		return audioIsValid;
+	public boolean isAudioValid() {
+		return audioValid;
 	}
 
-	public void setAudioIsValid(Boolean audioIsValid) {
-		this.audioIsValid = audioIsValid;
+	public void setAudioValid(boolean audioValid) {
+		this.audioValid = audioValid;
 	}
 
 	public Integer getInteriewPodId() {

Modified: openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java (original)
+++ openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java Wed Jan 28 17:50:11 2015
@@ -34,7 +34,7 @@ import javax.persistence.Table;
 @Entity
 @Table(name = "flvrecording_meta_delta")
 public class FlvRecordingMetaDelta implements Serializable {
-	private static final long serialVersionUID = -733483974696234137L;
+	private static final long serialVersionUID = 1L;
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name="id")
@@ -83,10 +83,10 @@ public class FlvRecordingMetaDelta imple
 	private Long receivedAudioDataLength;
 	
 	@Column(name="is_end_padding")
-	private Boolean isEndPadding;
+	private boolean endPadding;
 	
 	@Column(name="is_start_padding")
-	private Boolean isStartPadding;
+	private boolean startPadding;
 	
 	@Column(name="debug_status")
 	private String debugStatus;
@@ -175,18 +175,18 @@ public class FlvRecordingMetaDelta imple
 		this.currentTime = currentTime;
 	}
 	
-	public Boolean getIsEndPadding() {
-		return isEndPadding;
+	public boolean isEndPadding() {
+		return endPadding;
 	}
-	public void setIsEndPadding(Boolean isEndPadding) {
-		this.isEndPadding = isEndPadding;
+	public void setEndPadding(boolean endPadding) {
+		this.endPadding = endPadding;
 	}
 	
-	public Boolean getIsStartPadding() {
-		return isStartPadding;
+	public boolean isStartPadding() {
+		return startPadding;
 	}
-	public void setIsStartPadding(Boolean isStartPadding) {
-		this.isStartPadding = isStartPadding;
+	public void setStartPadding(boolean startPadding) {
+		this.startPadding = startPadding;
 	}
 	
 	public String getDebugStatus() {

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/BaseConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/BaseConverter.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/BaseConverter.java Wed Jan 28 17:50:11 2015
@@ -91,6 +91,14 @@ public abstract class BaseConverter {
 		return from.getTime() - to.getTime();
 	}
 
+	protected double diffSeconds(Date from, Date to) {
+		return diffSeconds(diff(from, to));
+	}
+	
+	protected double diffSeconds(long val) {
+		return ((double)val) / 1000;
+	}
+	
 	protected String formatMillis(long millis) {
 		long hours = TimeUnit.MILLISECONDS.toHours(millis);
 		millis -= TimeUnit.HOURS.toMillis(hours);
@@ -133,7 +141,7 @@ public abstract class BaseConverter {
 				, metaDataDao.getAudioMetaDataByRecording(flvRecording.getFlvRecordingId()));
 	}
 	
-	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, String inFile, String outFile) {
+	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, File inFile, File outFile) throws IOException {
 		//FIXME need to check this
 		if (length < 0 || position < 0) {
 			log.debug("::addSoxPad " + job + " Invalid parameters: "
@@ -142,7 +150,7 @@ public abstract class BaseConverter {
 		length = length < 0 ? 0 : length;
 		position = position < 0 ? 0 : position;
 
-		String[] argv = new String[] { getPathToSoX(), inFile, outFile, "pad", "" + length, "" + position };
+		String[] argv = new String[] { getPathToSoX(), inFile.getCanonicalPath(), outFile.getCanonicalPath(), "pad", "" + length, "" + position };
 
 		returnLog.add(ProcessHelper.executeScript(job, argv));
 		return argv;
@@ -239,32 +247,27 @@ public abstract class BaseConverter {
 	
 				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
 	
-				String hashFileName = metaData.getStreamName() + "_WAVE.wav";
-				String outputWav = new File(streamFolder, hashFileName).getCanonicalPath(); //FIXME
+				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
 	
-				metaData.setWavAudioData(hashFileName);
+				metaData.setWavAudioData(outputWav.getName());
 	
 				
 				log.debug("FLV File Name: {} Length: {} ", inputFlvFile.getName(), inputFlvFile.length());
 	
-				metaData.setAudioIsValid(false);
 				if (inputFlvFile.exists()) {
-					String[] argv = new String[] {getPathToFFMPEG(), "-y", "-i", inputFlvFile.getCanonicalPath()
-							, "-af", "aresample=32k", outputWav};
+					String[] argv = new String[] {
+							getPathToFFMPEG(), "-y"
+							, "-i", inputFlvFile.getCanonicalPath()
+							, "-af", "aresample=min_comp=0.001:min_hard_comp=0.100000"
+							, outputWav.getCanonicalPath()};
 	
 					returnLog.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
-	
-					// check if the resulting Audio is valid
-					File output_wav = new File(outputWav);
-	
-					if (output_wav.exists() && output_wav.length() != 0) {
-						metaData.setAudioIsValid(true);
-					}
 				}
 	
-				if (metaData.getAudioIsValid()) {
+				if (outputWav.exists() && outputWav.length() != 0) {
+					metaData.setAudioValid(true);
 					// Strip Wave to Full Length
-					String outputGapFullWav = outputWav;
+					File outputGapFullWav = outputWav;
 	
 					// Fix Start/End in Audio
 					List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = metaDeltaDao.getFlvRecordingMetaDeltaByMetaId(metaId);
@@ -272,22 +275,21 @@ public abstract class BaseConverter {
 					int counter = 0;
 	
 					for (FlvRecordingMetaDelta metaDelta : flvRecordingMetaDeltas) {
-						String inputFile = outputGapFullWav;
+						File inputFile = outputGapFullWav;
 	
 						// Strip Wave to Full Length
 						String hashFileGapsFullName = metaData.getStreamName() + "_GAP_FULL_WAVE_" + counter + ".wav";
-						outputGapFullWav = new File(streamFolder, hashFileGapsFullName).getCanonicalPath();
+						outputGapFullWav = new File(streamFolder, hashFileGapsFullName);
 	
 						metaDelta.setWaveOutPutName(hashFileGapsFullName);
 	
 						String[] argv_sox = null;
 	
 						if (metaDelta.getDeltaTime() != null) {
-							if (metaDelta.getIsStartPadding() != null && metaDelta.getIsStartPadding()) {
-								double gapSeconds = ((double)metaDelta.getDeltaTime()) / 1000;
+							double gapSeconds = diffSeconds(metaDelta.getDeltaTime());
+							if (metaDelta.isStartPadding()) {
 								argv_sox = addSoxPad(returnLog, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
-							} else if (metaDelta.getIsEndPadding() != null && metaDelta.getIsEndPadding()) {
-								double gapSeconds = ((double)metaDelta.getDeltaTime()) / 1000;
+							} else if (metaDelta.isEndPadding()) {
 								argv_sox = addSoxPad(returnLog, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
 							}
 						}
@@ -304,33 +306,28 @@ public abstract class BaseConverter {
 	
 					// Strip Wave to Full Length
 					String hashFileFullName = metaData.getStreamName() + "_FULL_WAVE.wav";
-					String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
+					File outputFullWav = new File(streamFolder, hashFileFullName);
 	
 					// Calculate delta at beginning
-					long deltaTimeStartMilliSeconds = metaData.getRecordStart().getTime() - flvRecording.getRecordStart().getTime();
-	
-					double length = ((double)deltaTimeStartMilliSeconds) / 1000;
+					double startPad = diffSeconds(metaData.getRecordStart(), flvRecording.getRecordStart());
 	
 					// Calculate delta at ending
-					long deltaTimeEndMilliSeconds = flvRecording.getRecordEnd().getTime() - metaData.getRecordEnd().getTime();
-	
-					double endPadding = ((double)deltaTimeEndMilliSeconds) / 1000;
+					double endPad = diffSeconds(flvRecording.getRecordEnd(), metaData.getRecordEnd());
 	
-					addSoxPad(returnLog, "addStartEndToAudio", length, endPadding, outputGapFullWav, outputFullWav);
+					addSoxPad(returnLog, "addStartEndToAudio", startPad, endPad, outputGapFullWav, outputFullWav);
 	
 					// Fix for Audio Length - Invalid Audio Length in Recorded Files
 					// Audio must match 100% the Video
 					log.debug("############################################");
 					log.debug("Trim Audio to Full Length -- Start");
-					File aFile = new File(outputFullWav);
 	
-					if (!aFile.exists()) {
+					if (!outputFullWav.exists()) {
 						throw new Exception("Audio File does not exist , could not extract the Audio correctly");
 					}
 					metaData.setFullWavAudioData(hashFileFullName);
 	
 					// Finally add it to the row!
-					listOfFullWaveFiles.add(outputFullWav);
+					listOfFullWaveFiles.add(outputFullWav.getCanonicalPath());
 				}
 	
 				metaDataDao.update(metaData);

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java Wed Jan 28 17:50:11 2015
@@ -134,10 +134,9 @@ public class FlvInterviewConverter exten
 				File outputWav = new File(streamFolderGeneral, "one_second.wav");
 
 				// Calculate delta at beginning
-				Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
-				Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
 
-				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", deltaPadding.toString() };
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", "" + deltaPadding };
 
 				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
 			}

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java Wed Jan 28 17:50:11 2015
@@ -23,7 +23,6 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
@@ -39,7 +38,6 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class FlvRecorderConverter extends BaseConverter implements IRecordingConverter {
-
 	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverter.class, webAppRootKey);
 
 	// Spring loaded Beans
@@ -59,11 +57,12 @@ public class FlvRecorderConverter extend
 				FFMPEG_MAP_PARAM = ".";
 			}
 
+			String finalNamePrefix = "flvRecording_" + flvRecordingId;
 			flvRecording = recordingDao.get(flvRecordingId);
 			log.debug("flvRecording " + flvRecording.getFlvRecordingId());
 
 			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
-			List<String> listOfFullWaveFiles = new LinkedList<String>();
+			List<String> listOfFullWaveFiles = new ArrayList<String>();
 			File streamFolder = getStreamFolder(flvRecording);
 			
 			FlvRecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(flvRecording.getFlvRecordingId());
@@ -81,8 +80,6 @@ public class FlvRecorderConverter extend
 			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder);
 
 			// Merge Wave to Full Length
-			String streamFolderGeneralName = getStreamsHibernateDir().getCanonicalPath() + File.separator; // FIXME
-
 			String hashFileFullName = screenMetaData.getStreamName() + "_FINAL_WAVE.wav";
 			String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
 
@@ -94,13 +91,12 @@ public class FlvRecorderConverter extend
 				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
 			} else {
 				// create default Audio to merge it. strip to content length
-				String outputWav = streamFolderGeneralName + "one_second.wav";
+				String outputWav = new File(getStreamsHibernateDir(), "one_second.wav").getCanonicalPath();
 
 				// Calculate delta at beginning
-				Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
-				Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
 
-				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", deltaPadding.toString() };
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", "" + deltaPadding };
 
 				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
 			}
@@ -109,11 +105,9 @@ public class FlvRecorderConverter extend
 
 			// Merge Audio with Video / Calculate resulting FLV
 
-			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv")
-					.getCanonicalPath();
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
 
-			String hashFileFullNameFlv = "flvRecording_" + flvRecording.getFlvRecordingId() + ".flv";
-			String outputFullFlv = streamFolderGeneralName + hashFileFullNameFlv;
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
 
 			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
 			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
@@ -136,7 +130,7 @@ public class FlvRecorderConverter extend
 			flvRecording.setFlvHeight(flvHeight);
 
 			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y",//
-					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), screenMetaData.getFlvRecording().getRecordStart())),
+					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), flvRecording.getRecordStart())),
 					"-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
 					"-acodec", "libmp3lame", //
 					"-ab", "32k", //
@@ -144,41 +138,39 @@ public class FlvRecorderConverter extend
 					"-vcodec", "flashsv", //
 					"-map", "0" + FFMPEG_MAP_PARAM + "0", //
 					"-map", "1" + FFMPEG_MAP_PARAM + "0", //
-					outputFullFlv };
+					outputFullFlv.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_fullFLV));
 
-			flvRecording.setFileHash(hashFileFullNameFlv);
+			flvRecording.setFileHash(outputFullFlv.getName());
 
 			// Extract first Image for preview purpose
 			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
 			// 320x240 movie.jpg
 
-			String hashFileFullNameJPEG = "flvRecording_" + flvRecording.getFlvRecordingId() + ".jpg";
-			String outPutJpeg = streamFolderGeneralName + hashFileFullNameJPEG;
+			File outPutJpeg = new File(getStreamsHibernateDir(), finalNamePrefix + ".jpg");
 
-			flvRecording.setPreviewImage(hashFileFullNameJPEG);
+			flvRecording.setPreviewImage(outPutJpeg.getName());
 
 			String[] argv_previewFLV = new String[] { //
 					getPathToFFMPEG(), "-y",//
-					"-i", outputFullFlv, //
+					"-i", outputFullFlv.getCanonicalPath(), //
 					"-vcodec", "mjpeg", //
 					"-vframes", "1", "-an", //
 					"-f", "rawvideo", //
 					"-s", flvWidth + "x" + flvHeight, //
-					outPutJpeg };
+					outPutJpeg.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("previewFullFLV", argv_previewFLV));
 
-			String alternateDownloadName = "flvRecording_" + flvRecording.getFlvRecordingId() + ".avi";
-			String alternateDownloadFullName = streamFolderGeneralName + alternateDownloadName;
+			File alternateDownload = new File(getStreamsHibernateDir(), finalNamePrefix + ".avi");
 
-			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv, "-vcodec",
-					"copy", alternateDownloadFullName };
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv.getCanonicalPath(), "-vcodec",
+					"copy", alternateDownload.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
 
-			flvRecording.setAlternateDownload(alternateDownloadName);
+			flvRecording.setAlternateDownload(alternateDownload.getName());
 
 			updateDuration(flvRecording);
 			convertToMp4(flvRecording, returnLog);

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java Wed Jan 28 17:50:11 2015
@@ -98,8 +98,8 @@ public class StreamAudioWriter extends B
 					metaDelta.setFlvRecordingMetaDataId(metaDataId);
 					metaDelta.setTimeStamp(0);
 					metaDelta.setDebugStatus("INIT AUDIO");
-					metaDelta.setIsStartPadding(true);
-					metaDelta.setIsEndPadding(false);
+					metaDelta.setStartPadding(true);
+					metaDelta.setEndPadding(false);
 					metaDelta.setDataLengthPacket(data.limit());
 					metaDelta.setReceivedAudioDataLength(byteCount);
 					metaDelta.setStartTime(startedSessionTimeDate);
@@ -145,9 +145,9 @@ public class StreamAudioWriter extends B
 					metaDelta.setFlvRecordingMetaDataId(metaDataId);
 					metaDelta.setTimeStamp(timeStamp);
 					metaDelta.setDebugStatus("RUN AUDIO");
-					metaDelta.setIsStartPadding(false);
+					metaDelta.setStartPadding(false);
 					metaDelta.setLastTimeStamp(preLastTimeStamp);
-					metaDelta.setIsEndPadding(false);
+					metaDelta.setEndPadding(false);
 					metaDelta.setDataLengthPacket(data.limit());
 					metaDelta.setReceivedAudioDataLength(byteCount);
 					metaDelta.setStartTime(startedSessionTimeDate);
@@ -213,8 +213,8 @@ public class StreamAudioWriter extends B
 			metaDelta.setFlvRecordingMetaDataId(metaDataId);
 			metaDelta.setTimeStamp(lastTimeStamp);
 			metaDelta.setDebugStatus("END AUDIO");
-			metaDelta.setIsStartPadding(false);
-			metaDelta.setIsEndPadding(true);
+			metaDelta.setStartPadding(false);
+			metaDelta.setEndPadding(true);
 			metaDelta.setDataLengthPacket(null);
 			metaDelta.setReceivedAudioDataLength(byteCount);
 			metaDelta.setStartTime(startedSessionTimeDate);

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java Wed Jan 28 17:50:11 2015
@@ -86,11 +86,19 @@ public abstract class BaseConverter {
 	protected File getStreamFolder(FlvRecording flvRecording) {
 		return getStreamsSubDir(flvRecording.getRoomId());
 	}
-	
+
 	protected long diff(Date from, Date to) {
 		return from.getTime() - to.getTime();
 	}
 
+	protected double diffSeconds(Date from, Date to) {
+		return diffSeconds(diff(from, to));
+	}
+	
+	protected double diffSeconds(long val) {
+		return ((double)val) / 1000;
+	}
+	
 	protected String formatMillis(long millis) {
 		long hours = TimeUnit.MILLISECONDS.toHours(millis);
 		millis -= TimeUnit.HOURS.toMillis(hours);
@@ -133,7 +141,7 @@ public abstract class BaseConverter {
 				, metaDataDao.getAudioMetaDataByRecording(flvRecording.getId()));
 	}
 	
-	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, String inFile, String outFile) {
+	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, File inFile, File outFile) throws IOException {
 		//FIXME need to check this
 		if (length < 0 || position < 0) {
 			log.debug("::addSoxPad " + job + " Invalid parameters: "
@@ -142,7 +150,7 @@ public abstract class BaseConverter {
 		length = length < 0 ? 0 : length;
 		position = position < 0 ? 0 : position;
 
-		String[] argv = new String[] { getPathToSoX(), inFile, outFile, "pad", "" + length, "" + position };
+		String[] argv = new String[] { getPathToSoX(), inFile.getCanonicalPath(), outFile.getCanonicalPath(), "pad", "" + length, "" + position };
 
 		returnLog.add(ProcessHelper.executeScript(job, argv));
 		return argv;
@@ -239,32 +247,27 @@ public abstract class BaseConverter {
 	
 				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
 	
-				String hashFileName = metaData.getStreamName() + "_WAVE.wav";
-				String outputWav = new File(streamFolder, hashFileName).getCanonicalPath(); //FIXME
+				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
 	
-				metaData.setWavAudioData(hashFileName);
+				metaData.setWavAudioData(outputWav.getName());
 	
 				
 				log.debug("FLV File Name: {} Length: {} ", inputFlvFile.getName(), inputFlvFile.length());
 	
-				metaData.setAudioIsValid(false);
 				if (inputFlvFile.exists()) {
-					String[] argv = new String[] {getPathToFFMPEG(), "-y", "-i", inputFlvFile.getCanonicalPath()
-							, "-af", "aresample=32k", outputWav};
+					String[] argv = new String[] {
+							getPathToFFMPEG(), "-y"
+							, "-i", inputFlvFile.getCanonicalPath()
+							, "-af", "aresample=min_comp=0.001:min_hard_comp=0.100000"
+							, outputWav.getCanonicalPath()};
 	
 					returnLog.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
-	
-					// check if the resulting Audio is valid
-					File output_wav = new File(outputWav);
-	
-					if (output_wav.exists() && output_wav.length() != 0) {
-						metaData.setAudioIsValid(true);
-					}
 				}
 	
-				if (metaData.getAudioIsValid()) {
+				if (outputWav.exists() && outputWav.length() != 0) {
+					metaData.setAudioValid(true);
 					// Strip Wave to Full Length
-					String outputGapFullWav = outputWav;
+					File outputGapFullWav = outputWav;
 	
 					// Fix Start/End in Audio
 					List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = metaDeltaDao.getFlvRecordingMetaDeltaByMetaId(metaId);
@@ -272,22 +275,21 @@ public abstract class BaseConverter {
 					int counter = 0;
 	
 					for (FlvRecordingMetaDelta metaDelta : flvRecordingMetaDeltas) {
-						String inputFile = outputGapFullWav;
+						File inputFile = outputGapFullWav;
 	
 						// Strip Wave to Full Length
 						String hashFileGapsFullName = metaData.getStreamName() + "_GAP_FULL_WAVE_" + counter + ".wav";
-						outputGapFullWav = new File(streamFolder, hashFileGapsFullName).getCanonicalPath();
+						outputGapFullWav = new File(streamFolder, hashFileGapsFullName);
 	
 						metaDelta.setWaveOutPutName(hashFileGapsFullName);
 	
 						String[] argv_sox = null;
 	
 						if (metaDelta.getDeltaTime() != null) {
-							if (metaDelta.getIsStartPadding() != null && metaDelta.getIsStartPadding()) {
-								double gapSeconds = ((double)metaDelta.getDeltaTime()) / 1000;
+							double gapSeconds = diffSeconds(metaDelta.getDeltaTime());
+							if (metaDelta.isStartPadding()) {
 								argv_sox = addSoxPad(returnLog, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
-							} else if (metaDelta.getIsEndPadding() != null && metaDelta.getIsEndPadding()) {
-								double gapSeconds = ((double)metaDelta.getDeltaTime()) / 1000;
+							} else if (metaDelta.isEndPadding()) {
 								argv_sox = addSoxPad(returnLog, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
 							}
 						}
@@ -304,33 +306,28 @@ public abstract class BaseConverter {
 	
 					// Strip Wave to Full Length
 					String hashFileFullName = metaData.getStreamName() + "_FULL_WAVE.wav";
-					String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
+					File outputFullWav = new File(streamFolder, hashFileFullName);
 	
 					// Calculate delta at beginning
-					long deltaTimeStartMilliSeconds = metaData.getRecordStart().getTime() - flvRecording.getRecordStart().getTime();
-	
-					double length = ((double)deltaTimeStartMilliSeconds) / 1000;
+					double startPad = diffSeconds(metaData.getRecordStart(), flvRecording.getRecordStart());
 	
 					// Calculate delta at ending
-					long deltaTimeEndMilliSeconds = flvRecording.getRecordEnd().getTime() - metaData.getRecordEnd().getTime();
-	
-					double endPadding = ((double)deltaTimeEndMilliSeconds) / 1000;
+					double endPad = diffSeconds(flvRecording.getRecordEnd(), metaData.getRecordEnd());
 	
-					addSoxPad(returnLog, "addStartEndToAudio", length, endPadding, outputGapFullWav, outputFullWav);
+					addSoxPad(returnLog, "addStartEndToAudio", startPad, endPad, outputGapFullWav, outputFullWav);
 	
 					// Fix for Audio Length - Invalid Audio Length in Recorded Files
 					// Audio must match 100% the Video
 					log.debug("############################################");
 					log.debug("Trim Audio to Full Length -- Start");
-					File aFile = new File(outputFullWav);
 	
-					if (!aFile.exists()) {
+					if (!outputFullWav.exists()) {
 						throw new Exception("Audio File does not exist , could not extract the Audio correctly");
 					}
 					metaData.setFullWavAudioData(hashFileFullName);
 	
 					// Finally add it to the row!
-					listOfFullWaveFiles.add(outputFullWav);
+					listOfFullWaveFiles.add(outputFullWav.getCanonicalPath());
 				}
 	
 				metaDataDao.update(metaData);

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvInterviewConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvInterviewConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvInterviewConverter.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvInterviewConverter.java Wed Jan 28 17:50:11 2015
@@ -134,10 +134,9 @@ public class FlvInterviewConverter exten
 				File outputWav = new File(streamFolderGeneral, "one_second.wav");
 
 				// Calculate delta at beginning
-				Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
-				Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
 
-				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", deltaPadding.toString() };
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", "" + deltaPadding };
 
 				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
 			}
@@ -189,7 +188,7 @@ public class FlvInterviewConverter exten
 									, "-pix_fmt", "yuv420p" //
 									, podPB };
 							returnLog.add(ProcessHelper.executeScript("blankFlvPod_" + pod , argsPodB));
-						
+							
 							//ffmpeg -y -i out.flv -i rec_15_stream_4_2014_07_15_20_41_03.flv -filter_complex '[0:0]setsar=1/1[sarfix];[1:0]scale=320:260,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]' -map '[v]'  output1.flv
 							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + ".flv");
 							String podP = podF.getCanonicalPath();
@@ -200,7 +199,7 @@ public class FlvInterviewConverter exten
 									, "-map", "[v]" //
 									, podP };
 							returnLog.add(ProcessHelper.executeScript("shiftedFlvPod_" + pod , argsPod));
-
+	
 							pods[pod - 1] = podP;
 						} else {
 							pods[pod - 1] = path;

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvRecorderConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvRecorderConverter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvRecorderConverter.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvRecorderConverter.java Wed Jan 28 17:50:11 2015
@@ -23,7 +23,6 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
@@ -39,7 +38,6 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class FlvRecorderConverter extends BaseConverter implements IRecordingConverter {
-
 	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverter.class, webAppRootKey);
 
 	// Spring loaded Beans
@@ -59,11 +57,12 @@ public class FlvRecorderConverter extend
 				FFMPEG_MAP_PARAM = ".";
 			}
 
+			String finalNamePrefix = "flvRecording_" + flvRecordingId;
 			flvRecording = recordingDao.get(flvRecordingId);
 			log.debug("flvRecording " + flvRecording.getId());
 
 			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
-			List<String> listOfFullWaveFiles = new LinkedList<String>();
+			List<String> listOfFullWaveFiles = new ArrayList<String>();
 			File streamFolder = getStreamFolder(flvRecording);
 			
 			FlvRecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(flvRecording.getId());
@@ -81,8 +80,6 @@ public class FlvRecorderConverter extend
 			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder);
 
 			// Merge Wave to Full Length
-			String streamFolderGeneralName = getStreamsHibernateDir().getCanonicalPath() + File.separator; // FIXME
-
 			String hashFileFullName = screenMetaData.getStreamName() + "_FINAL_WAVE.wav";
 			String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
 
@@ -94,13 +91,12 @@ public class FlvRecorderConverter extend
 				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
 			} else {
 				// create default Audio to merge it. strip to content length
-				String outputWav = streamFolderGeneralName + "one_second.wav";
+				String outputWav = new File(getStreamsHibernateDir(), "one_second.wav").getCanonicalPath();
 
 				// Calculate delta at beginning
-				Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
-				Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
 
-				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", deltaPadding.toString() };
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", "" + deltaPadding };
 
 				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
 			}
@@ -109,11 +105,9 @@ public class FlvRecorderConverter extend
 
 			// Merge Audio with Video / Calculate resulting FLV
 
-			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv")
-					.getCanonicalPath();
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
 
-			String hashFileFullNameFlv = "flvRecording_" + flvRecording.getId() + ".flv";
-			String outputFullFlv = streamFolderGeneralName + hashFileFullNameFlv;
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
 
 			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
 			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
@@ -136,7 +130,7 @@ public class FlvRecorderConverter extend
 			flvRecording.setFlvHeight(flvHeight);
 
 			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y",//
-					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), screenMetaData.getFlvRecording().getRecordStart())),
+					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), flvRecording.getRecordStart())),
 					"-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
 					"-acodec", "libmp3lame", //
 					"-ab", "32k", //
@@ -144,41 +138,39 @@ public class FlvRecorderConverter extend
 					"-vcodec", "flashsv", //
 					"-map", "0" + FFMPEG_MAP_PARAM + "0", //
 					"-map", "1" + FFMPEG_MAP_PARAM + "0", //
-					outputFullFlv };
+					outputFullFlv.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_fullFLV));
 
-			flvRecording.setFileHash(hashFileFullNameFlv);
+			flvRecording.setFileHash(outputFullFlv.getName());
 
 			// Extract first Image for preview purpose
 			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
 			// 320x240 movie.jpg
 
-			String hashFileFullNameJPEG = "flvRecording_" + flvRecording.getId() + ".jpg";
-			String outPutJpeg = streamFolderGeneralName + hashFileFullNameJPEG;
+			File outPutJpeg = new File(getStreamsHibernateDir(), finalNamePrefix + ".jpg");
 
-			flvRecording.setPreviewImage(hashFileFullNameJPEG);
+			flvRecording.setPreviewImage(outPutJpeg.getName());
 
 			String[] argv_previewFLV = new String[] { //
 					getPathToFFMPEG(), "-y",//
-					"-i", outputFullFlv, //
+					"-i", outputFullFlv.getCanonicalPath(), //
 					"-vcodec", "mjpeg", //
 					"-vframes", "1", "-an", //
 					"-f", "rawvideo", //
 					"-s", flvWidth + "x" + flvHeight, //
-					outPutJpeg };
+					outPutJpeg.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("previewFullFLV", argv_previewFLV));
 
-			String alternateDownloadName = "flvRecording_" + flvRecording.getId() + ".avi";
-			String alternateDownloadFullName = streamFolderGeneralName + alternateDownloadName;
+			File alternateDownload = new File(getStreamsHibernateDir(), finalNamePrefix + ".avi");
 
-			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv, "-vcodec",
-					"copy", alternateDownloadFullName };
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv.getCanonicalPath(), "-vcodec",
+					"copy", alternateDownload.getCanonicalPath() };
 
 			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
 
-			flvRecording.setAlternateDownload(alternateDownloadName);
+			flvRecording.setAlternateDownload(alternateDownload.getName());
 
 			updateDuration(flvRecording);
 			convertToMp4(flvRecording, returnLog);

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java Wed Jan 28 17:50:11 2015
@@ -98,8 +98,8 @@ public class StreamAudioWriter extends B
 					metaDelta.setFlvRecordingMetaDataId(metaDataId);
 					metaDelta.setTimeStamp(0);
 					metaDelta.setDebugStatus("INIT AUDIO");
-					metaDelta.setIsStartPadding(true);
-					metaDelta.setIsEndPadding(false);
+					metaDelta.setStartPadding(true);
+					metaDelta.setEndPadding(false);
 					metaDelta.setDataLengthPacket(data.limit());
 					metaDelta.setReceivedAudioDataLength(byteCount);
 					metaDelta.setStartTime(startedSessionTimeDate);
@@ -145,9 +145,9 @@ public class StreamAudioWriter extends B
 					metaDelta.setFlvRecordingMetaDataId(metaDataId);
 					metaDelta.setTimeStamp(timeStamp);
 					metaDelta.setDebugStatus("RUN AUDIO");
-					metaDelta.setIsStartPadding(false);
+					metaDelta.setStartPadding(false);
 					metaDelta.setLastTimeStamp(preLastTimeStamp);
-					metaDelta.setIsEndPadding(false);
+					metaDelta.setEndPadding(false);
 					metaDelta.setDataLengthPacket(data.limit());
 					metaDelta.setReceivedAudioDataLength(byteCount);
 					metaDelta.setStartTime(startedSessionTimeDate);
@@ -213,8 +213,8 @@ public class StreamAudioWriter extends B
 			metaDelta.setFlvRecordingMetaDataId(metaDataId);
 			metaDelta.setTimeStamp(lastTimeStamp);
 			metaDelta.setDebugStatus("END AUDIO");
-			metaDelta.setIsStartPadding(false);
-			metaDelta.setIsEndPadding(true);
+			metaDelta.setStartPadding(false);
+			metaDelta.setEndPadding(true);
 			metaDelta.setDataLengthPacket(null);
 			metaDelta.setReceivedAudioDataLength(byteCount);
 			metaDelta.setStartTime(startedSessionTimeDate);

Modified: openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java Wed Jan 28 17:50:11 2015
@@ -62,15 +62,7 @@ public class FlvRecordingMetaDataDao {
 	}
 
 	public List<FlvRecordingMetaData> getByRecording(Long recordingId) {
-		try {
-			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class);
-			query.setParameter("recordingId", recordingId);
-
-			return query.getResultList();
-		} catch (Exception ex2) {
-			log.error("[getByRecording]: ", ex2);
-		}
-		return null;
+		return em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class).setParameter("recordingId", recordingId).getResultList();
 	}
 
 	public List<FlvRecordingMetaData> getAudioMetaDataByRecording(Long recordingId) {
@@ -117,7 +109,7 @@ public class FlvRecordingMetaDataDao {
 			flvRecordingMetaData.setRecordStart(recordStart);
 
 			flvRecordingMetaData.setAudioOnly(isAudioOnly);
-			flvRecordingMetaData.setIsVideoOnly(isVideoOnly);
+			flvRecordingMetaData.setVideoOnly(isVideoOnly);
 			flvRecordingMetaData.setScreenData(isScreenData);
 
 			flvRecordingMetaData.setStreamName(streamName);

Modified: openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java Wed Jan 28 17:50:11 2015
@@ -54,9 +54,9 @@ import org.simpleframework.xml.Root;
 	@NamedQuery(name = "getMetaById", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.id = :id")
 	, @NamedQuery(name = "getMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.id = :recordingId AND c.deleted = false")
 	, @NamedQuery(name = "getAudioMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.id = :recordingId "
-			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.isAudioOnly = true OR (c.isAudioOnly = false AND c.isVideoOnly = false))")
-	, @NamedQuery(name = "getScreenMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.id = :recordingId "
-			+ "AND c.screenData = true")
+			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.audioOnly = true OR (c.audioOnly = false AND c.videoOnly = false))")
+	, @NamedQuery(name = "getScreenMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.id = :recordingId"
+			+ " AND c.screenData = true")
 })
 @Table(name = "flvrecording_metadata")
 @Root(name = "flvrecordingmetadata")
@@ -73,7 +73,7 @@ public class FlvRecordingMetaData implem
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id")
-	@Element(data = true, required = false, name = "flvRecordingMetaDataId")
+	@Element(name = "flvRecordingMetaDataId", data = true, required = false)
 	private Long id;
 
 	@ManyToOne(fetch = FetchType.EAGER)
@@ -102,8 +102,8 @@ public class FlvRecordingMetaData implem
 	private boolean audioOnly;
 
 	@Column(name = "is_video_only")
-	@Element(data = true)
-	private Boolean isVideoOnly;
+	@Element(name = "isVideoOnly", data = true)
+	private boolean videoOnly;
 
 	@Column(name = "is_screen_data")
 	@Element(name = "isScreenData", data = true)
@@ -133,8 +133,8 @@ public class FlvRecordingMetaData implem
 	private String fullWavAudioData;
 
 	@Column(name = "audio_is_valid")
-	@Element(data = true, required = false)
-	private Boolean audioIsValid;
+	@Element(name="audioIsValid", data = true, required = false)
+	private boolean audioValid;
 
 	@Column(name = "interiew_pod_id")
 	@Element(data = true, required = false)
@@ -196,12 +196,12 @@ public class FlvRecordingMetaData implem
 		this.audioOnly = audioOnly;
 	}
 
-	public Boolean getIsVideoOnly() {
-		return isVideoOnly;
+	public boolean isVideoOnly() {
+		return videoOnly;
 	}
 
-	public void setIsVideoOnly(Boolean isVideoOnly) {
-		this.isVideoOnly = isVideoOnly;
+	public void setVideoOnly(boolean videoOnly) {
+		this.videoOnly = videoOnly;
 	}
 
 	public Long getInsertedBy() {
@@ -268,12 +268,12 @@ public class FlvRecordingMetaData implem
 		this.fullWavAudioData = fullWavAudioData;
 	}
 
-	public Boolean getAudioIsValid() {
-		return audioIsValid;
+	public boolean isAudioValid() {
+		return audioValid;
 	}
 
-	public void setAudioIsValid(Boolean audioIsValid) {
-		this.audioIsValid = audioIsValid;
+	public void setAudioValid(boolean audioValid) {
+		this.audioValid = audioValid;
 	}
 
 	public Integer getInteriewPodId() {

Modified: openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java?rev=1655407&r1=1655406&r2=1655407&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java Wed Jan 28 17:50:11 2015
@@ -84,10 +84,10 @@ public class FlvRecordingMetaDelta imple
 	private Long receivedAudioDataLength;
 	
 	@Column(name="is_end_padding")
-	private Boolean isEndPadding;
+	private boolean endPadding;
 	
 	@Column(name="is_start_padding")
-	private Boolean isStartPadding;
+	private boolean startPadding;
 	
 	@Column(name="debug_status")
 	private String debugStatus;
@@ -176,18 +176,18 @@ public class FlvRecordingMetaDelta imple
 		this.currentTime = currentTime;
 	}
 	
-	public Boolean getIsEndPadding() {
-		return isEndPadding;
+	public boolean isEndPadding() {
+		return endPadding;
 	}
-	public void setIsEndPadding(Boolean isEndPadding) {
-		this.isEndPadding = isEndPadding;
+	public void setEndPadding(boolean endPadding) {
+		this.endPadding = endPadding;
 	}
 	
-	public Boolean getIsStartPadding() {
-		return isStartPadding;
+	public boolean isStartPadding() {
+		return startPadding;
 	}
-	public void setIsStartPadding(Boolean isStartPadding) {
-		this.isStartPadding = isStartPadding;
+	public void setStartPadding(boolean startPadding) {
+		this.startPadding = startPadding;
 	}
 	
 	public String getDebugStatus() {