Author: sebawagner
Date: Sat Jun 2 14:29:01 2012
New Revision: 1345512
URL: http://svn.apache.org/viewvc?rev=1345512&view=rev
Log:
OPENMEETINGS-270 Workaround to manually finish the recording in case of issues
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java?rev=1345512&r1=1345511&r2=1345512&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java
Sat Jun 2 14:29:01 2012
@@ -47,6 +47,7 @@ import org.openmeetings.app.data.user.Us
import org.openmeetings.app.data.user.dao.UsersDaoImpl;
import org.openmeetings.app.persistence.beans.flvrecord.FlvRecording;
import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingLog;
+import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaData;
import org.openmeetings.app.remote.red5.ClientListManager;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.utils.math.CalendarPatterns;
@@ -106,6 +107,8 @@ public class FLVRecorderService implemen
private AuthLevelmanagement authLevelManagement;
@Autowired
private FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao;
+ @Autowired
+ private FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDaoImpl = null;
public void resultReceived(IPendingServiceCall arg0) {
}
@@ -385,35 +388,44 @@ public class FLVRecorderService implemen
log.debug("Stream Closing :: " +
flvRecordingMetaDataId);
+ ClientBroadcastStream stream = (ClientBroadcastStream)
streamToClose;
+
+ //the stream can be null if the user just closes the
browser
+ //without canceling the recording before leaving
+ if (stream != null) {
+ //Iterate through all stream listeners and stop
the appropriate
+ if (stream.getStreamListeners() != null) {
+
+ for (IStreamListener iStreamListener :
stream
+ .getStreamListeners()) {
+
stream.removeStreamListener(iStreamListener);
+ }
+ }
+ }
+
if (listenerAdapter == null) {
log.debug("Stream Not Found :: " +
flvRecordingMetaDataId);
- log.debug("Available Stream :: ");
+ log.debug("Available Streams ::
"+streamListeners.size());
for (Long entryKey : streamListeners.keySet()) {
log.debug("Stored
flvRecordingMetaDataId in Map: "+ entryKey);
}
+ //Manually call finish on the stream so that
there is no endless loop waiting
+ //in the FlvRecorderConverter waiting for the
stream to finish
+ //this would normally happen in the Listener
+ FlvRecordingMetaData flvRecordingMetaData =
flvRecordingMetaDataDaoImpl.
+
getFlvRecordingMetaDataById(flvRecordingMetaDataId);
+
flvRecordingMetaData.setStreamReaderThreadComplete(true);
+
flvRecordingMetaDataDaoImpl.updateFlvRecordingMetaData(flvRecordingMetaData);
+
throw new IllegalStateException("Could not find
Listener to stop! flvRecordingMetaDataId "+flvRecordingMetaDataId);
}
listenerAdapter.closeStream();
streamListeners.remove(flvRecordingMetaDataId);
-
- ClientBroadcastStream stream = (ClientBroadcastStream)
streamToClose;
-
- //the stream can be null if the user just closes the
browser without canceling the
- //recording before leaving
- if (stream != null) {
- //Iterate through all stream listeners and stop
the appropriate
- if (stream.getStreamListeners() != null) {
-
- for (IStreamListener iStreamListener :
stream
- .getStreamListeners()) {
-
stream.removeStreamListener(iStreamListener);
- }
- }
- }
+
} catch (Exception err) {
log.error("[stopRecordingShow]", err);