You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by se...@apache.org on 2012/04/14 14:01:21 UTC
svn commit: r1326089 - in
/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app:
conference/session/ data/flvrecord/converter/ data/flvrecord/listener/
data/flvrecord/listener/async/ persistence/beans/adresses/
persistence/beans/flvrecord...
Author: sebawagner
Date: Sat Apr 14 12:01:18 2012
New Revision: 1326089
URL: http://svn.apache.org/viewvc?rev=1326089&view=rev
Log:
OPENMEETINGS-165 Records the video asynchronous with queuing for the audio stream
Added:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/BaseStreamWriter.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/CachedEvent.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/StreamAudioWriter.java
Removed:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamTranscodingListener.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/conference/session/RoomClient.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/converter/BaseConverter.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/ListenerAdapter.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamAudioListener.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamScreenListener.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/adresses/States.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaData.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaDelta.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/FLVRecorderService.java
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/conference/session/RoomClient.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/conference/session/RoomClient.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/conference/session/RoomClient.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/conference/session/RoomClient.java Sat Apr 14 12:01:18 2012
@@ -200,12 +200,6 @@ public class RoomClient implements Seria
this.lastname = lastname;
}
- /**
- *
- * @hibernate.id
- * column="roomclient_id"
- * generator-class="increment"
- */
public Long getRoomClientId() {
return roomClientId;
}
@@ -213,11 +207,6 @@ public class RoomClient implements Seria
this.roomClientId = roomClientId;
}
- /**
- * @hibernate.property
- * column="connected_since"
- * type="java.util.Date"
- */
public Date getConnectedSince() {
return connectedSince;
}
@@ -225,11 +214,6 @@ public class RoomClient implements Seria
this.connectedSince = connectedSince;
}
- /**
- * @hibernate.property
- * column="is_mod"
- * type="boolean"
- */
public Boolean getIsMod() {
return isMod;
}
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/converter/BaseConverter.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/converter/BaseConverter.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/converter/BaseConverter.java Sat Apr 14 12:01:18 2012
@@ -155,6 +155,31 @@ public abstract class BaseConverter {
log.debug("###################################################");
for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {
+
+ if (flvRecordingMetaData.getStreamReaderThreadComplete() == null) {
+ throw new Exception("StreamReaderThreadComplete Bit is NULL, error in recording");
+ }
+
+ if (flvRecordingMetaData.getStreamReaderThreadComplete()) {
+
+ log.debug("### meta Stream not yet written to disk" + flvRecordingMetaData.getFlvRecordingMetaDataId());
+ boolean doStop = true;
+ while(doStop) {
+
+ log.debug("### Stream not yet written Thread Sleep - " );
+
+ Thread.sleep(100L);
+
+ flvRecordingMetaData = flvRecordingMetaDataDaoImpl.getFlvRecordingMetaDataById(flvRecordingMetaData.getFlvRecordingMetaDataId());
+
+ if (flvRecordingMetaData.getStreamReaderThreadComplete()) {
+ log.debug("### Stream now written Thread continue - " );
+ doStop = false;
+ }
+
+ }
+
+ }
String inputFlv = streamFolderName
+ flvRecordingMetaData.getStreamName() + ".flv";
@@ -199,11 +224,11 @@ public abstract class BaseConverter {
}
if (flvRecordingMetaData.getAudioIsValid()) {
-
+
// Strip Wave to Full Length
String outputGapFullWav = outputWav;
- // Fix Gaps in Audio
+ // Fix Start/End in Audio
List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = flvRecordingMetaDeltaDaoImpl
.getFlvRecordingMetaDeltaByMetaId(flvRecordingMetaData
.getFlvRecordingMetaDataId());
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/ListenerAdapter.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/ListenerAdapter.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/ListenerAdapter.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/ListenerAdapter.java Sat Apr 14 12:01:18 2012
@@ -36,7 +36,7 @@ import org.red5.server.api.stream.IBroad
import org.red5.server.api.stream.IStreamListener;
import org.red5.server.api.stream.IStreamPacket;
-public class ListenerAdapter implements IStreamListener {
+public abstract class ListenerAdapter implements IStreamListener {
protected ITagWriter writer = null;
@@ -76,14 +76,7 @@ public class ListenerAdapter implements
return flvRecordingMetaDataId;
}
- public void packetReceived(IBroadcastStream arg0, IStreamPacket arg1) {
- // Auto-generated method stub
-
- }
-
- public void closeStream() throws Exception {
- // Auto-generated method stub
- }
+ public abstract void closeStream();
/**
* Initialization
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamAudioListener.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamAudioListener.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamAudioListener.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamAudioListener.java Sat Apr 14 12:01:18 2012
@@ -18,17 +18,13 @@
*/
package org.openmeetings.app.data.flvrecord.listener;
-import java.io.File;
-import java.io.IOException;
import java.util.Date;
-import org.apache.mina.core.buffer.IoBuffer;
import org.openmeetings.app.OpenmeetingsVariables;
+import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDataDaoImpl;
import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDeltaDaoImpl;
-import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaDelta;
-import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
-import org.red5.io.ITag;
-import org.red5.io.flv.impl.Tag;
+import org.openmeetings.app.data.flvrecord.listener.async.CachedEvent;
+import org.openmeetings.app.data.flvrecord.listener.async.StreamAudioWriter;
import org.red5.logging.Red5LoggerFactory;
import org.red5.server.api.IScope;
import org.red5.server.api.stream.IBroadcastStream;
@@ -37,384 +33,44 @@ import org.slf4j.Logger;
public class StreamAudioListener extends ListenerAdapter {
- private int startTimeStamp = -1;
-
- private long initialDelta = 0;
-
- private Integer lastTimeStamp = -1;
-
- private int lastStreamPacketTimeStamp = -1;
-
- private long byteCount = 0;
-
- private int duration = 0;
-
private static final Logger log = Red5LoggerFactory.getLogger(
StreamAudioListener.class, OpenmeetingsVariables.webAppRootKey);
- // Autowire is not possible
- private final FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao;
+ private final StreamAudioWriter streamAudioWriter;
public StreamAudioListener(String streamName, IScope scope,
Long flvRecordingMetaDataId, boolean isScreenData,
boolean isInterview,
- FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao) {
+ FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao,
+ FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao) {
// Auto-generated method stub
super(streamName, scope, flvRecordingMetaDataId, isScreenData,
isInterview);
- this.flvRecordingMetaDeltaDao = flvRecordingMetaDeltaDao;
+ streamAudioWriter = new StreamAudioWriter(streamName, scope,
+ flvRecordingMetaDataId, isScreenData, isInterview,
+ flvRecordingMetaDeltaDao, flvRecordingMetaDataDao);
}
- public void streamResetEvent() {
-
- try {
-
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
-
- flvRecordingMetaDelta.setDeltaTime(0L);
- flvRecordingMetaDelta
- .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(0);
- flvRecordingMetaDelta.setDebugStatus("RESET TYPE :: ");
- flvRecordingMetaDelta.setIsStartPadding(true);
- flvRecordingMetaDelta.setIsEndPadding(false);
- flvRecordingMetaDelta.setDataLengthPacket(0);
- flvRecordingMetaDelta.setReceivedAudioDataLength(this.byteCount);
- flvRecordingMetaDelta.setStartTime(this.startedSessionTimeDate);
- flvRecordingMetaDelta.setStreamCreationTime(null);
- flvRecordingMetaDelta.setStreamCreationTimeDate(null);
- flvRecordingMetaDelta.setPacketTimeStamp(lastTimeStamp);
-
- Date current_date = new Date();
- Long deltaTimeStamp = current_date.getTime()
- - this.startedSessionTimeDate.getTime();
-
- // this.duration = Math.max(this.duration, 0 +
- // this.writer.getOffset());
- flvRecordingMetaDelta.setDuration(0);
-
- Long missingTime = deltaTimeStamp - 0;
-
- flvRecordingMetaDelta.setMissingTime(missingTime);
-
- flvRecordingMetaDelta.setCurrentTime(current_date);
- flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
- flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
-
- this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
-
- flvRecordingMetaDeltaDao
- .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
-
- this.offset += lastTimeStamp;
-
- } catch (Exception e) {
- log.error("[packetReceived]", e);
- }
-
- }
-
- @Override
public void packetReceived(IBroadcastStream broadcastStream,
IStreamPacket streampacket) {
try {
- // //Here we handle Reseted timestamps!
- // if (startTimeStamp != -1) {
- //
- // long deltaTimeBetweenTimeStampes = purePacketLastTimeStamp -
- // streampacket.getTimestamp();
- //
- // System.out.println("deltaTimeBetweenTimeStampes "+deltaTimeBetweenTimeStampes);
- //
- // if (deltaTimeBetweenTimeStampes < -100) {
- //
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("We have detected a Reset in the TimeStamps!");
- //
- // System.out.println("streampacket.getTimestamp() :: "+streampacket.getTimestamp());
- // System.out.println("purePacketLastTimeStamp :: "+purePacketLastTimeStamp);
- // System.out.println("startTimeStamp :: "+startTimeStamp);
- //
- // int debugTimeStamp = purePacketLastTimeStamp - startTimeStamp;
- //
- // System.out.println("debugTimeStamp :: "+debugTimeStamp);
- // System.out.println("offset :: "+offset);
- //
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- // log.debug("############################################");
- //
- // this.offset += debugTimeStamp;
- //
- // }
- // purePacketLastTimeStamp = streampacket.getTimestamp();
- // }
-
- // log.debug("streampacket.getTimestamp() :: "+streampacket.getTimestamp());
-
- // We only care about audio at this moment
- if (streampacket.getDataType() == 8) {
-
- if (this.isClosed) {
- // Already closed this One
- return;
- }
-
- if (streampacket.getTimestamp() <= 0) {
- log.warn("Negative TimeStamp");
- return;
- }
-
- IoBuffer data = streampacket.getData().asReadOnlyBuffer();
-
- if (data.limit() == 0) {
- return;
- }
-
- this.byteCount += data.limit();
-
- if (startTimeStamp == -1) {
-
- // Calculate the delta between the initial start and the
- // first audio-packet data
-
- this.initialDelta = new Date().getTime()
- - this.startedSessionTimeDate.getTime();
-
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
-
- flvRecordingMetaDelta.setDeltaTime(this.initialDelta);
- flvRecordingMetaDelta
- .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(0);
- flvRecordingMetaDelta.setDebugStatus("INIT AUDIO");
- flvRecordingMetaDelta.setOffset(this.offset);
- flvRecordingMetaDelta.setIsStartPadding(true);
- flvRecordingMetaDelta.setIsEndPadding(false);
- flvRecordingMetaDelta.setDataLengthPacket(data.limit());
- flvRecordingMetaDelta
- .setReceivedAudioDataLength(this.byteCount);
- flvRecordingMetaDelta
- .setStartTime(this.startedSessionTimeDate);
- flvRecordingMetaDelta.setStreamCreationTime(broadcastStream
- .getCreationTime());
- flvRecordingMetaDelta.setStreamCreationTimeDate(new Date(
- broadcastStream.getCreationTime()));
- flvRecordingMetaDelta.setPacketTimeStamp(streampacket
- .getTimestamp());
-
- Date current_date = new Date();
- Long deltaTimeStamp = current_date.getTime()
- - this.startedSessionTimeDate.getTime();
-
- // this.duration = Math.max(this.duration, 0 +
- // this.writer.getOffset());
- flvRecordingMetaDelta.setDuration(0);
-
- Long missingTime = deltaTimeStamp - 0;
-
- flvRecordingMetaDelta.setMissingTime(missingTime);
-
- flvRecordingMetaDelta.setCurrentTime(current_date);
- flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
- flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
-
- this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
-
- flvRecordingMetaDeltaDao
- .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
-
- // That will be not bigger then long value
- this.startTimeStamp = (streampacket.getTimestamp());
-
- // We have to set that to bypass the initial delta
- // lastTimeStamp = startTimeStamp;
- }
-
- if (writer == null) {
-
- File folder = new File(ScopeApplicationAdapter.webAppPath
- + File.separatorChar + "streams"
- + File.separatorChar + this.scope.getName());
-
- if (!folder.exists()) {
- folder.mkdir();
- }
-
- String flvName = ScopeApplicationAdapter.webAppPath
- + File.separatorChar + "streams"
- + File.separatorChar + this.scope.getName()
- + File.separatorChar + this.streamName + ".flv";
-
- file = new File(flvName);
- init();
- }
-
- int timeStamp = streampacket.getTimestamp();
-
- this.lastStreamPacketTimeStamp = streampacket.getTimestamp();
-
- timeStamp -= this.startTimeStamp;
-
- timeStamp += this.offset;
-
- long deltaTime = 0;
- if (lastTimeStamp == -1) {
- deltaTime = 0; // Offset at the beginning is calculated
- // above
- } else {
- deltaTime = timeStamp - lastTimeStamp;
- }
-
- Long preLastTimeStamp = Long
- .parseLong(lastTimeStamp.toString());
-
- lastTimeStamp = timeStamp;
-
- if (deltaTime > 75) {
-
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
-
- flvRecordingMetaDelta.setDeltaTime(deltaTime);
- flvRecordingMetaDelta
- .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(timeStamp);
- flvRecordingMetaDelta.setDebugStatus("RUN AUDIO");
- flvRecordingMetaDelta.setIsStartPadding(false);
- flvRecordingMetaDelta.setLastTimeStamp(preLastTimeStamp);
- flvRecordingMetaDelta.setOffset(this.offset);
- flvRecordingMetaDelta.setIsEndPadding(false);
- flvRecordingMetaDelta.setDataLengthPacket(data.limit());
- flvRecordingMetaDelta
- .setReceivedAudioDataLength(this.byteCount);
- flvRecordingMetaDelta
- .setStartTime(this.startedSessionTimeDate);
- flvRecordingMetaDelta.setStreamCreationTime(broadcastStream
- .getCreationTime());
- flvRecordingMetaDelta.setStreamCreationTimeDate(new Date(
- broadcastStream.getCreationTime()));
- flvRecordingMetaDelta.setPacketTimeStamp(streampacket
- .getTimestamp());
-
- Date current_date = new Date();
- Long deltaTimeStamp = current_date.getTime()
- - this.startedSessionTimeDate.getTime();
-
- this.duration = Math.max(this.duration, timeStamp
- + this.writer.getOffset());
- flvRecordingMetaDelta.setDuration(this.duration);
-
- Long missingTime = deltaTimeStamp - timeStamp;
-
- flvRecordingMetaDelta.setMissingTime(missingTime);
-
- flvRecordingMetaDelta.setCurrentTime(current_date);
- flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
- flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
-
- this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
-
- flvRecordingMetaDeltaDao
- .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
-
- }
-
- ITag tag = new Tag();
- tag.setDataType(streampacket.getDataType());
-
- // log.debug("data.limit() :: "+data.limit());
- tag.setBodySize(data.limit());
- tag.setTimestamp(timeStamp);
- tag.setBody(data);
-
- if (this.isClosed) {
- throw new Exception("Stream was already closed");
- }
-
- writer.writeTag(tag);
+ CachedEvent cachedEvent = new CachedEvent();
+ cachedEvent.setData(streampacket.getData().duplicate());
+ cachedEvent.setDataType(streampacket.getDataType());
+ cachedEvent.setTimestamp(streampacket.getTimestamp());
+ cachedEvent.setCurrentTime(new Date());
- }
+ streamAudioWriter.append(cachedEvent);
- } catch (IOException e) {
- log.error("[packetReceived]", e);
} catch (Exception e) {
log.error("[packetReceived]", e);
}
}
@Override
- public void closeStream() throws Exception {
- if (writer != null && !this.isClosed) {
- try {
-
- log.debug("#################### -start- closeStream ########################");
- log.debug("#################### -start- closeStream ########################");
-
- writer.close();
-
- this.isClosed = true;
-
- // We do not add any End Padding or count the gaps for the
- // Screen Data,
- // cause there is no!
-
- long deltaRecordingTime = new Date().getTime()
- - this.startedSessionTimeDate.getTime();
-
- log.debug("lastTimeStamp :: " + this.lastTimeStamp);
- log.debug("lastStreamPacketTimeStamp :: "
- + this.lastStreamPacketTimeStamp);
- log.debug("deltaRecordingTime :: " + deltaRecordingTime);
-
- long deltaTimePaddingEnd = deltaRecordingTime
- - this.lastTimeStamp - this.initialDelta;
-
- log.debug("deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
-
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
-
- flvRecordingMetaDelta.setDeltaTime(deltaTimePaddingEnd);
- flvRecordingMetaDelta
- .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(this.lastTimeStamp);
- flvRecordingMetaDelta.setDebugStatus("END AUDIO");
- flvRecordingMetaDelta.setIsStartPadding(false);
- flvRecordingMetaDelta.setIsEndPadding(true);
- flvRecordingMetaDelta.setDataLengthPacket(null);
- flvRecordingMetaDelta
- .setReceivedAudioDataLength(this.byteCount);
- flvRecordingMetaDelta.setStartTime(this.startedSessionTimeDate);
- flvRecordingMetaDelta.setCurrentTime(new Date());
-
- this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
-
- flvRecordingMetaDeltaDao
- .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
-
- // for (FlvRecordingMetaDelta flvRecordingMetaDeltaLoop :
- // this.flvRecordingMetaDeltas) {
- //
- // flvRecordingMetaDeltaDao.addFlvRecordingMetaDelta(flvRecordingMetaDeltaLoop);
- //
- // }
-
- } catch (Exception err) {
- log.error("[closeStream]", err);
- }
- log.debug("#################### -end- closeStream ########################");
- log.debug("#################### -end- closeStream ########################");
- }
+ public void closeStream() {
+ streamAudioWriter.stop();
}
}
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamScreenListener.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamScreenListener.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamScreenListener.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/StreamScreenListener.java Sat Apr 14 12:01:18 2012
@@ -59,7 +59,6 @@ public class StreamScreenListener extend
this.flvRecordingMetaDataDao = flvRecordingMetaDataDao;
}
- @Override
public void packetReceived(IBroadcastStream broadcastStream,
IStreamPacket streampacket) {
try {
@@ -163,7 +162,7 @@ public class StreamScreenListener extend
}
@Override
- public void closeStream() throws Exception {
+ public void closeStream() {
if (writer != null && !this.isClosed) {
try {
Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/BaseStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1326089&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/BaseStreamWriter.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/BaseStreamWriter.java Sat Apr 14 12:01:18 2012
@@ -0,0 +1,189 @@
+package org.openmeetings.app.data.flvrecord.listener.async;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.openmeetings.app.OpenmeetingsVariables;
+import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDataDaoImpl;
+import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDeltaDaoImpl;
+import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaDelta;
+import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
+import org.red5.io.IStreamableFile;
+import org.red5.io.IStreamableFileFactory;
+import org.red5.io.IStreamableFileService;
+import org.red5.io.ITagWriter;
+import org.red5.io.StreamableFileFactory;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IScope;
+import org.red5.server.api.ScopeUtils;
+import org.slf4j.Logger;
+
+public abstract class BaseStreamWriter implements Runnable {
+
+ private static final Logger log = Red5LoggerFactory.getLogger(
+ BaseStreamWriter.class, OpenmeetingsVariables.webAppRootKey);
+
+ // thread is running
+ private boolean running = false;
+ // thread is stopped
+ private boolean stopping = false;
+ // thread will be stopped as soon as the queue is empty
+ private boolean dostopping = false;
+
+ protected ITagWriter writer = null;
+
+ protected Long flvRecordingMetaDataId = null;
+ protected List<FlvRecordingMetaDelta> flvRecordingMetaDeltas;
+
+ protected Date startedSessionTimeDate = null;
+
+ protected File file;
+
+ protected IScope scope;
+
+ protected boolean isScreenData = false;
+
+ protected String streamName = "";
+
+ protected boolean isInterview;
+
+ private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<CachedEvent>();
+
+ // Autowire is not possible
+ protected final FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao;
+ protected final FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao;
+
+ public BaseStreamWriter(String streamName, IScope scope,
+ Long flvRecordingMetaDataId, boolean isScreenData,
+ boolean isInterview,
+ FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao,
+ FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao) {
+ this.startedSessionTimeDate = new Date();
+ this.isScreenData = isScreenData;
+ this.streamName = streamName;
+ this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+ this.flvRecordingMetaDeltas = new LinkedList<FlvRecordingMetaDelta>();
+ this.scope = scope;
+ this.isInterview = isInterview;
+ this.flvRecordingMetaDeltaDao = flvRecordingMetaDeltaDao;
+ this.flvRecordingMetaDataDao = flvRecordingMetaDataDao;
+ try {
+ init();
+ } catch (IOException ex) {
+ log.error("[StreamAudioWriter] Could not start Thread", ex);
+ }
+ open();
+ }
+
+ /**
+ * Initialization
+ *
+ * @throws IOException
+ * I/O exception
+ */
+ private void init() throws IOException {
+
+ File folder = new File(ScopeApplicationAdapter.webAppPath
+ + File.separatorChar + "streams" + File.separatorChar
+ + this.scope.getName());
+
+ if (!folder.exists()) {
+ folder.mkdir();
+ }
+
+ String flvName = ScopeApplicationAdapter.webAppPath
+ + File.separatorChar + "streams" + File.separatorChar
+ + this.scope.getName() + File.separatorChar + this.streamName
+ + ".flv";
+
+ file = new File(flvName);
+
+ IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
+ .getScopeService(this.scope, IStreamableFileFactory.class,
+ StreamableFileFactory.class);
+
+ // File folder = file.getParentFile();
+
+ if (!folder.exists()) {
+ if (!folder.mkdirs()) {
+ throw new IOException("Could not create parent folder");
+ }
+ }
+
+ if (!this.file.isFile()) {
+
+ // Maybe the (previously existing) file has been deleted
+ this.file.createNewFile();
+
+ } else if (!file.canWrite()) {
+ throw new IOException("The file is read-only");
+ }
+
+ IStreamableFileService service = factory.getService(this.file);
+ IStreamableFile flv = service.getStreamableFile(this.file);
+ this.writer = flv.getWriter();
+
+ }
+
+ private void open() {
+ running = true;
+ new Thread(this).start();
+ }
+
+ public void stop() {
+ dostopping = true;
+ }
+
+ public void run() {
+ while (!stopping) {
+ try {
+ CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
+ if (item != null) {
+
+ if (dostopping) {
+ log.debug("Recording stopped but still packets to write to file!");
+ }
+
+ packetReceived(item);
+ } else if (dostopping) {
+ stopping = true;
+ closeStream();
+ }
+ } catch (InterruptedException e) {
+ log.error("[run]", e);
+ }
+ }
+ }
+
+ /**
+ * Write the actual packet data to the disk and do calculate any needed
+ * additional information
+ *
+ * @param streampacket
+ */
+ public abstract void packetReceived(CachedEvent streampacket);
+
+ /**
+ * called when the stream is finished written on the disk
+ */
+ public abstract void closeStream();
+
+ public void append(CachedEvent streampacket) {
+ if (!running) {
+ throw new IllegalStateException(
+ "Append called before the Thread was started!");
+ }
+ try {
+ queue.put(streampacket);
+ } catch (InterruptedException ignored) {
+ log.error("[append]", ignored);
+ }
+ }
+
+}
Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/CachedEvent.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/CachedEvent.java?rev=1326089&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/CachedEvent.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/CachedEvent.java Sat Apr 14 12:01:18 2012
@@ -0,0 +1,49 @@
+package org.openmeetings.app.data.flvrecord.listener.async;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.api.stream.IStreamPacket;
+
+public class CachedEvent implements IStreamPacket {
+
+ private byte dataType;
+ private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
+ private IoBuffer data;
+ private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
+
+ public Date getCurrentTime() {
+ return currentTime;
+ }
+
+ public void setCurrentTime(Date currentTime) {
+ this.currentTime = currentTime;
+ }
+
+ public void setDataType(byte dataType) {
+ this.dataType = dataType;
+ }
+
+ public void setTimestamp(int timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public void setData(IoBuffer data) {
+ this.data = data;
+ }
+
+ public byte getDataType() {
+ return dataType;
+ }
+
+ public int getTimestamp() {
+ // TODO Auto-generated method stub
+ return timestamp;
+ }
+
+ public IoBuffer getData() {
+ // TODO Auto-generated method stub
+ return data;
+ }
+
+}
Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/StreamAudioWriter.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/StreamAudioWriter.java?rev=1326089&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/StreamAudioWriter.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/listener/async/StreamAudioWriter.java Sat Apr 14 12:01:18 2012
@@ -0,0 +1,259 @@
+package org.openmeetings.app.data.flvrecord.listener.async;
+
+import java.io.IOException;
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.openmeetings.app.OpenmeetingsVariables;
+import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDataDaoImpl;
+import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDeltaDaoImpl;
+import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaData;
+import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaDelta;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IScope;
+import org.slf4j.Logger;
+
+public class StreamAudioWriter extends BaseStreamWriter {
+
+ private static final Logger log = Red5LoggerFactory.getLogger(
+ StreamAudioWriter.class, OpenmeetingsVariables.webAppRootKey);
+
+ private int duration = 0;
+
+ private int startTimeStamp = -1;
+
+ private long initialDelta = 0;
+
+ private Integer lastTimeStamp = -1;
+ private Date lastcurrentTime = null;
+
+ private int lastStreamPacketTimeStamp = -1;
+
+ private long byteCount = 0;
+
+ public StreamAudioWriter(String streamName, IScope scope,
+ Long flvRecordingMetaDataId, boolean isScreenData,
+ boolean isInterview,
+ FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao,
+ FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao) {
+ super(streamName, scope, flvRecordingMetaDataId, isScreenData, isInterview,
+ flvRecordingMetaDeltaDao, flvRecordingMetaDataDao);
+
+ FlvRecordingMetaData flvRecordingMetaData = flvRecordingMetaDataDao.
+ getFlvRecordingMetaDataById(flvRecordingMetaDataId);
+ flvRecordingMetaData.setStreamReaderThreadComplete(false);
+ flvRecordingMetaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+
+ }
+
+ @Override
+ public void packetReceived(CachedEvent streampacket) {
+ try {
+
+ // We only care about audio at this moment
+ if (streampacket.getDataType() == 8) {
+
+ if (streampacket.getTimestamp() <= 0) {
+ log.warn("Negative TimeStamp");
+ return;
+ }
+
+ IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+
+ if (data.limit() == 0) {
+ return;
+ }
+
+ this.byteCount += data.limit();
+
+ lastcurrentTime = streampacket.getCurrentTime();
+ int timeStamp = streampacket.getTimestamp();
+ Date virtualTime = streampacket.getCurrentTime();
+
+ if (startTimeStamp == -1) {
+
+ // Calculate the delta between the initial start and the
+ // first audio-packet data
+
+ this.initialDelta = virtualTime.getTime()
+ - this.startedSessionTimeDate.getTime();
+
+ FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
+
+ flvRecordingMetaDelta.setDeltaTime(this.initialDelta);
+ flvRecordingMetaDelta
+ .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
+ flvRecordingMetaDelta.setTimeStamp(0);
+ flvRecordingMetaDelta.setDebugStatus("INIT AUDIO");
+ flvRecordingMetaDelta.setIsStartPadding(true);
+ flvRecordingMetaDelta.setIsEndPadding(false);
+ flvRecordingMetaDelta.setDataLengthPacket(data.limit());
+ flvRecordingMetaDelta
+ .setReceivedAudioDataLength(this.byteCount);
+ flvRecordingMetaDelta
+ .setStartTime(this.startedSessionTimeDate);
+ flvRecordingMetaDelta.setPacketTimeStamp(streampacket
+ .getTimestamp());
+
+ Long deltaTimeStamp = virtualTime.getTime()
+ - this.startedSessionTimeDate.getTime();
+
+ // this.duration = Math.max(this.duration, 0 +
+ // this.writer.getOffset());
+ flvRecordingMetaDelta.setDuration(0);
+
+ Long missingTime = deltaTimeStamp - 0;
+
+ flvRecordingMetaDelta.setMissingTime(missingTime);
+
+ flvRecordingMetaDelta.setCurrentTime(virtualTime);
+ flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
+
+ this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
+
+ flvRecordingMetaDeltaDao
+ .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+
+ // That will be not bigger then long value
+ this.startTimeStamp = (streampacket.getTimestamp());
+
+ // We have to set that to bypass the initial delta
+ // lastTimeStamp = startTimeStamp;
+ }
+
+
+
+ this.lastStreamPacketTimeStamp = streampacket.getTimestamp();
+
+ timeStamp -= this.startTimeStamp;
+
+ long deltaTime = 0;
+ if (lastTimeStamp == -1) {
+ deltaTime = 0; // Offset at the beginning is calculated
+ // above
+ } else {
+ deltaTime = timeStamp - lastTimeStamp;
+ }
+
+ Long preLastTimeStamp = Long
+ .parseLong(lastTimeStamp.toString());
+
+ lastTimeStamp = timeStamp;
+
+ if (deltaTime > 75) {
+
+ FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
+
+ flvRecordingMetaDelta.setDeltaTime(deltaTime);
+ flvRecordingMetaDelta
+ .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
+ flvRecordingMetaDelta.setTimeStamp(timeStamp);
+ flvRecordingMetaDelta.setDebugStatus("RUN AUDIO");
+ flvRecordingMetaDelta.setIsStartPadding(false);
+ flvRecordingMetaDelta.setLastTimeStamp(preLastTimeStamp);
+ flvRecordingMetaDelta.setIsEndPadding(false);
+ flvRecordingMetaDelta.setDataLengthPacket(data.limit());
+ flvRecordingMetaDelta
+ .setReceivedAudioDataLength(this.byteCount);
+ flvRecordingMetaDelta
+ .setStartTime(this.startedSessionTimeDate);
+ flvRecordingMetaDelta.setPacketTimeStamp(streampacket
+ .getTimestamp());
+
+ Date current_date = new Date();
+ Long deltaTimeStamp = current_date.getTime()
+ - this.startedSessionTimeDate.getTime();
+
+ this.duration = Math.max(this.duration, timeStamp
+ + this.writer.getOffset());
+ flvRecordingMetaDelta.setDuration(this.duration);
+
+ Long missingTime = deltaTimeStamp - timeStamp;
+
+ flvRecordingMetaDelta.setMissingTime(missingTime);
+
+ flvRecordingMetaDelta.setCurrentTime(current_date);
+ flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
+
+ this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
+
+ flvRecordingMetaDeltaDao
+ .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+
+ }
+
+ ITag tag = new Tag();
+ tag.setDataType(streampacket.getDataType());
+
+ // log.debug("data.limit() :: "+data.limit());
+ tag.setBodySize(data.limit());
+ tag.setTimestamp(timeStamp);
+ tag.setBody(data);
+
+ writer.writeTag(tag);
+
+ }
+
+ } catch (IOException e) {
+ log.error("[packetReceived]", e);
+ } catch (Exception e) {
+ log.error("[packetReceived]", e);
+ }
+ }
+
+ @Override
+ public void closeStream() {
+ try {
+
+ writer.close();
+
+ // We do not add any End Padding or count the gaps for the
+ // Screen Data, cause there is no!
+
+ Date virtualTime = lastcurrentTime;
+
+ long deltaRecordingTime = virtualTime.getTime() - this.startedSessionTimeDate.getTime();
+
+ log.debug("lastTimeStamp :closeStream: " + this.lastTimeStamp);
+ log.debug("lastStreamPacketTimeStamp :closeStream: " + this.lastStreamPacketTimeStamp);
+ log.debug("deltaRecordingTime :closeStream: " + deltaRecordingTime);
+
+ long deltaTimePaddingEnd = deltaRecordingTime
+ - this.lastTimeStamp - this.initialDelta;
+
+ log.debug("deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
+
+ FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
+
+ flvRecordingMetaDelta.setDeltaTime(deltaTimePaddingEnd);
+ flvRecordingMetaDelta
+ .setFlvRecordingMetaDataId(this.flvRecordingMetaDataId);
+ flvRecordingMetaDelta.setTimeStamp(this.lastTimeStamp);
+ flvRecordingMetaDelta.setDebugStatus("END AUDIO");
+ flvRecordingMetaDelta.setIsStartPadding(false);
+ flvRecordingMetaDelta.setIsEndPadding(true);
+ flvRecordingMetaDelta.setDataLengthPacket(null);
+ flvRecordingMetaDelta
+ .setReceivedAudioDataLength(this.byteCount);
+ flvRecordingMetaDelta.setStartTime(this.startedSessionTimeDate);
+ flvRecordingMetaDelta.setCurrentTime(new Date());
+
+ this.flvRecordingMetaDeltas.add(flvRecordingMetaDelta);
+
+ flvRecordingMetaDeltaDao
+ .addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+
+ //Write the complete Bit to the meta data, the converter task will wait for this bit!
+ FlvRecordingMetaData flvRecordingMetaData = flvRecordingMetaDataDao.getFlvRecordingMetaDataById(flvRecordingMetaDataId);
+ flvRecordingMetaData.setStreamReaderThreadComplete(true);
+ flvRecordingMetaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+
+ } catch (Exception err) {
+ log.error("[closeStream]", err);
+ }
+ }
+}
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/adresses/States.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/adresses/States.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/adresses/States.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/adresses/States.java Sat Apr 14 12:01:18 2012
@@ -53,11 +53,6 @@ public class States implements Serializa
// TODO Auto-generated constructor stub
}
- /**
- * @hibernate.property
- * column="name"
- * type="string"
- */
public String getName() {
return name;
}
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaData.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaData.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaData.java Sat Apr 14 12:01:18 2012
@@ -21,8 +21,6 @@ package org.openmeetings.app.persistence
import java.io.Serializable;
import java.util.Date;
-
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
@@ -39,6 +37,12 @@ import javax.persistence.Table;
@Table(name = "flvrecording_metadata")
public class FlvRecordingMetaData implements Serializable {
+ public Boolean getStreamReaderThreadComplete() {
+ return streamReaderThreadComplete;
+ }
+ public void setStreamReaderThreadComplete(Boolean streamReaderThreadComplete) {
+ this.streamReaderThreadComplete = streamReaderThreadComplete;
+ }
/**
*
*/
@@ -90,12 +94,11 @@ public class FlvRecordingMetaData implem
@Column(name="initial_gap_seconds")
private Integer initialGapSeconds;
- /**
- *
- * @hibernate.id
- * column="flvrecording_metadata_id"
- * generator-class="increment"
- */
+ //this is only true when the asynchronous stream writer has
+ //completed to write packets to the file
+ @Column(name="stream_reader_thread_complete")
+ private Boolean streamReaderThreadComplete;
+
public long getFlvRecordingMetaDataId() {
return flvRecordingMetaDataId;
}
@@ -103,15 +106,6 @@ public class FlvRecordingMetaData implem
this.flvRecordingMetaDataId = flvRecordingMetaDataId;
}
- /**
- * @hibernate.many-to-one
- * cascade="none"
- * column="flvrecording_id"
- * lazy="false"
- * class="org.openmeetings.app.hibernate.beans.flvrecord.FlvRecording"
- * not-null="false"
- * outer-join="true"
- */
public FlvRecording getFlvRecording() {
return flvRecording;
}
@@ -119,12 +113,6 @@ public class FlvRecordingMetaData implem
this.flvRecording = flvRecording;
}
- /**
- * @hibernate.property
- * column="record_start"
- * update="false"
- * type="java.util.Date"
- */
public Date getRecordStart() {
return recordStart;
}
@@ -132,11 +120,6 @@ public class FlvRecordingMetaData implem
this.recordStart = recordStart;
}
- /**
- * @hibernate.property
- * column="record_end"
- * type="java.util.Date"
- */
public Date getRecordEnd() {
return recordEnd;
}
@@ -144,11 +127,6 @@ public class FlvRecordingMetaData implem
this.recordEnd = recordEnd;
}
- /**
- * @hibernate.property
- * column="free_text_user_name"
- * type="string"
- */
public String getFreeTextUserName() {
return freeTextUserName;
}
@@ -156,11 +134,6 @@ public class FlvRecordingMetaData implem
this.freeTextUserName = freeTextUserName;
}
- /**
- * @hibernate.property
- * column="is_audio_only"
- * type="boolean"
- */
public Boolean getIsAudioOnly() {
return isAudioOnly;
}
@@ -168,11 +141,6 @@ public class FlvRecordingMetaData implem
this.isAudioOnly = isAudioOnly;
}
- /**
- * @hibernate.property
- * column="is_video_only"
- * type="boolean"
- */
public Boolean getIsVideoOnly() {
return isVideoOnly;
}
@@ -180,11 +148,6 @@ public class FlvRecordingMetaData implem
this.isVideoOnly = isVideoOnly;
}
- /**
- * @hibernate.property
- * column="inserted_by"
- * type="long"
- */
public Long getInsertedBy() {
return insertedBy;
}
@@ -192,11 +155,6 @@ public class FlvRecordingMetaData implem
this.insertedBy = insertedBy;
}
- /**
- * @hibernate.property
- * column="inserted"
- * type="java.util.Date"
- */
public Date getInserted() {
return inserted;
}
@@ -204,11 +162,6 @@ public class FlvRecordingMetaData implem
this.inserted = inserted;
}
- /**
- * @hibernate.property
- * column="deleted"
- * type="string"
- */
public String getDeleted() {
return deleted;
}
@@ -216,11 +169,6 @@ public class FlvRecordingMetaData implem
this.deleted = deleted;
}
- /**
- * @hibernate.property
- * column="updated"
- * type="java.util.Date"
- */
public Date getUpdated() {
return updated;
}
@@ -228,11 +176,6 @@ public class FlvRecordingMetaData implem
this.updated = updated;
}
- /**
- * @hibernate.property
- * column="is_screen_data"
- * type="boolean"
- */
public Boolean getIsScreenData() {
return isScreenData;
}
@@ -240,11 +183,6 @@ public class FlvRecordingMetaData implem
this.isScreenData = isScreenData;
}
- /**
- * @hibernate.property
- * column="stream_name"
- * type="string"
- */
public String getStreamName() {
return streamName;
}
@@ -252,11 +190,6 @@ public class FlvRecordingMetaData implem
this.streamName = streamName;
}
- /**
- * @hibernate.property
- * column="wav_audio_data"
- * type="string"
- */
public String getWavAudioData() {
return wavAudioData;
}
@@ -264,11 +197,6 @@ public class FlvRecordingMetaData implem
this.wavAudioData = wavAudioData;
}
- /**
- * @hibernate.property
- * column="full_wav_audio_data"
- * type="string"
- */
public String getFullWavAudioData() {
return fullWavAudioData;
}
@@ -276,11 +204,6 @@ public class FlvRecordingMetaData implem
this.fullWavAudioData = fullWavAudioData;
}
- /**
- * @hibernate.property
- * column="audio_is_valid"
- * type="boolean"
- */
public Boolean getAudioIsValid() {
return audioIsValid;
}
@@ -288,11 +211,6 @@ public class FlvRecordingMetaData implem
this.audioIsValid = audioIsValid;
}
- /**
- * @hibernate.property
- * column="interiew_pod_id"
- * type="int"
- */
public Integer getInteriewPodId() {
return interiewPodId;
}
@@ -300,15 +218,11 @@ public class FlvRecordingMetaData implem
this.interiewPodId = interiewPodId;
}
- /**
- * @hibernate.property
- * column="initial_gap_seconds"
- * type="int"
- */
public Integer getInitialGapSeconds() {
return initialGapSeconds;
}
public void setInitialGapSeconds(Integer initialGapSeconds) {
this.initialGapSeconds = initialGapSeconds;
}
+
}
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaDelta.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaDelta.java?rev=1326089&r1=1326088&r2=1326089&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaDelta.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecordingMetaDelta.java Sat Apr 14 12:01:18 2012
@@ -57,8 +57,6 @@ public class FlvRecordingMetaDelta imple
private Date currentTime;
@Column(name="delta_time_stamp")
private Long deltaTimeStamp;
- @Column(name="offset_time")
- private Long offset;
@Column(name="missing_time")
private Long missingTime;
@Column(name="duration")
@@ -79,17 +77,7 @@ public class FlvRecordingMetaDelta imple
private Boolean isStartPadding;
@Column(name="debug_status")
private String debugStatus;
- @Column(name="stream_creation_time")
- private Long streamCreationTime;
- @Column(name="stream_creation_time_date")
- private Date streamCreationTimeDate;
-
- /**
- *
- * @hibernate.id
- * column="flvrecording_meta_delta_id"
- * generator-class="increment"
- */
+
public long getFlvRecordingMetaDeltaId() {
return flvRecordingMetaDeltaId;
}
@@ -97,11 +85,6 @@ public class FlvRecordingMetaDelta imple
this.flvRecordingMetaDeltaId = flvRecordingMetaDeltaId;
}
- /**
- * @hibernate.property
- * column="flvrecording_metadata_id"
- * type="long"
- */
public Long getFlvRecordingMetaDataId() {
return flvRecordingMetaDataId;
}
@@ -109,11 +92,6 @@ public class FlvRecordingMetaDelta imple
this.flvRecordingMetaDataId = flvRecordingMetaDataId;
}
- /**
- * @hibernate.property
- * column="time_stamp"
- * type="int"
- */
public Integer getTimeStamp() {
return timeStamp;
}
@@ -121,11 +99,6 @@ public class FlvRecordingMetaDelta imple
this.timeStamp = timeStamp;
}
- /**
- * @hibernate.property
- * column="delta_time"
- * type="long"
- */
public Long getDeltaTime() {
return deltaTime;
}
@@ -133,11 +106,6 @@ public class FlvRecordingMetaDelta imple
this.deltaTime = deltaTime;
}
- /**
- * @hibernate.property
- * column="last_time_stamp"
- * type="long"
- */
public Long getLastTimeStamp() {
return lastTimeStamp;
}
@@ -145,11 +113,6 @@ public class FlvRecordingMetaDelta imple
this.lastTimeStamp = lastTimeStamp;
}
- /**
- * @hibernate.property
- * column="delta_time_stamp"
- * type="long"
- */
public Long getDeltaTimeStamp() {
return deltaTimeStamp;
}
@@ -157,11 +120,6 @@ public class FlvRecordingMetaDelta imple
this.deltaTimeStamp = deltaTimeStamp;
}
- /**
- * @hibernate.property
- * column="packet_time_stamp"
- * type="int"
- */
public Integer getPacketTimeStamp() {
return packetTimeStamp;
}
@@ -169,22 +127,6 @@ public class FlvRecordingMetaDelta imple
this.packetTimeStamp = packetTimeStamp;
}
- /**
- * @hibernate.property
- * column="offset_time"
- * type="long"
- */
- public Long getOffset() {
- return offset;
- }
- public void setOffset(Long offset) {
- this.offset = offset;
- }
- /**
- * @hibernate.property
- * column="start_time_stamp"
- * type="int"
- */
public Integer getStartTimeStamp() {
return startTimeStamp;
}
@@ -192,11 +134,6 @@ public class FlvRecordingMetaDelta imple
this.startTimeStamp = startTimeStamp;
}
- /**
- * @hibernate.property
- * column="missing_time"
- * type="long"
- */
public Long getMissingTime() {
return missingTime;
}
@@ -204,11 +141,6 @@ public class FlvRecordingMetaDelta imple
this.missingTime = missingTime;
}
- /**
- * @hibernate.property
- * column="duration"
- * type="int"
- */
public Integer getDuration() {
return duration;
}
@@ -216,11 +148,6 @@ public class FlvRecordingMetaDelta imple
this.duration = duration;
}
- /**
- * @hibernate.property
- * column="start_time"
- * type="java.util.Date"
- */
public Date getStartTime() {
return startTime;
}
@@ -228,11 +155,6 @@ public class FlvRecordingMetaDelta imple
this.startTime = startTime;
}
- /**
- * @hibernate.property
- * column="current_event_time"
- * type="java.util.Date"
- */
public Date getCurrentTime() {
return currentTime;
}
@@ -240,11 +162,6 @@ public class FlvRecordingMetaDelta imple
this.currentTime = currentTime;
}
- /**
- * @hibernate.property
- * column="is_end_padding"
- * type="boolean"
- */
public Boolean getIsEndPadding() {
return isEndPadding;
}
@@ -252,11 +169,6 @@ public class FlvRecordingMetaDelta imple
this.isEndPadding = isEndPadding;
}
- /**
- * @hibernate.property
- * column="is_start_padding"
- * type="boolean"
- */
public Boolean getIsStartPadding() {
return isStartPadding;
}
@@ -264,11 +176,6 @@ public class FlvRecordingMetaDelta imple
this.isStartPadding = isStartPadding;
}
- /**
- * @hibernate.property
- * column="debug_status"
- * type="string"
- */
public String getDebugStatus() {
return debugStatus;
}
@@ -276,35 +183,6 @@ public class FlvRecordingMetaDelta imple
this.debugStatus = debugStatus;
}
- /**
- * @hibernate.property
- * column="stream_creation_time"
- * type="long"
- */
- public Long getStreamCreationTime() {
- return streamCreationTime;
- }
- public void setStreamCreationTime(Long streamCreationTime) {
- this.streamCreationTime = streamCreationTime;
- }
-
- /**
- * @hibernate.property
- * column="stream_creation_time_date"
- * type="java.util.Date"
- */
- public Date getStreamCreationTimeDate() {
- return streamCreationTimeDate;
- }
- public void setStreamCreationTimeDate(Date streamCreationTimeDate) {
- this.streamCreationTimeDate = streamCreationTimeDate;
- }
-
- /**
- * @hibernate.property
- * column="wave_out_put_name"
- * type="string"
- */
public String getWaveOutPutName() {
return waveOutPutName;
}
@@ -312,11 +190,6 @@ public class FlvRecordingMetaDelta imple
this.waveOutPutName = waveOutPutName;
}
- /**
- * @hibernate.property
- * column="data_length_packet"
- * type="int"
- */
public Integer getDataLengthPacket() {
return dataLengthPacket;
}
@@ -324,11 +197,6 @@ public class FlvRecordingMetaDelta imple
this.dataLengthPacket = dataLengthPacket;
}
- /**
- * @hibernate.property
- * column="received_audio_data_length"
- * type="long"
- */
public Long getReceivedAudioDataLength() {
return receivedAudioDataLength;
}
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=1326089&r1=1326088&r2=1326089&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 Apr 14 12:01:18 2012
@@ -72,7 +72,7 @@ public class FLVRecorderService implemen
@Autowired
private FlvRecordingDaoImpl flvRecordingDaoImpl;
@Autowired
- private FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDaoImpl;
+ private FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao;
@Autowired
private UsersDaoImpl usersDaoImpl;
@Autowired
@@ -95,8 +95,6 @@ public class FLVRecorderService implemen
private AuthLevelmanagement authLevelManagement;
@Autowired
private FlvRecordingMetaDeltaDaoImpl flvRecordingMetaDeltaDao;
- @Autowired
- private final FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao = null;
public void resultReceived(IPendingServiceCall arg0) {
}
@@ -203,7 +201,7 @@ public class FLVRecorderService implemen
.getStreamPublishName()
.toString());
- Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl
+ Long flvRecordingMetaDataId = this.flvRecordingMetaDataDao
.addFlvRecordingMetaData(
flvRecordingId,
rcl.getFirstname() + " "
@@ -253,7 +251,7 @@ public class FLVRecorderService implemen
isVideoOnly = true;
}
- Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl
+ Long flvRecordingMetaDataId = this.flvRecordingMetaDataDao
.addFlvRecordingMetaData(
flvRecordingId,
rcl.getFirstname() + " "
@@ -338,7 +336,7 @@ public class FLVRecorderService implemen
stream.addStreamListener(new StreamAudioListener(streamName,
conn.getScope(), flvRecordingMetaDataId, isScreenData,
- isInterview, flvRecordingMetaDeltaDao));
+ isInterview, flvRecordingMetaDeltaDao, flvRecordingMetaDataDao));
}
// Just for Debug Purpose
// stream.saveAs(streamName+"_DEBUG", false);
@@ -478,7 +476,7 @@ public class FLVRecorderService implemen
rcl.getFlvRecordingMetaDataId());
// Update Meta Data
- this.flvRecordingMetaDataDaoImpl
+ this.flvRecordingMetaDataDao
.updateFlvRecordingMetaDataEndDate(
rcl.getFlvRecordingMetaDataId(),
new Date());
@@ -495,7 +493,7 @@ public class FLVRecorderService implemen
rcl.getFlvRecordingMetaDataId());
// Update Meta Data
- this.flvRecordingMetaDataDaoImpl
+ this.flvRecordingMetaDataDao
.updateFlvRecordingMetaDataEndDate(
rcl.getFlvRecordingMetaDataId(),
new Date());
@@ -612,7 +610,7 @@ public class FLVRecorderService implemen
rcl.getFlvRecordingMetaDataId());
// Update Meta Data
- this.flvRecordingMetaDataDaoImpl
+ this.flvRecordingMetaDataDao
.updateFlvRecordingMetaDataEndDate(
rcl.getFlvRecordingMetaDataId(), new Date());
}
@@ -628,7 +626,7 @@ public class FLVRecorderService implemen
.toString(), rcl.getFlvRecordingMetaDataId());
// Update Meta Data
- this.flvRecordingMetaDataDaoImpl
+ this.flvRecordingMetaDataDao
.updateFlvRecordingMetaDataEndDate(
rcl.getFlvRecordingMetaDataId(), new Date());
}
@@ -659,7 +657,7 @@ public class FLVRecorderService implemen
log.debug("############## ADD SCREEN OF SHARER :: "
+ rcl.getStreamPublishName());
- Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl
+ Long flvRecordingMetaDataId = this.flvRecordingMetaDataDao
.addFlvRecordingMetaData(
flvRecordingId,
rcl.getFirstname() + " "
@@ -701,7 +699,7 @@ public class FLVRecorderService implemen
isVideoOnly = true;
}
- Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl
+ Long flvRecordingMetaDataId = this.flvRecordingMetaDataDao
.addFlvRecordingMetaData(flvRecordingId,
rcl.getFirstname() + " " + rcl.getLastname(),
now, isAudioOnly, isVideoOnly, false,
@@ -735,7 +733,7 @@ public class FLVRecorderService implemen
.getFlvRecordingById(flvRecordingId);
flvRecording
- .setFlvRecordingMetaData(this.flvRecordingMetaDataDaoImpl
+ .setFlvRecordingMetaData(this.flvRecordingMetaDataDao
.getFlvRecordingMetaDataByRecording(flvRecordingId));
if (flvRecording.getInsertedBy() != null) {