Author: solomax
Date: Sat Mar  1 12:51:35 2014
New Revision: 1573167

URL: http://svn.apache.org/r1573167
Log:
[OPENMEETINGS-859] Audio and Video are now in sync

Modified:
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
    openmeetings/branches/3.0.x/src/screenshare/resources/logback.xml
    
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
    openmeetings/trunk/singlewebapp/src/screenshare/resources/logback.xml

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=1573167&r1=1573166&r2=1573167&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
 Sat Mar  1 12:51:35 2014
@@ -23,8 +23,10 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
 import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
@@ -71,6 +73,17 @@ public class FlvRecorderConverter extend
                }
        }
 
+       private String getDifference(Date from, Date to) {
+               long millis = from.getTime() - to.getTime();
+               long hours = TimeUnit.MILLISECONDS.toHours(millis);
+               millis -= TimeUnit.HOURS.toMillis(hours);
+               long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
+               millis -= TimeUnit.MINUTES.toMillis(minutes);
+               long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
+               millis -= TimeUnit.SECONDS.toMillis(seconds);
+               return String.format("%02d:%02d:%02d.%03d", hours, minutes, 
seconds, millis);
+       }
+       
        public void stripAudioFromFLVs(FlvRecording flvRecording) {
                List<ConverterProcessResult> returnLog = new 
ArrayList<ConverterProcessResult>();
                List<String> listOfFullWaveFiles = new LinkedList<String>();
@@ -97,38 +110,25 @@ public class FlvRecorderConverter extend
                        String outputFullWav = new File(streamFolder, 
hashFileFullName).getCanonicalPath();
 
                        if (listOfFullWaveFiles.size() == 1) {
-
                                outputFullWav = listOfFullWaveFiles.get(0);
-
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-
                        } else if (listOfFullWaveFiles.size() > 0) {
-
                                String[] argv_full_sox = 
mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
 
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-
-                               metaDataDao.update(screenMetaData);
-
                                
returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
                        } else {
-
-                               // create default Audio to merge it.
-                               // strip to content length
+                               // create default Audio to merge it. strip to 
content length
                                String outputWav = streamFolderGeneralName + 
"one_second.wav";
 
                                // Calculate delta at beginning
-                               Long deltaTimeMilliSeconds = 
flvRecording.getRecordEnd().getTime()
-                                               - 
flvRecording.getRecordStart().getTime();
+                               Long deltaTimeMilliSeconds = 
flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
                                Float deltaPadding = 
(Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
 
-                               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.toString() };
 
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-                               metaDataDao.update(screenMetaData);
                                
returnLog.add(ProcessHelper.executeScript("generateSampleAudio", 
argv_full_sox));
                        }
+                       screenMetaData.setFullWavAudioData(hashFileFullName);
+                       metaDataDao.update(screenMetaData);
 
                        // Merge Audio with Video / Calculate resulting FLV
 
@@ -159,6 +159,7 @@ public class FlvRecorderConverter extend
                        flvRecording.setFlvHeight(flvHeight);
 
                        String[] argv_fullFLV = new String[] { 
getPathToFFMPEG(), //
+                                       "-itsoffset", 
getDifference(screenMetaData.getRecordStart(), 
screenMetaData.getFlvRecording().getRecordStart()),
                                        "-i", inputScreenFullFlv, "-i", 
outputFullWav, "-ar", "22050", //
                                        "-acodec", "libmp3lame", //
                                        "-ab", "32k", //

Modified: openmeetings/branches/3.0.x/src/screenshare/resources/logback.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/screenshare/resources/logback.xml?rev=1573167&r1=1573166&r2=1573167&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/screenshare/resources/logback.xml (original)
+++ openmeetings/branches/3.0.x/src/screenshare/resources/logback.xml Sat Mar  
1 12:51:35 2014
@@ -44,7 +44,7 @@
                <level value="DEBUG" />
        </logger>
        <root>
-               <level value="DEBUG" />
+               <level value="INFO" />
                <appender-ref ref="FLOG2" />
                <appender-ref ref="CONSOLE2" />
        </root>

Modified: 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java?rev=1573167&r1=1573166&r2=1573167&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
 Sat Mar  1 12:51:35 2014
@@ -23,8 +23,10 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
 import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
@@ -71,6 +73,17 @@ public class FlvRecorderConverter extend
                }
        }
 
