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 &amp;&amp; 
(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>


Reply via email to