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