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 2013/11/28 18:58:57 UTC
svn commit: r1546413 - in /openmeetings:
branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/
trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/
Author: solomax
Date: Thu Nov 28 17:58:57 2013
New Revision: 1546413
URL: http://svn.apache.org/r1546413
Log:
[OPENMEETINGS-556] server side recording code is synced between branches and cleaned up
Modified:
openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
Modified: openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java (original)
+++ openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java Thu Nov 28 17:58:57 2013
@@ -25,7 +25,7 @@ import java.util.concurrent.BlockingQueu
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
-import org.apache.openmeetings.OpenmeetingsVariables;
+import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
import org.apache.openmeetings.utils.OmFileHelper;
import org.red5.io.IStreamableFile;
import org.red5.io.IStreamableFileFactory;
@@ -38,9 +38,9 @@ import org.red5.server.util.ScopeUtils;
import org.slf4j.Logger;
public abstract class BaseStreamWriter implements Runnable {
-
- private static final Logger log = Red5LoggerFactory.getLogger(
- BaseStreamWriter.class, OpenmeetingsVariables.webAppRootKey);
+ private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+ protected int startTimeStamp = -1;
+ protected long initialDelta = 0;
// thread is running
private boolean running = false;
@@ -51,7 +51,7 @@ public abstract class BaseStreamWriter i
protected ITagWriter writer = null;
- protected Long flvRecordingMetaDataId = null;
+ protected Long metaDataId = null;
protected Date startedSessionTimeDate = null;
@@ -63,20 +63,18 @@ public abstract class BaseStreamWriter i
protected String streamName = "";
-
private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<CachedEvent>();
- public BaseStreamWriter(String streamName, IScope scope,
- Long flvRecordingMetaDataId, boolean isScreenData) {
- this.startedSessionTimeDate = new Date();
+ public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData) {
+ startedSessionTimeDate = new Date();
this.isScreenData = isScreenData;
this.streamName = streamName;
- this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+ this.metaDataId = metaDataId;
this.scope = scope;
try {
init();
} catch (IOException ex) {
- log.error("[StreamAudioWriter] Could not start Thread", ex);
+ log.error("[BaseStreamWriter] Could not start Thread", ex);
}
open();
}
@@ -88,23 +86,22 @@ public abstract class BaseStreamWriter i
* I/O exception
*/
private void init() throws IOException {
- file = new File(OmFileHelper.getStreamsSubDir(this.scope.getName()), this.streamName + ".flv");
+ file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + ".flv");
- IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
- .getScopeService(this.scope, IStreamableFileFactory.class, StreamableFileFactory.class);
+ IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
+ StreamableFileFactory.class);
- if (!this.file.isFile()) {
+ if (!file.isFile()) {
// Maybe the (previously existing) file has been deleted
- this.file.createNewFile();
+ 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();
-
+ IStreamableFileService service = factory.getService(file);
+ IStreamableFile flv = service.getStreamableFile(file);
+ writer = flv.getWriter();
}
private void open() {
@@ -138,8 +135,7 @@ public abstract class BaseStreamWriter i
}
/**
- * Write the actual packet data to the disk and do calculate any needed
- * additional information
+ * Write the actual packet data to the disk and do calculate any needed additional information
*
* @param streampacket
*/
@@ -152,8 +148,7 @@ public abstract class BaseStreamWriter i
public void append(CachedEvent streampacket) {
if (!running) {
- throw new IllegalStateException(
- "Append called before the Thread was started!");
+ throw new IllegalStateException("Append called before the Thread was started!");
}
try {
queue.put(streampacket);
Modified: openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java (original)
+++ openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java Thu Nov 28 17:58:57 2013
@@ -19,6 +19,8 @@
package org.apache.openmeetings.data.flvrecord.listener.async;
import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.io.IoConstants.TYPE_AUDIO;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
import java.util.Date;
@@ -28,11 +30,9 @@ import org.apache.openmeetings.data.flvr
import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecordingMetaData;
import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecordingMetaDelta;
import org.red5.io.ITag;
-import org.red5.io.IoConstants;
import org.red5.io.flv.impl.Tag;
import org.red5.logging.Red5LoggerFactory;
import org.red5.server.api.scope.IScope;
-import org.red5.server.net.rtmp.event.VideoData.FrameType;
import org.slf4j.Logger;
public class StreamAudioWriter extends BaseStreamWriter {
@@ -40,10 +40,6 @@ public class StreamAudioWriter extends B
private int duration = 0;
- private int startTimeStamp = -1;
-
- private long initialDelta = 0;
-
private Integer lastTimeStamp = -1;
private Date lastcurrentTime = null;
@@ -57,30 +53,29 @@ public class StreamAudioWriter extends B
private boolean isInterview = false;
- public StreamAudioWriter(String streamName, IScope scope, Long flvRecordingMetaDataId, boolean isScreenData,
+ public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
boolean isInterview, FlvRecordingMetaDataDao metaDataDao, FlvRecordingMetaDeltaDao metaDeltaDao) {
- super(streamName, scope, flvRecordingMetaDataId, isScreenData);
+ super(streamName, scope, metaDataId, isScreenData);
this.metaDeltaDao = metaDeltaDao;
this.metaDataDao = metaDataDao;
this.isInterview = isInterview;
- FlvRecordingMetaData flvRecordingMetaData = metaDataDao
- .getFlvRecordingMetaDataById(flvRecordingMetaDataId);
- flvRecordingMetaData.setStreamReaderThreadComplete(false);
- metaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+ FlvRecordingMetaData metaData = metaDataDao.getFlvRecordingMetaDataById(metaDataId);
+ metaData.setStreamReaderThreadComplete(false);
+ metaDataDao.updateFlvRecordingMetaData(metaData);
}
@Override
public void packetReceived(CachedEvent streampacket) {
try {
// We only care about audio at this moment
- if (isInterview || streampacket.getDataType() == IoConstants.TYPE_AUDIO) {
+ if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
if (streampacket.getTimestamp() <= 0) {
log.warn("Negative TimeStamp");
return;
}
- if (isInterview && startTimeStamp == -1 && FrameType.KEYFRAME != streampacket.getFrameType()) {
+ if (isInterview && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
//skip until keyframe
return;
}
@@ -96,96 +91,82 @@ public class StreamAudioWriter extends B
Date virtualTime = streampacket.getCurrentTime();
if (startTimeStamp == -1) {
-
- // Calculate the delta between the initial start and the
- // first audio-packet data
+ // Calculate the delta between the initial start and the first audio-packet data
initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
+ FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
- flvRecordingMetaDelta.setDeltaTime(initialDelta);
- flvRecordingMetaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(0);
- flvRecordingMetaDelta.setDebugStatus("INIT AUDIO");
- flvRecordingMetaDelta.setIsStartPadding(true);
- flvRecordingMetaDelta.setIsEndPadding(false);
- flvRecordingMetaDelta.setDataLengthPacket(data.limit());
- flvRecordingMetaDelta.setReceivedAudioDataLength(byteCount);
- flvRecordingMetaDelta.setStartTime(startedSessionTimeDate);
- flvRecordingMetaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+ metaDelta.setDeltaTime(initialDelta);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(0);
+ metaDelta.setDebugStatus("INIT AUDIO");
+ metaDelta.setIsStartPadding(true);
+ metaDelta.setIsEndPadding(false);
+ metaDelta.setDataLengthPacket(data.limit());
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
- // duration = Math.max(duration, 0 +
- // writer.getOffset());
- flvRecordingMetaDelta.setDuration(0);
+ metaDelta.setDuration(0);
Long missingTime = deltaTimeStamp - 0;
- flvRecordingMetaDelta.setMissingTime(missingTime);
+ metaDelta.setMissingTime(missingTime);
- flvRecordingMetaDelta.setCurrentTime(virtualTime);
- flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
- flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
+ metaDelta.setCurrentTime(virtualTime);
+ metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ metaDelta.setStartTimeStamp(startTimeStamp);
- metaDeltaDao.addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+ metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
// That will be not bigger then long value
- startTimeStamp = (streampacket.getTimestamp());
-
- // We have to set that to bypass the initial delta
- // lastTimeStamp = startTimeStamp;
+ startTimeStamp = streampacket.getTimestamp();
}
lastStreamPacketTimeStamp = streampacket.getTimestamp();
timeStamp -= startTimeStamp;
- long deltaTime = 0;
- if (lastTimeStamp == -1) {
- deltaTime = 0; // Offset at the beginning is calculated
- // above
- } else {
- deltaTime = timeStamp - lastTimeStamp;
- }
+ // Offset at the beginning is calculated above
+ long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
lastTimeStamp = timeStamp;
if (deltaTime > 75) {
+ FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
-
- flvRecordingMetaDelta.setDeltaTime(deltaTime);
- flvRecordingMetaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(timeStamp);
- flvRecordingMetaDelta.setDebugStatus("RUN AUDIO");
- flvRecordingMetaDelta.setIsStartPadding(false);
- flvRecordingMetaDelta.setLastTimeStamp(preLastTimeStamp);
- flvRecordingMetaDelta.setIsEndPadding(false);
- flvRecordingMetaDelta.setDataLengthPacket(data.limit());
- flvRecordingMetaDelta.setReceivedAudioDataLength(byteCount);
- flvRecordingMetaDelta.setStartTime(startedSessionTimeDate);
- flvRecordingMetaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+ metaDelta.setDeltaTime(deltaTime);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(timeStamp);
+ metaDelta.setDebugStatus("RUN AUDIO");
+ metaDelta.setIsStartPadding(false);
+ metaDelta.setLastTimeStamp(preLastTimeStamp);
+ metaDelta.setIsEndPadding(false);
+ metaDelta.setDataLengthPacket(data.limit());
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
Date current_date = new Date();
Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
duration = Math.max(duration, timeStamp + writer.getOffset());
- flvRecordingMetaDelta.setDuration(duration);
+ metaDelta.setDuration(duration);
Long missingTime = deltaTimeStamp - timeStamp;
- flvRecordingMetaDelta.setMissingTime(missingTime);
-
- flvRecordingMetaDelta.setCurrentTime(current_date);
- flvRecordingMetaDelta.setDeltaTimeStamp(deltaTimeStamp);
- flvRecordingMetaDelta.setStartTimeStamp(startTimeStamp);
+ metaDelta.setMissingTime(missingTime);
- metaDeltaDao.addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+ metaDelta.setCurrentTime(current_date);
+ metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+ metaDelta.setStartTimeStamp(startTimeStamp);
+ metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
}
ITag tag = new Tag();
@@ -231,26 +212,25 @@ public class StreamAudioWriter extends B
log.debug("deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
- FlvRecordingMetaDelta flvRecordingMetaDelta = new FlvRecordingMetaDelta();
+ FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
- flvRecordingMetaDelta.setDeltaTime(deltaTimePaddingEnd);
- flvRecordingMetaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
- flvRecordingMetaDelta.setTimeStamp(lastTimeStamp);
- flvRecordingMetaDelta.setDebugStatus("END AUDIO");
- flvRecordingMetaDelta.setIsStartPadding(false);
- flvRecordingMetaDelta.setIsEndPadding(true);
- flvRecordingMetaDelta.setDataLengthPacket(null);
- flvRecordingMetaDelta.setReceivedAudioDataLength(byteCount);
- flvRecordingMetaDelta.setStartTime(startedSessionTimeDate);
- flvRecordingMetaDelta.setCurrentTime(new Date());
+ metaDelta.setDeltaTime(deltaTimePaddingEnd);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
+ metaDelta.setTimeStamp(lastTimeStamp);
+ metaDelta.setDebugStatus("END AUDIO");
+ metaDelta.setIsStartPadding(false);
+ metaDelta.setIsEndPadding(true);
+ metaDelta.setDataLengthPacket(null);
+ metaDelta.setReceivedAudioDataLength(byteCount);
+ metaDelta.setStartTime(startedSessionTimeDate);
+ metaDelta.setCurrentTime(new Date());
- metaDeltaDao.addFlvRecordingMetaDelta(flvRecordingMetaDelta);
+ metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
// Write the complete Bit to the meta data, the converter task will wait for this bit!
- FlvRecordingMetaData flvRecordingMetaData = metaDataDao
- .getFlvRecordingMetaDataById(flvRecordingMetaDataId);
- flvRecordingMetaData.setStreamReaderThreadComplete(true);
- metaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+ FlvRecordingMetaData metaData = metaDataDao.getFlvRecordingMetaDataById(metaDataId);
+ metaData.setStreamReaderThreadComplete(true);
+ metaDataDao.updateFlvRecordingMetaData(metaData);
} catch (Exception err) {
log.error("[closeStream]", err);
Modified: openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java (original)
+++ openmeetings/branches/2.x/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java Thu Nov 28 17:58:57 2013
@@ -20,7 +20,6 @@ package org.apache.openmeetings.data.flv
import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
-import java.io.IOException;
import java.util.Date;
import org.apache.mina.core.buffer.IoBuffer;
@@ -33,53 +32,36 @@ import org.red5.server.api.scope.IScope;
import org.slf4j.Logger;
public class StreamVideoWriter extends BaseStreamWriter {
- private int startTimeStamp = -1;
-
+ private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
private Date startedSessionScreenTimeDate = null;
-
- private long initialDelta = 0;
-
private final FlvRecordingMetaDataDao metaDataDao;
- private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
-
- public StreamVideoWriter(String streamName, IScope scope, Long flvRecordingMetaDataId, boolean isScreenData,
+ public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
boolean isInterview, FlvRecordingMetaDataDao metaDataDao) {
- super(streamName, scope, flvRecordingMetaDataId, isScreenData);
+ super(streamName, scope, metaDataId, isScreenData);
this.metaDataDao = metaDataDao;
- FlvRecordingMetaData flvRecordingMetaData = metaDataDao.getFlvRecordingMetaDataById(flvRecordingMetaDataId);
- flvRecordingMetaData.setStreamReaderThreadComplete(false);
- metaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+ FlvRecordingMetaData metaData = metaDataDao.getFlvRecordingMetaDataById(metaDataId);
+ metaData.setStreamReaderThreadComplete(false);
+ metaDataDao.updateFlvRecordingMetaData(metaData);
}
@Override
public void packetReceived(CachedEvent streampacket) {
try {
-
- // We only are concerned about video at this moment
- // if (streampacket.getDataType() == 9) {
-
int timeStamp = streampacket.getTimestamp();
Date virtualTime = streampacket.getCurrentTime();
- if (this.startedSessionScreenTimeDate == null) {
-
- this.startedSessionScreenTimeDate = virtualTime;
-
- // Calculate the delta between the initial start and the first
- // packet data
-
- this.initialDelta = this.startedSessionScreenTimeDate.getTime() - this.startedSessionTimeDate.getTime();
-
- // This is important for the Interview Post Processing to get
- // the time between starting the stream and the actual Access to
- // the
- // webcam by the Flash Security Dialog
- metaDataDao.updateFlvRecordingMetaDataInitialGap(flvRecordingMetaDataId, this.initialDelta);
-
+ if (startedSessionScreenTimeDate == null) {
+ startedSessionScreenTimeDate = virtualTime;
+ // Calculate the delta between the initial start and the first packet data
+ initialDelta = startedSessionScreenTimeDate.getTime() - startedSessionTimeDate.getTime();
+
+ // This is important for the Interview Post Processing to get the time between starting the stream and
+ // the actual Access to the webcam by the Flash Security Dialog
+ metaDataDao.updateFlvRecordingMetaDataInitialGap(metaDataId, initialDelta);
}
if (streampacket.getTimestamp() <= 0) {
@@ -103,23 +85,11 @@ public class StreamVideoWriter extends B
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.isInterview) {
- // if (timeStamp <= 500) {
- // // We will cut the first 0.5 seconds
- // // The First seconds seem to break the Recording Video often
- // return;
- // }
- // }
-
writer.writeTag(tag);
-
- } catch (IOException e) {
- log.error("[packetReceived]", e);
} catch (Exception e) {
log.error("[packetReceived]", e);
}
@@ -128,25 +98,19 @@ public class StreamVideoWriter extends B
@Override
public void closeStream() {
try {
-
writer.close();
- // Add Delta in the beginning, this Delta is the Gap between the
- // device chosen and when the User hits the button in the Flash
- // Security Warning
- FlvRecordingMetaData flvRecordingMetaData = metaDataDao
- .getFlvRecordingMetaDataById(this.flvRecordingMetaDataId);
+ // Add Delta in the beginning, this Delta is the Gap between the device chosen and when the User hits the
+ // button in the Flash Security Warning
+ FlvRecordingMetaData metaData = metaDataDao.getFlvRecordingMetaDataById(metaDataId);
- flvRecordingMetaData.setRecordStart(new Date(flvRecordingMetaData.getRecordStart().getTime()
- + this.initialDelta));
+ metaData.setRecordStart(new Date(metaData.getRecordStart().getTime() + initialDelta));
- flvRecordingMetaData.setStreamReaderThreadComplete(true);
-
- metaDataDao.updateFlvRecordingMetaData(flvRecordingMetaData);
+ metaData.setStreamReaderThreadComplete(true);
+ metaDataDao.updateFlvRecordingMetaData(metaData);
} catch (Exception err) {
log.error("[closeStream]", err);
}
}
-
}
Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java Thu Nov 28 17:58:57 2013
@@ -52,7 +52,7 @@ public abstract class BaseStreamWriter i
protected ITagWriter writer = null;
- protected Long flvRecordingMetaDataId = null;
+ protected Long metaDataId = null;
protected Date startedSessionTimeDate = null;
@@ -66,11 +66,11 @@ public abstract class BaseStreamWriter i
private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<CachedEvent>();
- public BaseStreamWriter(String streamName, IScope scope, Long flvRecordingMetaDataId, boolean isScreenData) {
+ public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData) {
startedSessionTimeDate = new Date();
this.isScreenData = isScreenData;
this.streamName = streamName;
- this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+ this.metaDataId = metaDataId;
this.scope = scope;
try {
init();
@@ -103,7 +103,6 @@ public abstract class BaseStreamWriter i
IStreamableFileService service = factory.getService(file);
IStreamableFile flv = service.getStreamableFile(file);
writer = flv.getWriter();
-
}
private void open() {
Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java Thu Nov 28 17:58:57 2013
@@ -19,8 +19,9 @@
package org.apache.openmeetings.data.flvrecord.listener.async;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.io.IoConstants.TYPE_AUDIO;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
-import java.io.IOException;
import java.util.Date;
import org.apache.mina.core.buffer.IoBuffer;
@@ -32,7 +33,6 @@ import org.red5.io.ITag;
import org.red5.io.flv.impl.Tag;
import org.red5.logging.Red5LoggerFactory;
import org.red5.server.api.scope.IScope;
-import org.red5.server.net.rtmp.event.VideoData.FrameType;
import org.slf4j.Logger;
public class StreamAudioWriter extends BaseStreamWriter {
@@ -40,8 +40,6 @@ public class StreamAudioWriter extends B
private int duration = 0;
- private int startTimeStamp = -1;
-
private Integer lastTimeStamp = -1;
private Date lastcurrentTime = null;
@@ -55,15 +53,15 @@ public class StreamAudioWriter extends B
private boolean isInterview = false;
- public StreamAudioWriter(String streamName, IScope scope, Long flvRecordingMetaDataId, boolean isScreenData,
+ public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
boolean isInterview, FlvRecordingMetaDataDao metaDataDao, FlvRecordingMetaDeltaDao metaDeltaDao) {
- super(streamName, scope, flvRecordingMetaDataId, isScreenData);
+ super(streamName, scope, metaDataId, isScreenData);
this.metaDeltaDao = metaDeltaDao;
this.metaDataDao = metaDataDao;
this.isInterview = isInterview;
- FlvRecordingMetaData metaData = metaDataDao.get(flvRecordingMetaDataId);
+ FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
metaData.setStreamReaderThreadComplete(false);
metaDataDao.update(metaData);
}
@@ -72,18 +70,16 @@ public class StreamAudioWriter extends B
public void packetReceived(CachedEvent streampacket) {
try {
// We only care about audio at this moment
- if (isInterview || streampacket.getDataType() == 8) {
+ if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
if (streampacket.getTimestamp() <= 0) {
log.warn("Negative TimeStamp");
return;
}
- if (isInterview && startTimeStamp == -1 && FrameType.KEYFRAME != streampacket.getFrameType()) {
- // skip until keyframe
+ if (isInterview && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+ //skip until keyframe
return;
}
-
IoBuffer data = streampacket.getData().asReadOnlyBuffer();
-
if (data.limit() == 0) {
return;
}
@@ -103,7 +99,7 @@ public class StreamAudioWriter extends B
FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
metaDelta.setDeltaTime(initialDelta);
- metaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
metaDelta.setTimeStamp(0);
metaDelta.setDebugStatus("INIT AUDIO");
metaDelta.setIsStartPadding(true);
@@ -143,11 +139,10 @@ public class StreamAudioWriter extends B
lastTimeStamp = timeStamp;
if (deltaTime > 75) {
-
FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
metaDelta.setDeltaTime(deltaTime);
- metaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
metaDelta.setTimeStamp(timeStamp);
metaDelta.setDebugStatus("RUN AUDIO");
metaDelta.setIsStartPadding(false);
@@ -186,9 +181,6 @@ public class StreamAudioWriter extends B
writer.writeTag(tag);
}
-
- } catch (IOException e) {
- log.error("[packetReceived]", e);
} catch (Exception e) {
log.error("[packetReceived]", e);
}
@@ -224,7 +216,7 @@ public class StreamAudioWriter extends B
FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();
metaDelta.setDeltaTime(deltaTimePaddingEnd);
- metaDelta.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+ metaDelta.setFlvRecordingMetaDataId(metaDataId);
metaDelta.setTimeStamp(lastTimeStamp);
metaDelta.setDebugStatus("END AUDIO");
metaDelta.setIsStartPadding(false);
@@ -237,9 +229,9 @@ public class StreamAudioWriter extends B
metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);
// Write the complete Bit to the meta data, the converter task will wait for this bit!
- FlvRecordingMetaData flvRecordingMetaData = metaDataDao.get(flvRecordingMetaDataId);
- flvRecordingMetaData.setStreamReaderThreadComplete(true);
- metaDataDao.update(flvRecordingMetaData);
+ FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
+ metaData.setStreamReaderThreadComplete(true);
+ metaDataDao.update(metaData);
} catch (Exception err) {
log.error("[closeStream]", err);
Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?rev=1546413&r1=1546412&r2=1546413&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java Thu Nov 28 17:58:57 2013
@@ -20,7 +20,6 @@ package org.apache.openmeetings.data.flv
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import java.io.IOException;
import java.util.Date;
import org.apache.mina.core.buffer.IoBuffer;
@@ -37,14 +36,14 @@ public class StreamVideoWriter extends B
private Date startedSessionScreenTimeDate = null;
private final FlvRecordingMetaDataDao metaDataDao;
- public StreamVideoWriter(String streamName, IScope scope, Long flvRecordingMetaDataId, boolean isScreenData,
+ public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
boolean isInterview, FlvRecordingMetaDataDao metaDataDao) {
- super(streamName, scope, flvRecordingMetaDataId, isScreenData);
+ super(streamName, scope, metaDataId, isScreenData);
this.metaDataDao = metaDataDao;
- FlvRecordingMetaData metaData = metaDataDao.get(flvRecordingMetaDataId);
+ FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
metaData.setStreamReaderThreadComplete(false);
metaDataDao.update(metaData);
}
@@ -62,7 +61,7 @@ public class StreamVideoWriter extends B
// This is important for the Interview Post Processing to get the time between starting the stream and
// the actual Access to the webcam by the Flash Security Dialog
- metaDataDao.updateFlvRecordingMetaDataInitialGap(flvRecordingMetaDataId, initialDelta);
+ metaDataDao.updateFlvRecordingMetaDataInitialGap(metaDataId, initialDelta);
}
if (streampacket.getTimestamp() <= 0) {
@@ -91,8 +90,6 @@ public class StreamVideoWriter extends B
tag.setBody(data);
writer.writeTag(tag);
- } catch (IOException e) {
- log.error("[packetReceived]", e);
} catch (Exception e) {
log.error("[packetReceived]", e);
}
@@ -105,7 +102,7 @@ public class StreamVideoWriter extends B
// Add Delta in the beginning, this Delta is the Gap between the device chosen and when the User hits the
// button in the Flash Security Warning
- FlvRecordingMetaData metaData = metaDataDao.get(flvRecordingMetaDataId);
+ FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);
metaData.setRecordStart(new Date(metaData.getRecordStart().getTime() + initialDelta));