You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2014/06/19 06:30:39 UTC

svn commit: r1603707 - in /openmeetings: branches/3.0.x/WebContent/src/base/hibernate/ branches/3.0.x/WebContent/src/modules/conference/moderation/ branches/3.0.x/src/main/java/org/apache/openmeetings/data/flvrecord/listener/ branches/3.0.x/src/main/ja...

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) {