log.debug("** stopRecordingShow: " + conn);
log.debug("### Stop recording show for broadcastId: " + broadcastId + " || " + conn.getScope().getContextPath());
Object streamToClose = scopeApplicationAdapter.getBroadcastStream(conn.getScope(), broadcastId);
StreamListener listenerAdapter = streamListeners.get(metaId);
log.debug("Stream Closing :: " + metaId);
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);
}
}
}
FlvRecordingMetaData metaData = metaDataDao.get(metaId);
BaseConverter.printMetaInfo(metaData, "Stopping the stream");
// 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
Status s = metaData.getStreamStatus();
if (Status.NONE == s) {
log.debug("Stream was not started, no need to stop :: stream with id " + metaId);
} else {
metaData.setStreamStatus(listenerAdapter == null && s == Status.STARTED ? Status.STOPPED : Status.STOPPING);
log.debug("Stopping the stream :: New status == " + metaData.getStreamStatus());
}
metaDataDao.update(metaData);
if (listenerAdapter == null) {
log.debug("Stream Not Found :: " + metaId);
log.debug("Available Streams :: " + streamListeners.size());
for (Long entryKey : streamListeners.keySet()) {
log.debug("Stored flvRecordingMetaDataId in Map: " + entryKey);
}
throw new IllegalStateException("Could not find Listener to stop! flvRecordingMetaDataId " + metaId);
}
listenerAdapter.closeStream();
streamListeners.remove(metaId);
} catch (Exception err) {
log.error("[stopRecordingShow]", err);
}