Author: solomax
Date: Tue Jan 21 16:29:38 2014
New Revision: 1560068

URL: http://svn.apache.org/r1560068
Log:
Interview conversion is improved

Modified:
    
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
    
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
    
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
    
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java

Modified: 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/BaseConverter.java?rev=1560068&r1=1560067&r2=1560068&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
 Tue Jan 21 16:29:38 2014
@@ -143,20 +143,19 @@ public abstract class BaseConverter {
                        
log.debug("###################################################");
        
                        for (FlvRecordingMetaData metaData : metaDataList) {
-                               
+                               long metaId = 
metaData.getFlvRecordingMetaDataId();
                                if (metaData.getStreamReaderThreadComplete() == 
null) {
-                                       throw new 
IllegalStateException("StreamReaderThreadComplete Bit is NULL, error in 
recording");
+                                       log.debug("stripAudioFirstPass:: 
StreamReaderThreadComplete Bit is NULL, error in recording " + metaId);
+                                       continue;
                                }
                                
                                if (!metaData.getStreamReaderThreadComplete()) {
-                                       
-                                       log.debug("### meta Stream not yet 
written to disk" + metaData.getFlvRecordingMetaDataId());
+                                       log.debug("### meta Stream not yet 
written to disk " + metaId);
                                        boolean doStop = true;
                                        while(doStop) {
+                                               log.debug("### Stream not yet 
written Thread Sleep - " + metaId);
                                                
-                                               log.debug("### Stream not yet 
written Thread Sleep - " + metaData.getFlvRecordingMetaDataId());
-                                               
-                                               metaData = 
flvRecordingMetaDataDaoImpl.get(metaData.getFlvRecordingMetaDataId());
+                                               metaData = 
flvRecordingMetaDataDaoImpl.get(metaId);
                                                
                                                if 
(metaData.getStreamReaderThreadComplete()) {
                                                        log.debug("### Stream 
now written Thread continue - " );
@@ -200,8 +199,7 @@ public abstract class BaseConverter {
        
                                        // Fix Start/End in Audio
                                        List<FlvRecordingMetaDelta> 
flvRecordingMetaDeltas = flvRecordingMetaDeltaDaoImpl
-                                                       
.getFlvRecordingMetaDeltaByMetaId(metaData
-                                                                       
.getFlvRecordingMetaDataId());
+                                                       
.getFlvRecordingMetaDeltaByMetaId(metaId);
        
                                        int counter = 0;
        

Modified: 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1560068&r1=1560067&r2=1560068&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
 Tue Jan 21 16:29:38 2014
@@ -120,7 +120,7 @@ public abstract class BaseStreamWriter i
                                CachedEvent item = queue.poll(100, 
TimeUnit.MICROSECONDS);
                                if (item != null) {
                                        if (dostopping) {
-                                               log.debug("Recording stopped 
but still packets to write to file!");
+                                               log.debug("metadatId: {} :: 
Recording stopped but still packets to write to file!", metaDataId);
                                        }
 
                                        packetReceived(item);

Modified: 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java?rev=1560068&r1=1560067&r2=1560068&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
 Tue Jan 21 16:29:38 2014
@@ -21,9 +21,9 @@ package org.apache.openmeetings.remote;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.Date;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import 
org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverterTask;
 import 
org.apache.openmeetings.data.flvrecord.converter.FlvInterviewReConverterTask;
@@ -64,7 +64,7 @@ public class FLVRecorderService implemen
         * red5 stream object might be gone when the user closes the browser. 
But each listener has an asynchronous
         * component that needs to be closed no matter how the user leaves the 
application!
         */
-       private static final Map<Long, StreamListener> streamListeners = new 
HashMap<Long, StreamListener>();
+       private static final Map<Long, StreamListener> streamListeners = new 
ConcurrentHashMap<Long, StreamListener>();
 
        // Spring Beans
        @Autowired
@@ -161,8 +161,7 @@ public class FLVRecorderService implemen
                                                        
((IServiceCapableConnection) conn).invoke("startedRecording", new Object[] { 
currentClient }, this);
                                                }
 
-                                               // If its the recording client 
we need another type
-                                               // of Meta Data
+                                               // If its the recording client 
we need another type of Meta Data
                                                if (rcl.getIsScreenClient()) {
                                                        if 
(rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
                                                                String 
streamName_Screen = generateFileName(flvRecordingId, 
rcl.getStreamPublishName().toString());

Modified: 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java?rev=1560068&r1=1560067&r2=1560068&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
 Tue Jan 21 16:29:38 2014
@@ -497,21 +497,17 @@ public class ScopeApplicationAdapter ext
        @Override
        public void roomLeave(IClient client, IScope room) {
                try {
+                       log.debug(String.format("roomLeave %s %s %s %s", 
client.getId(), room.getClients().size()
+                                       , room.getContextPath(), 
room.getName()));
 
-                       log.debug("roomLeave " + client.getId() + " "
-                                       + room.getClients().size() + " " + 
room.getContextPath()
-                                       + " " + room.getName());
-
-                       Client currentClient = this.sessionManager
-                                       .getClientByStreamId(client.getId(), 
null);
+                       Client currentClient = 
sessionManager.getClientByStreamId(client.getId(), null);
 
                        // The Room Client can be null if the Client left the 
room by using
                        // logicalRoomLeave
                        if (currentClient != null) {
                                log.debug("currentClient IS NOT NULL");
-                               this.roomLeaveByScope(currentClient, room, 
true);
+                               roomLeaveByScope(currentClient, room, true);
                        }
-
                } catch (Exception err) {
                        log.error("[roomLeave]", err);
                }
@@ -534,11 +530,9 @@ public class ScopeApplicationAdapter ext
 
                        log.debug(streamid + " is leaving");
 
-                       Client currentClient = this.sessionManager
-                                       .getClientByStreamId(streamid, null);
-
-                       this.roomLeaveByScope(currentClient, 
current.getScope(), true);
+                       Client currentClient = 
sessionManager.getClientByStreamId(streamid, null);
 
+                       roomLeaveByScope(currentClient, current.getScope(), 
true);
                } catch (Exception err) {
                        log.error("[logicalRoomLeave]", err);
                }
@@ -557,10 +551,7 @@ public class ScopeApplicationAdapter ext
        public synchronized void roomLeaveByScope(Client currentClient,
                        IScope currentScope, boolean removeUserFromSessionList) 
{
                try {
-
                        log.debug("currentClient " + currentClient);
-                       log.debug("currentScope " + currentScope);
-                       // log.debug("currentClient 
"+currentClient.getRoom_id());
 
                        Long room_id = currentClient.getRoom_id();
 
@@ -606,7 +597,6 @@ public class ScopeApplicationAdapter ext
                                for (Set<IConnection> conset : 
currentScope.getConnections()) {
                                for (IConnection cons : conset) {
                                        if (cons != null && cons instanceof 
IServiceCapableConnection) {
-
                                                log.debug("sending 
roomDisconnect to {}  client id {}", cons, cons.getClient().getId());
 
                                                Client rcl = 
sessionManager.getClientByStreamId(cons.getClient().getId(), null);
@@ -615,46 +605,45 @@ public class ScopeApplicationAdapter ext
                                                 * Check if the Client does 
still exist on the
                                                 * list
                                                 */
-                                               if (rcl != null) {
-
-                                                       /*
-                                                        * Do not send back to 
sender, but actually
-                                                        * all other clients 
should receive this
-                                                        * message swagner 
01.10.2009
-                                                        */
-                                                       if 
(!currentClient.getStreamid().equals(rcl.getStreamid())) {
-                                                               
-                                                               // add 
Notification if another user isrecording
-                                                               
log.debug("###########[roomLeave]");
-                                                               if 
(rcl.getIsRecording()) {
-                                                                       
log.debug("*** roomLeave Any Client is Recording - stop that");
-                                                                       
flvRecorderService.stopRecordingShowForClient(cons, currentClient);
-                                                               }
-                                                               
-                                                               //If the user 
was a avclient, we do not broadcast a message about that to everybody
-                                                               if 
(currentClient.getIsAVClient()) {
-                                                                       
continue;
-                                                               }
-                                                               
-                                                               boolean 
isScreen = rcl.getIsScreenClient() != null && rcl.getIsScreenClient();
-                                                               if (isScreen && 
currentClient.getPublicSID().equals(rcl.getStreamPublishName())) {
-                                                                       //going 
to terminate screen sharing started by this client
-                                                                       
((IServiceCapableConnection) cons).invoke("stopStream", new Object[] { },this);
-                                                                       
continue;
-                                                               } else if 
(isScreen) {
-                                                                       // 
screen sharing clients do not receive events
-                                                                       
continue;
-                                                               } else if 
(rcl.getIsAVClient()) {
-                                                                       // 
AVClients or potential AVClients do not receive events
-                                                                       
continue;
-                                                               }
-                                                               
-                                                               // Send to all 
connected users
-                                                               
((IServiceCapableConnection) cons).invoke("roomDisconnect", new Object[] { 
currentClient },this);
-                                                               
log.debug("sending roomDisconnect to " + cons);
-                                                       }
-                                               } else {
+                                               if (rcl == null) {
                                                        log.debug("For this 
StreamId: " + cons.getClient().getId() + " There is no Client in the List 
anymore");
+                                                       continue;
+                                               }
+                                               
+                                               /*
+                                                * Do not send back to sender, 
but actually
+                                                * all other clients should 
receive this
+                                                * message swagner 01.10.2009
+                                                */
+                                               if 
(!currentClient.getStreamid().equals(rcl.getStreamid())) {
+                                                       // add Notification if 
another user isrecording
+                                                       
log.debug("###########[roomLeave]");
+                                                       if 
(rcl.getIsRecording()) {
+                                                               log.debug("*** 
roomLeave Any Client is Recording - stop that");
+                                                               
flvRecorderService.stopRecordingShowForClient(cons, currentClient);
+                                                       }
+                                                       
+                                                       //If the user was a 
avclient, we do not broadcast a message about that to everybody
+                                                       if 
(currentClient.getIsAVClient()) {
+                                                               continue;
+                                                       }
+                                                       
+                                                       boolean isScreen = 
rcl.getIsScreenClient() != null && rcl.getIsScreenClient();
+                                                       if (isScreen && 
currentClient.getPublicSID().equals(rcl.getStreamPublishName())) {
+                                                               //going to 
terminate screen sharing started by this client
+                                                               
((IServiceCapableConnection) cons).invoke("stopStream", new Object[] { },this);
+                                                               continue;
+                                                       } else if (isScreen) {
+                                                               // screen 
sharing clients do not receive events
+                                                               continue;
+                                                       } else if 
(rcl.getIsAVClient()) {
+                                                               // AVClients or 
potential AVClients do not receive events
+                                                               continue;
+                                                       }
+                                                       
+                                                       // Send to all 
connected users
+                                                       
((IServiceCapableConnection) cons).invoke("roomDisconnect", new Object[] { 
currentClient },this);
+                                                       log.debug("sending 
roomDisconnect to " + cons);
                                                }
                                        }
                                }
@@ -2374,25 +2363,19 @@ public class ScopeApplicationAdapter ext
         */
        public synchronized Boolean getInterviewRecordingStatus() {
                try {
-
                        IConnection current = Red5.getConnectionLocal();
 
                        for (Set<IConnection> conset : 
current.getScope().getConnections()) {
-                       for (IConnection conn : conset) {
-                               if (conn != null) {
-
-                                       Client rcl = this.sessionManager
-                                                       
.getClientByStreamId(conn.getClient().getId(),
-                                                                       null);
-
-                                       if (rcl.getIsRecording() != null
-                                                       && 
rcl.getIsRecording()) {
-                                               return true;
+                               for (IConnection conn : conset) {
+                                       if (conn != null) {
+                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+       
+                                               if (rcl.getIsRecording() != 
null && rcl.getIsRecording()) {
+                                                       return true;
+                                               }
                                        }
-
                                }
                        }
-                       }
                        return false;
                } catch (Exception err) {
                        log.error("[getInterviewRecordingStatus]", err);
@@ -2412,61 +2395,50 @@ public class ScopeApplicationAdapter ext
 
                        Collection<Set<IConnection>> concolset = 
current.getScope().getConnections();
                        for (Set<IConnection> conset : concolset) {
-                       for (IConnection conn : conset) {
-                               if (conn != null) {
-
-                                       Client rcl = this.sessionManager
-                                                       
.getClientByStreamId(conn.getClient().getId(), null);
-
-                                       if (rcl.getIsRecording() != null
-                                                       && 
rcl.getIsRecording()) {
-                                               return false;
+                               for (IConnection conn : conset) {
+                                       if (conn != null) {
+                                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+       
+                                               if (rcl.getIsRecording() != 
null && rcl.getIsRecording()) {
+                                                       return false;
+                                               }
                                        }
-
                                }
                        }
-                       }
-                       Client current_rcl = this.sessionManager
-                                       
.getClientByStreamId(current.getClient().getId(), null);
+                       Client current_rcl = 
sessionManager.getClientByStreamId(current.getClient().getId(), null);
 
                        // Also set the Recording Flag to Record all 
Participants that enter
                        // later
                        current_rcl.setIsRecording(true);
-                       
this.sessionManager.updateClientByStreamId(current.getClient()
-                                       .getId(), current_rcl, false, null);
+                       
sessionManager.updateClientByStreamId(current.getClient().getId(), current_rcl, 
false, null);
 
                        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;
+                               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);
                                        }
-
-                                       ((IServiceCapableConnection) 
conn).invoke(
-                                                       "interviewStatus",
-                                                       new Object[] { 
interviewStatus }, this);
-                                       log.debug("-- interviewStatus" + 
interviewStatus);
-
                                }
                        }
-                       }
-                       String recordingName = "Interview "
-                                       + 
CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
+                       String recordingName = "Interview " + 
CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
 
-                       this.flvRecorderService
-                                       .recordMeetingStream(recordingName, "", 
true);
+                       flvRecorderService.recordMeetingStream(recordingName, 
"", true);
 
                        return true;
-
                } catch (Exception err) {
                        log.debug("[startInterviewRecording]", err);
                }


Reply via email to