Author: solomax
Date: Thu Jun 19 04:30:38 2014
New Revision: 1603707

URL: http://svn.apache.org/r1603707
Log:
[OPENMEETINGS-270] endless thread should be fixed

Removed:
    
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/recordingStartWin.lzx
Modified:
    
openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx
    
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/library.lzx
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/StreamListener.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/BaseStreamWriter.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/async/StreamAudioWriter.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java

Modified: 
openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx 
(original)
+++ 
openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx 
Thu Jun 19 04:30:38 2014
@@ -1820,20 +1820,6 @@
     
     
     <!-- Recording of Meetings -->
-    <netRemoteCallHib name="checkForRecording" 
funcname="flvrecorderservice.checkForRecording">
-        <handler name="ondata" args="value">
-            <![CDATA[
-                //The onResult-Handler will be called be the rtmpconnection
-                if ($debug) Debug.write("checkForRecording: ",value);
-                if (value == null) {
-                    new 
lz.recordingStartWin(canvas.main_content._content.inner);
-                } else {
-                    new 
lz.errorPopupUserInfo(canvas,{error:canvas.getLabelName(418),user:value});
-                }
-            ]]>
-        </handler>   
-    </netRemoteCallHib>  
-    
     <netRemoteCallHib name="interviewStatus" funcname="interviewStatus">
         <handler name="ondata" args="value">
             <![CDATA[

Modified: 
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/library.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/library.lzx?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/library.lzx
 (original)
+++ 
openmeetings/branches/3.0.x/WebContent/src/modules/conference/moderation/library.lzx
 Thu Jun 19 04:30:38 2014
@@ -28,6 +28,5 @@
        <include href="applyForModeration.lzx" />
        <include href="moderationPanel.lzx" />
        <include href="responseForModeration.lzx" />
-       <include href="recordingStartWin.lzx"/>
        
 </library>

Modified: 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
 Thu Jun 19 04:30:38 2014
@@ -61,11 +61,11 @@ public class StreamListener implements I
                        }
 
                        if (log.isTraceEnabled()) {
-                               log.trace("Packet recieved. type: {} frame 
type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
+                               log.trace("##REC:: Packet recieved. type: {} 
frame type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
                        }
                        streamWriter.append(cachedEvent);
                } catch (Exception e) {
-                       log.error("[packetReceived]", e);
+                       log.error("##REC:: [packetReceived]", e);
                }
        }
 

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=1603707&r1=1603706&r2=1603707&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
 Thu Jun 19 04:30:38 2014
@@ -80,13 +80,13 @@ public abstract class BaseStreamWriter i
                try {
                        init();
                } catch (IOException ex) {
-                       log.error("[BaseStreamWriter] Could not start Thread", 
ex);
+                       log.error("##REC:: [BaseStreamWriter] Could not init 
Thread", ex);
                }
-               open();
-
                FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
                metaData.setStreamStatus(Status.STARTED);
                metaDataDao.update(metaData);
+               
+               open();
        }
 
        /**
@@ -124,12 +124,14 @@ public abstract class BaseStreamWriter i
        }
 
        public void run() {
-               long lastPackedRecieved = 0;
+               log.debug("##REC:: stream writer started");
+               long lastPackedRecieved = Long.MAX_VALUE - 
TIME_TO_WAIT_FOR_FRAME - 1;
                long counter = 0;
                while (!stopping) {
                        try {
                                CachedEvent item = queue.poll(100, 
TimeUnit.MICROSECONDS);
                                if (item != null) {
+                                       log.trace("##REC:: got packet"); 
                                        lastPackedRecieved = 
System.currentTimeMillis();
                                        if (dostopping) {
                                                log.trace("metadatId: {} :: 
Recording stopped but still packets to write to file!", metaDataId);
@@ -140,13 +142,14 @@ public abstract class BaseStreamWriter i
                                        stopping = true;
                                        closeStream();
                                }
-                               if (++counter % 1000 == 0) {
-                                       log.debug("Stream writer is still 
listening:: " + file.getName());;
+                               if (++counter % 5000 == 0) {
+                                       log.debug("##REC:: Stream writer is 
still listening:: " + file.getName());;
                                }
                        } catch (InterruptedException e) {
-                               log.error("[run]", e);
+                               log.error("##REC:: [run]", e);
                        }
                }
+               log.debug("##REC:: stream writer stopped");
        }
 
        /**
@@ -170,11 +173,11 @@ public abstract class BaseStreamWriter i
                // Write the complete Bit to the meta data, the converter task 
will wait for this bit!
                try {
                        FlvRecordingMetaData metaData = 
metaDataDao.get(metaDataId);
-                       log.debug("Stream Status was: {} has been written for: 
{}", metaData.getStreamStatus(), metaDataId);
+                       log.debug("##REC:: Stream Status was: {} has been 
written for: {}", metaData.getStreamStatus(), metaDataId);
                        metaData.setStreamStatus(Status.STOPPED);
                        metaDataDao.update(metaData);
                } catch (Exception err) {
-                       log.error("[closeStream, complete Bit]", err);
+                       log.error("##REC:: [closeStream, complete Bit]", err);
                }
        }
 
@@ -184,8 +187,9 @@ public abstract class BaseStreamWriter i
                }
                try {
                        queue.put(streampacket);
+                       log.trace("##REC:: Q put, successful: " + queue.size());
                } catch (InterruptedException ignored) {
-                       log.error("[append]", ignored);
+                       log.error("##REC:: [append]", ignored);
                }
        }
 

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=1603707&r1=1603706&r2=1603707&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
 Thu Jun 19 04:30:38 2014
@@ -65,18 +65,18 @@ public class StreamAudioWriter extends B
                        // We only care about audio at this moment
                        if (isInterview || TYPE_AUDIO == 
streampacket.getDataType()) {
                                if (streampacket.getTimestamp() <= 0) {
-                                       log.warn("Negative TimeStamp");
+                                       log.warn("##REC:: Negative TimeStamp");
                                        return;
                                }
                                // we should not skip audio data in case it is 
Audio only interview
                                if (isInterview && isScreenData && 
startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
                                        //skip until keyframe
-                                       log.trace("no KEYFRAME, skipping");
+                                       log.trace("##REC:: no KEYFRAME, 
skipping");
                                        return;
                                }
                                IoBuffer data = 
streampacket.getData().asReadOnlyBuffer();
                                if (data.limit() == 0) {
-                                       log.trace("data.limit() == 0 ");
+                                       log.trace("##REC:: data.limit() == 0 ");
                                        return;
                                }
 
@@ -165,7 +165,7 @@ public class StreamAudioWriter extends B
                                        
metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
                                }
 
-                               log.trace("timeStamp :: " + timeStamp);
+                               log.trace("##REC:: timeStamp :: " + timeStamp);
                                ITag tag = new Tag();
                                tag.setDataType(streampacket.getDataType());
 
@@ -178,7 +178,7 @@ public class StreamAudioWriter extends B
 
                        }
                } catch (Exception e) {
-                       log.error("[packetReceived]", e);
+                       log.error("##REC:: [packetReceived]", e);
                }
        }
 
@@ -189,19 +189,18 @@ public class StreamAudioWriter extends B
                        // Screen Data, cause there is no!
 
                        Date virtualTime = lastcurrentTime;
-                       log.debug("virtualTime: " + virtualTime);
-                       log.debug("startedSessionTimeDate: " + 
startedSessionTimeDate);
+                       log.debug("##REC:: virtualTime: " + virtualTime);
+                       log.debug("##REC:: startedSessionTimeDate: " + 
startedSessionTimeDate);
 
-                       long deltaRecordingTime = virtualTime == null ? 0 : 
virtualTime.getTime()
-                                       - startedSessionTimeDate.getTime();
+                       long deltaRecordingTime = virtualTime == null ? 0 : 
virtualTime.getTime() - startedSessionTimeDate.getTime();
 
-                       log.debug("lastTimeStamp :closeStream: " + 
lastTimeStamp);
-                       log.debug("lastStreamPacketTimeStamp :closeStream: " + 
lastStreamPacketTimeStamp);
-                       log.debug("deltaRecordingTime :closeStream: " + 
deltaRecordingTime);
+                       log.debug("##REC:: lastTimeStamp :closeStream: " + 
lastTimeStamp);
+                       log.debug("##REC:: lastStreamPacketTimeStamp 
:closeStream: " + lastStreamPacketTimeStamp);
+                       log.debug("##REC:: deltaRecordingTime :closeStream: " + 
deltaRecordingTime);
 
                        long deltaTimePaddingEnd = deltaRecordingTime - 
lastTimeStamp - initialDelta;
 
-                       log.debug("deltaTimePaddingEnd :: " + 
deltaTimePaddingEnd);
+                       log.debug("##REC:: deltaTimePaddingEnd :: " + 
deltaTimePaddingEnd);
 
                        FlvRecordingMetaDelta metaDelta = new 
FlvRecordingMetaDelta();
 
@@ -218,7 +217,7 @@ public class StreamAudioWriter extends B
 
                        metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
                } catch (Exception err) {
-                       log.error("[internalCloseStream]", err);
+                       log.error("##REC:: [internalCloseStream]", err);
                }
        }
 }

Modified: 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
 Thu Jun 19 04:30:38 2014
@@ -97,40 +97,15 @@ public class FLVRecorderService implemen
        public void resultReceived(IPendingServiceCall arg0) {
        }
 
-       public Client checkForRecording() {
-               try {
-
-                       IConnection current = Red5.getConnectionLocal();
-                       String streamid = current.getClient().getId();
-
-                       log.debug("getCurrentRoomClient -2- " + streamid);
-
-                       Client currentClient = 
sessionManager.getClientByStreamId(streamid, null);
-
-                       for (Client rcl : 
sessionManager.getClientListByRoom(currentClient.getRoom_id())) {
-                               if (rcl.getIsRecording()) {
-                                       return rcl;
-                               }
-                       }
-
-                       return null;
-
-               } catch (Exception err) {
-                       log.error("[checkForRecording]", err);
-               }
-               return null;
-       }
-       
        private static String generateFileName(Long flvRecording_id, String 
streamid) throws Exception {
                String dateString = CalendarPatterns.getTimeForStreamId(new 
Date());
                return "rec_" + flvRecording_id + "_stream_" + streamid + "_" + 
dateString;
        }
 
-       public String recordMeetingStream(String roomRecordingName, String 
comment, Boolean isInterview) {
+       public String recordMeetingStream(IConnection current, String 
roomRecordingName, String comment, Boolean isInterview) {
                try {
-                       log.debug(":: recordMeetingStream ::");
+                       log.debug("##REC:: recordMeetingStream ::");
 
-                       IConnection current = Red5.getConnectionLocal();
                        Client currentClient = 
sessionManager.getClientByStreamId(current.getClient().getId(), null);
                        Long room_id = currentClient.getRoom_id();
 
@@ -159,6 +134,7 @@ public class FLVRecorderService implemen
                        flvRecording = recordingDao.update(flvRecording);
                        // Receive flvRecordingId
                        Long flvRecordingId = flvRecording.getFlvRecordingId();
+                       log.debug("##REC:: recording created by USER: " + 
currentClient.getUser_id());
 
                        // Update Client and set Flag
                        currentClient.setIsRecording(true);
@@ -210,16 +186,16 @@ public class FLVRecorderService implemen
                                                                isVideoOnly = 
true;
                                                        }
 
-                                                       Long 
flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId,
+                                                       Long metaId = 
metaDataDao.addFlvRecordingMetaData(flvRecordingId,
                                                                        
rcl.getFirstname() + " " + rcl.getLastname(), now, isAudioOnly, isVideoOnly, 
false, streamName,
                                                                        
rcl.getInterviewPodId());
 
-                                                       
rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+                                                       
rcl.setFlvRecordingMetaDataId(metaId);
 
                                                        
sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
 
                                                        // Start FLV recording
-                                                       recordShow(conn, 
String.valueOf(rcl.getBroadCastID()).toString(), streamName, 
flvRecordingMetaDataId, !isAudioOnly,
+                                                       recordShow(conn, 
String.valueOf(rcl.getBroadCastID()).toString(), streamName, metaId, 
!isAudioOnly,
                                                                        
isInterview);
                                                }
                                        }
@@ -239,11 +215,10 @@ public class FLVRecorderService implemen
         * @param conn
         * @param broadcastid
         * @param streamName
-        * @param flvRecordingMetaDataId
+        * @param metaId
         * @throws Exception
         */
-       private synchronized void recordShow(IConnection conn, String 
broadcastid, String streamName, Long flvRecordingMetaDataId,
-                       boolean isScreenData, Boolean isInterview) throws 
Exception {
+       private synchronized void recordShow(IConnection conn, String 
broadcastid, String streamName, Long metaId, boolean isScreenData, Boolean 
isInterview) throws Exception {
                try {
                        log.debug("Recording show for: " + 
conn.getScope().getContextPath());
                        log.debug("Name of CLient and Stream to be recorded: " 
+ broadcastid);
@@ -261,13 +236,12 @@ public class FLVRecorderService implemen
                        log.debug("### stream " + stream);
                        log.debug("### streamName " + streamName);
                        log.debug("### conn.getScope() " + conn.getScope());
-                       log.debug("### flvRecordingMetaDataId " + 
flvRecordingMetaDataId);
+                       log.debug("### flvRecordingMetaDataId " + metaId);
                        log.debug("### isScreenData " + isScreenData);
                        log.debug("### isInterview " + isInterview);
-                       StreamListener streamListener = new 
StreamListener(!isScreenData, streamName, conn.getScope(),
-                                       flvRecordingMetaDataId, isScreenData, 
isInterview, metaDataDao, metaDeltaDao);
+                       StreamListener streamListener = new 
StreamListener(!isScreenData, streamName, conn.getScope(), metaId, 
isScreenData, isInterview, metaDataDao, metaDeltaDao);
 
-                       streamListeners.put(flvRecordingMetaDataId, 
streamListener);
+                       streamListeners.put(metaId, streamListener);
 
                        stream.addStreamListener(streamListener);
                        // Just for Debug Purpose

Modified: 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
 Thu Jun 19 04:30:38 2014
@@ -22,7 +22,6 @@ import static org.apache.openmeetings.ut
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -373,7 +372,7 @@ public class ScopeApplicationAdapter ext
        
                                                String recordingName = 
"Recording " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
        
-                                               
flvRecorderService.recordMeetingStream(recordingName, "", false);
+                                               
flvRecorderService.recordMeetingStream(current, recordingName, "", false);
                                        } else {
                                                log.warn("Recording is already 
started for the client id=" + currentClient.getId() + ". Second request is 
ignored.");
                                        }
@@ -2311,14 +2310,12 @@ public class ScopeApplicationAdapter ext
                try {
                        IConnection current = Red5.getConnectionLocal();
 
-                       for (Set<IConnection> conset : 
current.getScope().getConnections()) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
-       
-                                               if (rcl.getIsRecording() != 
null && rcl.getIsRecording()) {
-                                                       return true;
-                                               }
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+                                       if (rcl.getIsRecording() != null && 
rcl.getIsRecording()) {
+                                               return true;
                                        }
                                }
                        }
@@ -2339,15 +2336,12 @@ public class ScopeApplicationAdapter ext
                        log.debug("-----------  startInterviewRecording");
                        IConnection current = Red5.getConnectionLocal();
 
-                       Collection<Set<IConnection>> concolset = 
current.getScope().getConnections();
-                       for (Set<IConnection> conset : concolset) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
-       
-                                               if (rcl != null && 
rcl.getIsRecording() != null && rcl.getIsRecording()) {
-                                                       return false;
-                                               }
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+                                       if (rcl != null && rcl.getIsRecording() 
!= null && rcl.getIsRecording()) {
+                                               return false;
                                        }
                                }
                        }
@@ -2361,28 +2355,26 @@ public class ScopeApplicationAdapter ext
                        Map<String, String> interviewStatus = new 
HashMap<String, String>();
                        interviewStatus.put("action", "start");
 
-                       for (Set<IConnection> conset : concolset) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               IClient client = 
conn.getClient();
-                                               if 
(SessionVariablesUtil.isScreenClient(client)) {
-                                                       // screen sharing 
clients do not receive events
-                                                       continue;
-                                               } else if 
(SessionVariablesUtil.isAVClient(client)) {
-                                                       // AVClients or 
potential AVClients do not receive events
-                                                       continue;
-                                               }
-       
-                                               ((IServiceCapableConnection) 
conn).invoke(
-                                                               
"interviewStatus",
-                                                               new Object[] { 
interviewStatus }, this);
-                                               log.debug("-- interviewStatus" 
+ interviewStatus);
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       IClient client = conn.getClient();
+                                       if 
(SessionVariablesUtil.isScreenClient(client)) {
+                                               // screen sharing clients do 
not receive events
+                                               continue;
+                                       } else if 
(SessionVariablesUtil.isAVClient(client)) {
+                                               // AVClients or potential 
AVClients do not receive events
+                                               continue;
                                        }
+
+                                       ((IServiceCapableConnection) 
conn).invoke(
+                                                       "interviewStatus",
+                                                       new Object[] { 
interviewStatus }, this);
+                                       log.debug("-- startInterviewRecording " 
+ interviewStatus);
                                }
                        }
                        String recordingName = "Interview " + 
CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
 
-                       flvRecorderService.recordMeetingStream(recordingName, 
"", true);
+                       flvRecorderService.recordMeetingStream(current, 
recordingName, "", true);
 
                        return true;
                } catch (Exception err) {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/StreamListener.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/StreamListener.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/StreamListener.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/flvrecord/listener/StreamListener.java
 Thu Jun 19 04:30:38 2014
@@ -61,11 +61,11 @@ public class StreamListener implements I
                        }
 
                        if (log.isTraceEnabled()) {
-                               log.trace("Packet recieved. type: {} frame 
type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
+                               log.trace("##REC:: Packet recieved. type: {} 
frame type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
                        }
                        streamWriter.append(cachedEvent);
                } catch (Exception e) {
-                       log.error("[packetReceived]", e);
+                       log.error("##REC:: [packetReceived]", e);
                }
        }
 

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=1603707&r1=1603706&r2=1603707&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
 Thu Jun 19 04:30:38 2014
@@ -80,13 +80,13 @@ public abstract class BaseStreamWriter i
                try {
                        init();
                } catch (IOException ex) {
-                       log.error("[BaseStreamWriter] Could not start Thread", 
ex);
+                       log.error("##REC:: [BaseStreamWriter] Could not init 
Thread", ex);
                }
-               open();
-
                FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
                metaData.setStreamStatus(Status.STARTED);
                metaDataDao.update(metaData);
+               
+               open();
        }
 
        /**
@@ -124,12 +124,14 @@ public abstract class BaseStreamWriter i
        }
 
        public void run() {
-               long lastPackedRecieved = 0;
+               log.debug("##REC:: stream writer started");
+               long lastPackedRecieved = Long.MAX_VALUE - 
TIME_TO_WAIT_FOR_FRAME - 1;
                long counter = 0;
                while (!stopping) {
                        try {
                                CachedEvent item = queue.poll(100, 
TimeUnit.MICROSECONDS);
                                if (item != null) {
+                                       log.trace("##REC:: got packet"); 
                                        lastPackedRecieved = 
System.currentTimeMillis();
                                        if (dostopping) {
                                                log.trace("metadatId: {} :: 
Recording stopped but still packets to write to file!", metaDataId);
@@ -140,13 +142,14 @@ public abstract class BaseStreamWriter i
                                        stopping = true;
                                        closeStream();
                                }
-                               if (++counter % 1000 == 0) {
-                                       log.debug("Stream writer is still 
listening:: " + file.getName());;
+                               if (++counter % 5000 == 0) {
+                                       log.debug("##REC:: Stream writer is 
still listening:: " + file.getName());;
                                }
                        } catch (InterruptedException e) {
-                               log.error("[run]", e);
+                               log.error("##REC:: [run]", e);
                        }
                }
+               log.debug("##REC:: stream writer stopped");
        }
 
        /**
@@ -170,11 +173,11 @@ public abstract class BaseStreamWriter i
                // Write the complete Bit to the meta data, the converter task 
will wait for this bit!
                try {
                        FlvRecordingMetaData metaData = 
metaDataDao.get(metaDataId);
-                       log.debug("Stream Status was: {} has been written for: 
{}", metaData.getStreamStatus(), metaDataId);
+                       log.debug("##REC:: Stream Status was: {} has been 
written for: {}", metaData.getStreamStatus(), metaDataId);
                        metaData.setStreamStatus(Status.STOPPED);
                        metaDataDao.update(metaData);
                } catch (Exception err) {
-                       log.error("[closeStream, complete Bit]", err);
+                       log.error("##REC:: [closeStream, complete Bit]", err);
                }
        }
 
@@ -184,8 +187,9 @@ public abstract class BaseStreamWriter i
                }
                try {
                        queue.put(streampacket);
+                       log.trace("##REC:: Q put, successful: " + queue.size());
                } catch (InterruptedException ignored) {
-                       log.error("[append]", ignored);
+                       log.error("##REC:: [append]", ignored);
                }
        }
 

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=1603707&r1=1603706&r2=1603707&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
 Thu Jun 19 04:30:38 2014
@@ -65,18 +65,18 @@ public class StreamAudioWriter extends B
                        // We only care about audio at this moment
                        if (isInterview || TYPE_AUDIO == 
streampacket.getDataType()) {
                                if (streampacket.getTimestamp() <= 0) {
-                                       log.warn("Negative TimeStamp");
+                                       log.warn("##REC:: Negative TimeStamp");
                                        return;
                                }
                                // we should not skip audio data in case it is 
Audio only interview
                                if (isInterview && isScreenData && 
startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
                                        //skip until keyframe
-                                       log.trace("no KEYFRAME, skipping");
+                                       log.trace("##REC:: no KEYFRAME, 
skipping");
                                        return;
                                }
                                IoBuffer data = 
streampacket.getData().asReadOnlyBuffer();
                                if (data.limit() == 0) {
-                                       log.trace("data.limit() == 0 ");
+                                       log.trace("##REC:: data.limit() == 0 ");
                                        return;
                                }
 
@@ -165,7 +165,7 @@ public class StreamAudioWriter extends B
                                        
metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
                                }
 
-                               log.trace("timeStamp :: " + timeStamp);
+                               log.trace("##REC:: timeStamp :: " + timeStamp);
                                ITag tag = new Tag();
                                tag.setDataType(streampacket.getDataType());
 
@@ -178,7 +178,7 @@ public class StreamAudioWriter extends B
 
                        }
                } catch (Exception e) {
-                       log.error("[packetReceived]", e);
+                       log.error("##REC:: [packetReceived]", e);
                }
        }
 
@@ -189,19 +189,18 @@ public class StreamAudioWriter extends B
                        // Screen Data, cause there is no!
 
                        Date virtualTime = lastcurrentTime;
-                       log.debug("virtualTime: " + virtualTime);
-                       log.debug("startedSessionTimeDate: " + 
startedSessionTimeDate);
+                       log.debug("##REC:: virtualTime: " + virtualTime);
+                       log.debug("##REC:: startedSessionTimeDate: " + 
startedSessionTimeDate);
 
-                       long deltaRecordingTime = virtualTime == null ? 0 : 
virtualTime.getTime()
-                                       - startedSessionTimeDate.getTime();
+                       long deltaRecordingTime = virtualTime == null ? 0 : 
virtualTime.getTime() - startedSessionTimeDate.getTime();
 
-                       log.debug("lastTimeStamp :closeStream: " + 
lastTimeStamp);
-                       log.debug("lastStreamPacketTimeStamp :closeStream: " + 
lastStreamPacketTimeStamp);
-                       log.debug("deltaRecordingTime :closeStream: " + 
deltaRecordingTime);
+                       log.debug("##REC:: lastTimeStamp :closeStream: " + 
lastTimeStamp);
+                       log.debug("##REC:: lastStreamPacketTimeStamp 
:closeStream: " + lastStreamPacketTimeStamp);
+                       log.debug("##REC:: deltaRecordingTime :closeStream: " + 
deltaRecordingTime);
 
                        long deltaTimePaddingEnd = deltaRecordingTime - 
lastTimeStamp - initialDelta;
 
-                       log.debug("deltaTimePaddingEnd :: " + 
deltaTimePaddingEnd);
+                       log.debug("##REC:: deltaTimePaddingEnd :: " + 
deltaTimePaddingEnd);
 
                        FlvRecordingMetaDelta metaDelta = new 
FlvRecordingMetaDelta();
 
@@ -218,7 +217,7 @@ public class StreamAudioWriter extends B
 
                        metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
                } catch (Exception err) {
-                       log.error("[internalCloseStream]", err);
+                       log.error("##REC:: [internalCloseStream]", err);
                }
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
 Thu Jun 19 04:30:38 2014
@@ -100,40 +100,15 @@ public class FLVRecorderService implemen
        public void resultReceived(IPendingServiceCall arg0) {
        }
 
-       public Client checkForRecording() {
-               try {
-
-                       IConnection current = Red5.getConnectionLocal();
-                       String streamid = current.getClient().getId();
-
-                       log.debug("getCurrentRoomClient -2- " + streamid);
-
-                       Client currentClient = 
sessionManager.getClientByStreamId(streamid, null);
-
-                       for (Client rcl : 
sessionManager.getClientListByRoom(currentClient.getRoom_id())) {
-                               if (rcl.getIsRecording()) {
-                                       return rcl;
-                               }
-                       }
-
-                       return null;
-
-               } catch (Exception err) {
-                       log.error("[checkForRecording]", err);
-               }
-               return null;
-       }
-       
        private static String generateFileName(Long flvRecording_id, String 
streamid) throws Exception {
                String dateString = CalendarPatterns.getTimeForStreamId(new 
Date());
                return "rec_" + flvRecording_id + "_stream_" + streamid + "_" + 
dateString;
        }
 
-       public String recordMeetingStream(String roomRecordingName, String 
comment, Boolean isInterview) {
+       public String recordMeetingStream(IConnection current, String 
roomRecordingName, String comment, Boolean isInterview) {
                try {
-                       log.debug(":: recordMeetingStream ::");
+                       log.debug("##REC:: recordMeetingStream ::");
 
-                       IConnection current = Red5.getConnectionLocal();
                        Client currentClient = 
sessionManager.getClientByStreamId(current.getClient().getId(), null);
                        Long room_id = currentClient.getRoom_id();
 
@@ -162,6 +137,7 @@ public class FLVRecorderService implemen
                        flvRecording = recordingDao.update(flvRecording);
                        // Receive flvRecordingId
                        Long flvRecordingId = flvRecording.getFlvRecordingId();
+                       log.debug("##REC:: recording created by USER: " + 
currentClient.getUser_id());
 
                        // Update Client and set Flag
                        currentClient.setIsRecording(true);
@@ -213,16 +189,16 @@ public class FLVRecorderService implemen
                                                                isVideoOnly = 
true;
                                                        }
 
-                                                       Long 
flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId,
+                                                       Long metaId = 
metaDataDao.addFlvRecordingMetaData(flvRecordingId,
                                                                        
rcl.getFirstname() + " " + rcl.getLastname(), now, isAudioOnly, isVideoOnly, 
false, streamName,
                                                                        
rcl.getInterviewPodId());
 
-                                                       
rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+                                                       
rcl.setFlvRecordingMetaDataId(metaId);
 
                                                        
sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
 
                                                        // Start FLV recording
-                                                       recordShow(conn, 
String.valueOf(rcl.getBroadCastID()).toString(), streamName, 
flvRecordingMetaDataId, !isAudioOnly,
+                                                       recordShow(conn, 
String.valueOf(rcl.getBroadCastID()).toString(), streamName, metaId, 
!isAudioOnly,
                                                                        
isInterview);
                                                }
                                        }
@@ -242,11 +218,10 @@ public class FLVRecorderService implemen
         * @param conn
         * @param broadcastid
         * @param streamName
-        * @param flvRecordingMetaDataId
+        * @param metaId
         * @throws Exception
         */
