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>