[Red5commits] [1189] fixed wrong timestamps in recorded files (Trac #78)streams are unregistered in

jbauch luke at codegent.com
Thu Jul 20 15:50:07 EDT 2006


fixed wrong timestamps in recorded files (Trac #78)
streams are unregistered in the connection when they finished playing / publishing
fixed multiple usage of simpleRecorder.swf when recording different files without disconnecting/connecting


Timestamp: 07/21/06 05:37:48 (less than one hour ago) 
Change: 1189 
Author: jbauch

Files (see diff or trac for details): 
java/server/trunk/src/org/red5/server/api/stream/IStreamCapableConnection.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java
java/server/trunk/src/org/red5/server/stream/StreamService.java
java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java


Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1189

Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java (revision 1181)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java (revision 1189)
@@ -257,10 +257,16 @@
 
 	public void unreserveStreamId(int streamId) {
+		deleteStreamById(streamId);
+		if (streamId > 0 && streamId <= MAX_STREAMS) {
+			reservedStreams[streamId - 1] = false;
+		}
+	}
+
+	public void deleteStreamById(int streamId) {
 		if (streamId > 0 && streamId <= MAX_STREAMS) {
 			streams[streamId - 1] = null;
-			reservedStreams[streamId - 1] = false;
-		}
-	}
-
+		}
+	}
+	
 	public void ping(Ping ping) {
 		getChannel((byte) 2).write(ping);
Index: /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java (revision 1123)
+++ /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java (revision 1189)
@@ -59,4 +59,5 @@
 	private int videoTimestamp;
 	private int dataTimestamp;
+	private int timestampDelta = 0;
 
 	public FileConsumer(IScope scope, File file) {
@@ -74,4 +75,5 @@
 				log.error("error init file consumer", e);
 			}
+			timestampDelta = ((RTMPMessage) message).getBody().getTimestamp();
 		}
 		RTMPMessage rtmpMsg = (RTMPMessage) message;
@@ -87,5 +89,5 @@
 					videoTimestamp = msg.getTimestamp();
 				}
-				tag.setTimestamp(videoTimestamp);
+				tag.setTimestamp(videoTimestamp - timestampDelta);
 				break;
 			
@@ -96,5 +98,5 @@
 					audioTimestamp = msg.getTimestamp();
 				}
-				tag.setTimestamp(audioTimestamp);
+				tag.setTimestamp(audioTimestamp - timestampDelta);
 				break;
 				
@@ -105,5 +107,5 @@
 					dataTimestamp = msg.getTimestamp();
 				}
-				tag.setTimestamp(dataTimestamp);
+				tag.setTimestamp(dataTimestamp - timestampDelta);
 		}
 		
Index: /java/server/trunk/src/org/red5/server/stream/StreamService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/StreamService.java (revision 1124)
+++ /java/server/trunk/src/org/red5/server/stream/StreamService.java (revision 1189)
@@ -43,5 +43,12 @@
 		if (!(conn instanceof IStreamCapableConnection)) return;
 		IClientStream stream = ((IStreamCapableConnection) conn).getStreamById(getCurrentStreamId());
+		if (stream instanceof IClientBroadcastStream) {
+			IClientBroadcastStream bs = (IClientBroadcastStream) stream;
+			IBroadcastScope bsScope = getBroadcastScope(conn.getScope(), bs.getPublishedName());
+			if (bsScope != null && conn instanceof BaseConnection)
+				((BaseConnection) conn).unregisterBasicScope(bsScope);
+		}
 		stream.close();
+		((IStreamCapableConnection) conn).deleteStreamById(getCurrentStreamId());
 	}
 
@@ -61,7 +68,5 @@
 	public void deleteStream(IStreamCapableConnection conn, int streamId) {
 		IClientStream stream = conn.getStreamById(streamId);
-		conn.unreserveStreamId(streamId);
 		if (stream != null) {
-			stream.close();
 			if (stream instanceof IClientBroadcastStream) {
 				IClientBroadcastStream bs = (IClientBroadcastStream) stream;
@@ -70,5 +75,7 @@
 					((BaseConnection) conn).unregisterBasicScope(bsScope);
 			}
-		}
+			stream.close();
+		}
+		conn.unreserveStreamId(streamId);
 	}
 
@@ -157,4 +164,5 @@
 			}
 			bs.close();
+			streamConn.deleteStreamById(streamId);
 		}
 	}
@@ -167,10 +175,7 @@
 		IClientStream stream = streamConn.getStreamById(streamId);
 		if (stream != null && !(stream instanceof IClientBroadcastStream)) return;
-		if (stream == null) {
+		if (stream == null)
 			stream = streamConn.newBroadcastStream(streamId);
-		} else {
-			// already published
-			return;
-		}
+		
 		IClientBroadcastStream bs = (IClientBroadcastStream) stream;
 		try {
Index: /java/server/trunk/src/org/red5/server/api/stream/IStreamCapableConnection.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/stream/IStreamCapableConnection.java (revision 1155)
+++ /java/server/trunk/src/org/red5/server/api/stream/IStreamCapableConnection.java (revision 1189)
@@ -45,4 +45,11 @@
 	
 	/**
+	 * Deletes the stream with the given id.
+	 * 
+	 * @param streamId
+	 */
+	void deleteStreamById(int streamId);
+	
+	/**
 	 * Get a stream by its id.
 	 * @param streamId


Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.



More information about the Red5commits mailing list