-       private synchronized void recordShow(IConnection conn, String 
broadcastid, String streamName, Long flvRecordingMetaDataId,
-                       boolean isScreenData, Boolean isInterview) throws 
Exception {
+       private synchronized void recordShow(IConnection conn, String 
broadcastid, String streamName, Long metaId, boolean isScreenData, Boolean 
isInterview) throws Exception {
                try {
                        log.debug("Recording show for: " + 
conn.getScope().getContextPath());
                        log.debug("Name of CLient and Stream to be recorded: " 
+ broadcastid);
@@ -264,13 +239,12 @@ public class FLVRecorderService implemen
                        log.debug("### stream " + stream);
                        log.debug("### streamName " + streamName);
                        log.debug("### conn.getScope() " + conn.getScope());
-                       log.debug("### flvRecordingMetaDataId " + 
flvRecordingMetaDataId);
+                       log.debug("### flvRecordingMetaDataId " + metaId);
                        log.debug("### isScreenData " + isScreenData);
                        log.debug("### isInterview " + isInterview);
-                       StreamListener streamListener = new 
StreamListener(!isScreenData, streamName, conn.getScope(),
-                                       flvRecordingMetaDataId, isScreenData, 
isInterview, metaDataDao, metaDeltaDao);
+                       StreamListener streamListener = new 
StreamListener(!isScreenData, streamName, conn.getScope(), metaId, 
isScreenData, isInterview, metaDataDao, metaDeltaDao);
 
-                       streamListeners.put(flvRecordingMetaDataId, 
streamListener);
+                       streamListeners.put(metaId, streamListener);
 
                        stream.addStreamListener(streamListener);
                        // Just for Debug Purpose

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1603707&r1=1603706&r2=1603707&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Thu Jun 19 04:30:38 2014
@@ -373,7 +373,7 @@ public class ScopeApplicationAdapter ext
        
                                                String recordingName = 
"Recording " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
        
-                                               
flvRecorderService.recordMeetingStream(recordingName, "", false);
+                                               
flvRecorderService.recordMeetingStream(current, recordingName, "", false);
                                        } else {
                                                log.warn("Recording is already 
started for the client id=" + currentClient.getId() + ". Second request is 
ignored.");
                                        }
@@ -2311,14 +2311,12 @@ public class ScopeApplicationAdapter ext
                try {
                        IConnection current = Red5.getConnectionLocal();
 
-                       for (Set<IConnection> conset : 
current.getScope().getConnections()) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
-       
-                                               if (rcl.getIsRecording() != 
null && rcl.getIsRecording()) {
-                                                       return true;
-                                               }
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+                                       if (rcl.getIsRecording() != null && 
rcl.getIsRecording()) {
+                                               return true;
                                        }
                                }
                        }
@@ -2339,15 +2337,12 @@ public class ScopeApplicationAdapter ext
                        log.debug("-----------  startInterviewRecording");
                        IConnection current = Red5.getConnectionLocal();
 
-                       Collection<Set<IConnection>> concolset = 
current.getScope().getConnections();
-                       for (Set<IConnection> conset : concolset) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
-       
-                                               if (rcl != null && 
rcl.getIsRecording() != null && rcl.getIsRecording()) {
-                                                       return false;
-                                               }
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+                                       if (rcl != null && rcl.getIsRecording() 
!= null && rcl.getIsRecording()) {
+                                               return false;
                                        }
                                }
                        }