+       private String getDifference(Date from, Date to) {
+               long millis = from.getTime() - to.getTime();
+               long hours = TimeUnit.MILLISECONDS.toHours(millis);
+               millis -= TimeUnit.HOURS.toMillis(hours);
+               long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
+               millis -= TimeUnit.MINUTES.toMillis(minutes);
+               long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
+               millis -= TimeUnit.SECONDS.toMillis(seconds);
+               return String.format("%02d:%02d:%02d.%03d", hours, minutes, 
seconds, millis);
+       }
+       
        public void stripAudioFromFLVs(FlvRecording flvRecording) {
                List<ConverterProcessResult> returnLog = new 
ArrayList<ConverterProcessResult>();
                List<String> listOfFullWaveFiles = new LinkedList<String>();
@@ -97,38 +110,25 @@ public class FlvRecorderConverter extend
                        String outputFullWav = new File(streamFolder, 
hashFileFullName).getCanonicalPath();
 
                        if (listOfFullWaveFiles.size() == 1) {
-
                                outputFullWav = listOfFullWaveFiles.get(0);
-
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-
                        } else if (listOfFullWaveFiles.size() > 0) {
-
                                String[] argv_full_sox = 
mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
 
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-
-                               metaDataDao.update(screenMetaData);
-
                                
returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
                        } else {
-
-                               // create default Audio to merge it.
-                               // strip to content length
+                               // create default Audio to merge it. strip to 
content length
                                String outputWav = streamFolderGeneralName + 
"one_second.wav";
 
                                // Calculate delta at beginning
-                               Long deltaTimeMilliSeconds = 
flvRecording.getRecordEnd().getTime()
-                                               - 
flvRecording.getRecordStart().getTime();
+                               Long deltaTimeMilliSeconds = 
flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
                                Float deltaPadding = 
(Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;
 
-                               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.toString() };
 
-                               
screenMetaData.setFullWavAudioData(hashFileFullName);
-                               metaDataDao.update(screenMetaData);
                                
returnLog.add(ProcessHelper.executeScript("generateSampleAudio", 
argv_full_sox));
                        }
+                       screenMetaData.setFullWavAudioData(hashFileFullName);
+                       metaDataDao.update(screenMetaData);
 
                        // Merge Audio with Video / Calculate resulting FLV
 
@@ -159,6 +159,7 @@ public class FlvRecorderConverter extend
                        flvRecording.setFlvHeight(flvHeight);
 
                        String[] argv_fullFLV = new String[] { 
getPathToFFMPEG(), //
+                                       "-itsoffset", 
getDifference(screenMetaData.getRecordStart(), 
screenMetaData.getFlvRecording().getRecordStart()),
                                        "-i", inputScreenFullFlv, "-i", 
outputFullWav, "-ar", "22050", //
                                        "-acodec", "libmp3lame", //
                                        "-ab", "32k", //

Modified: openmeetings/trunk/singlewebapp/src/screenshare/resources/logback.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/screenshare/resources/logback.xml?rev=1573167&r1=1573166&r2=1573167&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/screenshare/resources/logback.xml 
(original)
+++ openmeetings/trunk/singlewebapp/src/screenshare/resources/logback.xml Sat 
Mar  1 12:51:35 2014
@@ -44,7 +44,7 @@
                <level value="DEBUG" />
        </logger>
        <root>
-               <level value="DEBUG" />
+               <level value="INFO" />
                <appender-ref ref="FLOG2" />
                <appender-ref ref="CONSOLE2" />
        </root>


Reply via email to