[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