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