Author: solomax
Date: Tue Jun 17 07:52:38 2014
New Revision: 1603079
URL: http://svn.apache.org/r1603079
Log:
Recordings should be more stable; Build fixed
Modified:
openmeetings/branches/3.0.x/WebContent/red5/index.html
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/moderationPanel.lzx
openmeetings/branches/3.0.x/build.xml
openmeetings/branches/3.0.x/ivy.xml
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/data/flvrecord/listener/async/BaseStreamWriter.java
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OmException.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/data/flvrecord/listener/async/BaseStreamWriter.java
openmeetings/trunk/singlewebapp/pom.xml
Modified: openmeetings/branches/3.0.x/WebContent/red5/index.html
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/red5/index.html?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/red5/index.html (original)
+++ openmeetings/branches/3.0.x/WebContent/red5/index.html Tue Jun 17 07:52:38
2014
@@ -15,9 +15,9 @@
<html>
<head>
<title>Your Page Title</title>
-<meta http-equiv="REFRESH" content="0;url=openmeetings/"></HEAD>
-<BODY>
+<meta http-equiv="REFRESH" content="0;url=openmeetings/">
+</head>
+<body>
Redirect to openmeetings/
-</BODY>
-</HTML>
-
+</body>
+</html>
Modified:
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/moderationPanel.lzx
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/moderationPanel.lzx?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/moderationPanel.lzx
(original)
+++
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/moderationPanel.lzx
Tue Jun 17 07:52:38 2014
@@ -63,6 +63,7 @@
this.mod_btn.destroy();
}
this._roomName.setAttribute("text",this.roomName);
+ if ($debug) Debug.write("moderationPanel.init: ",
!canvas.currentRoomObj.hideScreenSharing && (canvas.ismoderator ||
canvas.becomemoderator || canvas.isAllowedToScreenShare),
canvas.currentRoomObj);
]]>
</handler>
@@ -104,9 +105,8 @@
<labelTooltip inittwice="true" labelid="906" />
</miniIconsNew>
- <miniIconsNew name="_doShare" y="6"
innerResource="start_screensharing_rsc" width="16" height="16"
- showhandcursor="true"
- visible="${canvas.currentRoomObj.hideScreenSharing ? false :
((canvas.becomemoderator) ? true : ((canvas.isAllowedToScreenShare) ? true :
false )) }" >
+ <miniIconsNew name="_doShare" y="6"
innerResource="start_screensharing_rsc" width="16" height="16"
showhandcursor="true"
+ visible="${ !canvas.currentRoomObj.hideScreenSharing &&
(canvas.ismoderator || canvas.becomemoderator || canvas.isAllowedToScreenShare)
}" >
<handler name="onclick">
this.parent.checkForApplyScreen("no");
</handler>
Modified: openmeetings/branches/3.0.x/build.xml
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/build.xml?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/build.xml (original)
+++ openmeetings/branches/3.0.x/build.xml Tue Jun 17 07:52:38 2014
@@ -1212,7 +1212,7 @@
<target name="-retrieve-red5-client" unless="red5.client.installed"
description="Retrieves the libraries if needed"
depends="-retrieve-red5-server,-jgit-task">
<!-- Needs an empty dir to checkout to -->
<delete dir="${red5.client.dir}"></delete>
- <git-clone uri="https://github.com/Red5/red5-client.git"
dest="${red5.client.dir}" />
+ <git-clone uri="https://github.com/Red5/red5-client.git"
dest="${red5.client.dir}" branch="v${red5.client.version}"/>
<artifact:mvn pom="${red5.client.dir}/pom.xml"
mavenVersion="${maven.version}" fork="true" dir="${red5.client.dir}">
<jvmarg value="-Dmaven.buildNumber.doUpdate=false" />
<!--jvmarg value="-Dassembly.skipAssembly=true" /-->
Modified: openmeetings/branches/3.0.x/ivy.xml
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/ivy.xml?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/ivy.xml (original)
+++ openmeetings/branches/3.0.x/ivy.xml Tue Jun 17 07:52:38 2014
@@ -312,6 +312,9 @@
<dependency org="org.seleniumhq.selenium" name="selenium-java"
conf="openmeetings->*" rev="2.35.0" >
<include type="jar" />
</dependency>
+ <dependency org="org.apache.directory.api" name="api-all"
rev="1.0.0-M22" conf="openmeetings->*" >
+ <include type="jar" />
+ </dependency>
<!-- include type="bundle" / FIXME unable to get openjpa
without sources -->
<dependency org="org.mnode.ical4j" name="ical4j" rev="1.0.5"
conf="openmeetings.ext->*" transitive="false"/>
@@ -405,6 +408,7 @@
<exclude org="javax.servlet" module="servlet-api" type="*"
ext="*" conf="*" matcher="exact"/>
<exclude org="cglib" module="cglib-nodep" type="*" ext="*"
conf="*" matcher="exact"/>
<exclude org="pull-parser" module="pull-parser" type="*"
ext="*" conf="*" matcher="exact"/>
+ <exclude org="org.apache.mina" module="mina-core" type="*"
ext="*" conf="*" matcher="exact"/>
</dependencies>
</ivy-module>
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=1603079&r1=1603078&r2=1603079&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
Tue Jun 17 07:52:38 2014
@@ -18,6 +18,7 @@
*/
package org.apache.openmeetings.converter;
+import static
org.apache.openmeetings.data.flvrecord.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
import static org.apache.openmeetings.util.OmFileHelper.getRecording;
@@ -142,12 +143,22 @@ public abstract class BaseConverter {
return argv;
}
+ private static File getMetaFlv(FlvRecordingMetaData metaData) {
+ File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+ return new File(metaDir, metaData.getStreamName() + ".flv");
+ }
+
+ private static File getMetaFlvSer(FlvRecordingMetaData metaData) {
+ File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+ return new File(metaDir, metaData.getStreamName() + ".flv.ser");
+ }
+
public static void printMetaInfo(FlvRecordingMetaData metaData, String
prefix) {
if (log.isDebugEnabled()) {
- log.debug(String.format("### %s:: stream with id %s;
current status: %s ", prefix, metaData.getFlvRecordingMetaDataId(),
metaData.getStreamStatus()));
- File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
- File metaFlv = new File(metaDir,
metaData.getStreamName() + ".flv");
- File metaSer = new File(metaDir,
metaData.getStreamName() + ".flv.ser");
+ log.debug(String.format("### %s:: recording id %s;
stream with id %s; current status: %s ", prefix,
metaData.getFlvRecording().getFlvRecordingId()
+ , metaData.getFlvRecordingMetaDataId(),
metaData.getStreamStatus()));
+ File metaFlv = getMetaFlv(metaData);
+ File metaSer = getMetaFlvSer(metaData);
log.debug(String.format("### %s:: Flv file [%s] exists
? %s; size: %s, lastModified: %s ", prefix, metaFlv.getPath(),
metaFlv.exists(), metaFlv.length(), metaFlv.lastModified()));
log.debug(String.format("### %s:: Ser file [%s] exists
? %s; size: %s, lastModified: %s ", prefix, metaSer.getPath(),
metaSer.exists(), metaSer.length(), metaSer.lastModified()));
}
@@ -159,6 +170,7 @@ public abstract class BaseConverter {
log.debug("### meta Stream not yet written to disk " +
metaId);
boolean doWait = true;
long counter = 0;
+ long maxTimestamp = 0;
while(doWait) {
log.trace("### Stream not yet written Thread
Sleep - " + metaId);
@@ -168,7 +180,35 @@ public abstract class BaseConverter {
printMetaInfo(metaData, "Stream now
written");
log.debug("### Thread continue ... " );
doWait = false;
- } else if (++counter % 1000 == 0) {
+ break;
+ } else {
+ File metaFlv = getMetaFlv(metaData);
+ if (metaFlv.exists()) {
+ if (maxTimestamp <
metaFlv.lastModified()) {
+ maxTimestamp =
metaFlv.lastModified();
+ }
+ }
+ File metaSer = getMetaFlvSer(metaData);
+ if (metaSer.exists()) {
+ if (maxTimestamp <
metaSer.lastModified()) {
+ maxTimestamp =
metaSer.lastModified();
+ }
+ if (maxTimestamp +
TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+ // long time without
any update, closing
+ /*
+ try {
+ if
(FLVWriter.repair(metaSer.getCanonicalPath(), null, null) && !metaSer.exists())
{
+
metaData.setStreamStatus(Status.STOPPED);
+
metaDataDao.update(metaData);
+ }
+ } catch (IOException e)
{
+ log.error("###
Error while file repairing ... ", e);
+ }
+ */
+ }
+ }
+ }
+ if (++counter % 1000 == 0) {
printMetaInfo(metaData, "Still
waiting");
}
Modified:
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
(original)
+++
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
Tue Jun 17 07:52:38 2014
@@ -43,6 +43,7 @@ import org.slf4j.Logger;
public abstract class BaseStreamWriter implements Runnable {
private static final Logger log =
Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+ public final static int TIME_TO_WAIT_FOR_FRAME = 15 * 60 * 1000; //15
minutes
protected int startTimeStamp = -1;
protected long initialDelta = 0;
@@ -123,19 +124,25 @@ public abstract class BaseStreamWriter i
}
public void run() {
+ long lastPackedRecieved = 0;
+ long counter = 0;
while (!stopping) {
try {
CachedEvent item = queue.poll(100,
TimeUnit.MICROSECONDS);
if (item != null) {
+ lastPackedRecieved =
System.currentTimeMillis();
if (dostopping) {
log.trace("metadatId: {} ::
Recording stopped but still packets to write to file!", metaDataId);
}
packetReceived(item);
- } else if (dostopping) {
+ } else if (dostopping || lastPackedRecieved +
TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
stopping = true;
closeStream();
}
+ if (++counter % 1000 == 0) {
+ log.debug("Stream writer is still
listening:: " + file.getName());;
+ }
} catch (InterruptedException e) {
log.error("[run]", e);
}
Modified:
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OmException.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OmException.java?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OmException.java
(original)
+++
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OmException.java
Tue Jun 17 07:52:38 2014
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.openmeetings.util;
public class OmException extends Exception {
@@ -12,6 +30,10 @@ public class OmException extends Excepti
this.code = code;
}
+ public OmException(Throwable cause) {
+ super(cause);
+ }
+
public Long getCode() {
return code;
}
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=1603079&r1=1603078&r2=1603079&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
Tue Jun 17 07:52:38 2014
@@ -18,6 +18,7 @@
*/
package org.apache.openmeetings.core.converter;
+import static
org.apache.openmeetings.core.data.flvrecord.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
import static org.apache.openmeetings.util.OmFileHelper.getRecording;
@@ -142,12 +143,22 @@ public abstract class BaseConverter {
return argv;
}
+ private static File getMetaFlv(FlvRecordingMetaData metaData) {
+ File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+ return new File(metaDir, metaData.getStreamName() + ".flv");
+ }
+
+ private static File getMetaFlvSer(FlvRecordingMetaData metaData) {
+ File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+ return new File(metaDir, metaData.getStreamName() + ".flv.ser");
+ }
+
public static void printMetaInfo(FlvRecordingMetaData metaData, String
prefix) {
if (log.isDebugEnabled()) {
- log.debug(String.format("### %s:: stream with id %s;
current status: %s ", prefix, metaData.getFlvRecordingMetaDataId(),
metaData.getStreamStatus()));
- File metaDir =
getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
- File metaFlv = new File(metaDir,
metaData.getStreamName() + ".flv");
- File metaSer = new File(metaDir,
metaData.getStreamName() + ".flv.ser");
+ log.debug(String.format("### %s:: recording id %s;
stream with id %s; current status: %s ", prefix,
metaData.getFlvRecording().getFlvRecordingId()
+ , metaData.getFlvRecordingMetaDataId(),
metaData.getStreamStatus()));
+ File metaFlv = getMetaFlv(metaData);
+ File metaSer = getMetaFlvSer(metaData);
log.debug(String.format("### %s:: Flv file [%s] exists
? %s; size: %s, lastModified: %s ", prefix, metaFlv.getPath(),
metaFlv.exists(), metaFlv.length(), metaFlv.lastModified()));
log.debug(String.format("### %s:: Ser file [%s] exists
? %s; size: %s, lastModified: %s ", prefix, metaSer.getPath(),
metaSer.exists(), metaSer.length(), metaSer.lastModified()));
}
@@ -159,6 +170,7 @@ public abstract class BaseConverter {
log.debug("### meta Stream not yet written to disk " +
metaId);
boolean doWait = true;
long counter = 0;
+ long maxTimestamp = 0;
while(doWait) {
log.trace("### Stream not yet written Thread
Sleep - " + metaId);
@@ -168,7 +180,35 @@ public abstract class BaseConverter {
printMetaInfo(metaData, "Stream now
written");
log.debug("### Thread continue ... " );
doWait = false;
- } else if (++counter % 1000 == 0) {
+ break;
+ } else {
+ File metaFlv = getMetaFlv(metaData);
+ if (metaFlv.exists()) {
+ if (maxTimestamp <
metaFlv.lastModified()) {
+ maxTimestamp =
metaFlv.lastModified();
+ }
+ }
+ File metaSer = getMetaFlvSer(metaData);
+ if (metaSer.exists()) {
+ if (maxTimestamp <
metaSer.lastModified()) {
+ maxTimestamp =
metaSer.lastModified();
+ }
+ if (maxTimestamp +
TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+ // long time without
any update, closing
+ /*
+ try {
+ if
(FLVWriter.repair(metaSer.getCanonicalPath(), null, null) && !metaSer.exists())
{
+
metaData.setStreamStatus(Status.STOPPED);
+
metaDataDao.update(metaData);
+ }
+ } catch (IOException e)
{
+ log.error("###
Error while file repairing ... ", e);
+ }
+ */
+ }
+ }
+ }
+ if (++counter % 1000 == 0) {
printMetaInfo(metaData, "Still
waiting");
}
Modified:
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/BaseStreamWriter.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/BaseStreamWriter.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/BaseStreamWriter.java
Tue Jun 17 07:52:38 2014
@@ -43,6 +43,7 @@ import org.slf4j.Logger;
public abstract class BaseStreamWriter implements Runnable {
private static final Logger log =
Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+ public final static int TIME_TO_WAIT_FOR_FRAME = 15 * 60 * 1000; //15
minutes
protected int startTimeStamp = -1;
protected long initialDelta = 0;
@@ -123,19 +124,25 @@ public abstract class BaseStreamWriter i
}
public void run() {
+ long lastPackedRecieved = 0;
+ long counter = 0;
while (!stopping) {
try {
CachedEvent item = queue.poll(100,
TimeUnit.MICROSECONDS);
if (item != null) {
+ lastPackedRecieved =
System.currentTimeMillis();
if (dostopping) {
log.trace("metadatId: {} ::
Recording stopped but still packets to write to file!", metaDataId);
}
packetReceived(item);
- } else if (dostopping) {
+ } else if (dostopping || lastPackedRecieved +
TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
stopping = true;
closeStream();
}
+ if (++counter % 1000 == 0) {
+ log.debug("Stream writer is still
listening:: " + file.getName());;
+ }
} catch (InterruptedException e) {
log.error("[run]", e);
}
Modified: openmeetings/trunk/singlewebapp/pom.xml
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/pom.xml?rev=1603079&r1=1603078&r2=1603079&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/pom.xml (original)
+++ openmeetings/trunk/singlewebapp/pom.xml Tue Jun 17 07:52:38 2014
@@ -103,6 +103,9 @@
<system>jenkins</system>
<url>https://builds.apache.org/view/M-R/view/OpenMeetings/job/openmeetings/</url>
</ciManagement>
+ <prerequisites>
+ <maven>3.2.1</maven>
+ </prerequisites>
<developers>
<developer>
<id>sebawagner</id>