@@ -2361,28 +2356,26 @@ public class ScopeApplicationAdapter ext
                        Map<String, String> interviewStatus = new 
HashMap<String, String>();
                        interviewStatus.put("action", "start");
 
-                       for (Set<IConnection> conset : concolset) {
-                               for (IConnection conn : conset) {
-                                       if (conn != null) {
-                                               IClient client = 
conn.getClient();
-                                               if 
(SessionVariablesUtil.isScreenClient(client)) {
-                                                       // screen sharing 
clients do not receive events
-                                                       continue;
-                                               } else if 
(SessionVariablesUtil.isAVClient(client)) {
-                                                       // AVClients or 
potential AVClients do not receive events
-                                                       continue;
-                                               }
-       
-                                               ((IServiceCapableConnection) 
conn).invoke(
-                                                               
"interviewStatus",
-                                                               new Object[] { 
interviewStatus }, this);
-                                               log.debug("-- interviewStatus" 
+ interviewStatus);
+                       for (IConnection conn : 
current.getScope().getClientConnections()) {
+                               if (conn != null) {
+                                       IClient client = conn.getClient();
+                                       if 
(SessionVariablesUtil.isScreenClient(client)) {
+                                               // screen sharing clients do 
not receive events
+                                               continue;
+                                       } else if 
(SessionVariablesUtil.isAVClient(client)) {
+                                               // AVClients or potential 
AVClients do not receive events
+                                               continue;
                                        }
+
+                                       ((IServiceCapableConnection) 
conn).invoke(
+                                                       "interviewStatus",
+                                                       new Object[] { 
interviewStatus }, this);
+                                       log.debug("-- startInterviewRecording " 
+ interviewStatus);
                                }
                        }
                        String recordingName = "Interview " + 
CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
 
-                       flvRecorderService.recordMeetingStream(recordingName, 
"", true);
+                       flvRecorderService.recordMeetingStream(current, 
recordingName, "", true);
 
                        return true;
                } catch (Exception err) {


Reply via email to