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);
}