Skip to content

Commit 37157bc

Browse files
committed
Updates for 1.0.9-M8
1 parent 25b6cea commit 37157bc

File tree

13 files changed

+158
-203
lines changed

13 files changed

+158
-203
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>org.red5</groupId>
55
<artifactId>red5-parent</artifactId>
6-
<version>1.0.9-M7</version>
6+
<version>1.0.9-M8</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99
<artifactId>red5-server-common</artifactId>

src/main/java/org/red5/server/messaging/InMemoryPushPushPipe.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ public void pushMessage(IMessage message) throws IOException {
9797
}
9898
for (IConsumer consumer : consumers) {
9999
try {
100-
IPushableConsumer pcon = (IPushableConsumer) consumer;
101-
pcon.pushMessage(this, message);
100+
((IPushableConsumer) consumer).pushMessage(this, message);
102101
} catch (Throwable t) {
103102
if (t instanceof IOException) {
104103
throw (IOException) t;

src/main/java/org/red5/server/net/rtmp/BaseRTMPHandler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ public void messageReceived(RTMPConnection conn, Packet packet) throws Exception
158158
} catch (Throwable t) {
159159
log.error("Exception", t);
160160
}
161-
// XXX this may be causing 'missing' data if previous methods are
162-
// not making copies before buffering etc..
161+
// XXX this may be causing 'missing' data if previous methods are not making copies before buffering etc..
163162
if (message != null) {
164163
message.release();
165164
}

src/main/java/org/red5/server/net/rtmp/RTMPConnection.java

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -188,21 +188,21 @@ public abstract class RTMPConnection extends BaseConnection implements IStreamCa
188188
*
189189
* @see org.red5.server.net.rtmp.Channel
190190
*/
191-
private transient ConcurrentMap<Integer, Channel> channels = new ConcurrentHashMap<Integer, Channel>(channelsInitalCapacity, 0.9f, channelsConcurrencyLevel);
191+
private transient ConcurrentMap<Integer, Channel> channels = new ConcurrentHashMap<>(channelsInitalCapacity, 0.9f, channelsConcurrencyLevel);
192192

193193
/**
194194
* Queues of tasks for every channel
195195
*
196196
* @see org.red5.server.net.rtmp.ReceivedMessageTaskQueue
197197
*/
198-
private final transient ConcurrentMap<Integer, ReceivedMessageTaskQueue> tasksByStreams = new ConcurrentHashMap<Integer, ReceivedMessageTaskQueue>(streamsInitalCapacity, 0.9f, streamsConcurrencyLevel);
198+
private final transient ConcurrentMap<Integer, ReceivedMessageTaskQueue> tasksByStreams = new ConcurrentHashMap<>(streamsInitalCapacity, 0.9f, streamsConcurrencyLevel);
199199

200200
/**
201201
* Client streams
202202
*
203203
* @see org.red5.server.api.stream.IClientStream
204204
*/
205-
private transient ConcurrentMap<Number, IClientStream> streams = new ConcurrentHashMap<Number, IClientStream>(streamsInitalCapacity, 0.9f, streamsConcurrencyLevel);
205+
private transient ConcurrentMap<Number, IClientStream> streams = new ConcurrentHashMap<>(streamsInitalCapacity, 0.9f, streamsConcurrencyLevel);
206206

207207
/**
208208
* Reserved stream ids. Stream id's directly relate to individual NetStream instances.
@@ -217,14 +217,14 @@ public abstract class RTMPConnection extends BaseConnection implements IStreamCa
217217
/**
218218
* Hash map that stores pending calls and ids as pairs.
219219
*/
220-
private transient ConcurrentMap<Integer, IPendingServiceCall> pendingCalls = new ConcurrentHashMap<Integer, IPendingServiceCall>(pendingCallsInitalCapacity, 0.75f, pendingCallsConcurrencyLevel);
220+
private transient ConcurrentMap<Integer, IPendingServiceCall> pendingCalls = new ConcurrentHashMap<>(pendingCallsInitalCapacity, 0.75f, pendingCallsConcurrencyLevel);
221221

222222
/**
223223
* Deferred results set.
224224
*
225225
* @see org.red5.server.net.rtmp.DeferredResult
226226
*/
227-
private transient CopyOnWriteArraySet<DeferredResult> deferredResults = new CopyOnWriteArraySet<DeferredResult>();
227+
private transient CopyOnWriteArraySet<DeferredResult> deferredResults = new CopyOnWriteArraySet<>();
228228

229229
/**
230230
* Last ping round trip time
@@ -274,7 +274,7 @@ public abstract class RTMPConnection extends BaseConnection implements IStreamCa
274274
/**
275275
* Map for pending video packets keyed by stream id.
276276
*/
277-
private transient ConcurrentMap<Number, AtomicInteger> pendingVideos = new ConcurrentHashMap<Number, AtomicInteger>(1, 0.9f, 1);
277+
private transient ConcurrentMap<Number, AtomicInteger> pendingVideos = new ConcurrentHashMap<>(1, 0.9f, 1);
278278

279279
/**
280280
* Number of (NetStream) streams used.
@@ -284,7 +284,7 @@ public abstract class RTMPConnection extends BaseConnection implements IStreamCa
284284
/**
285285
* Remembered stream buffer durations.
286286
*/
287-
private transient ConcurrentMap<Number, Integer> streamBuffers = new ConcurrentHashMap<Number, Integer>(1, 0.9f, 1);
287+
private transient ConcurrentMap<Number, Integer> streamBuffers = new ConcurrentHashMap<>(1, 0.9f, 1);
288288

289289
/**
290290
* Maximum time in milliseconds to wait for a valid handshake.
@@ -503,10 +503,12 @@ public void startWaitForHandshake() {
503503
log.debug("startWaitForHandshake - {}", sessionId);
504504
}
505505
// start the handshake checker after maxHandshakeTimeout milliseconds
506-
try {
507-
waitForHandshakeTask = scheduler.schedule(new WaitForHandshakeTask(), new Date(System.currentTimeMillis() + maxHandshakeTimeout));
508-
} catch (TaskRejectedException e) {
509-
log.error("WaitForHandshake task was rejected for {}", sessionId, e);
506+
if (scheduler != null) {
507+
try {
508+
waitForHandshakeTask = scheduler.schedule(new WaitForHandshakeTask(), new Date(System.currentTimeMillis() + maxHandshakeTimeout));
509+
} catch (TaskRejectedException e) {
510+
log.error("WaitForHandshake task was rejected for {}", sessionId, e);
511+
}
510512
}
511513
}
512514

@@ -996,10 +998,8 @@ public void close() {
996998
// dump memory stats
997999
log.trace("Memory at close - free: {}K total: {}K", Runtime.getRuntime().freeMemory() / 1024, Runtime.getRuntime().totalMemory() / 1024);
9981000
}
999-
} else {
1000-
if (log.isDebugEnabled()) {
1001-
log.debug("Already closing..");
1002-
}
1001+
} else if (log.isDebugEnabled()) {
1002+
log.debug("Already closing..");
10031003
}
10041004
}
10051005

@@ -1365,52 +1365,52 @@ public String messageTypeToName(byte headerDataType) {
13651365
/**
13661366
* Handle the incoming message.
13671367
*
1368-
* @param message
1369-
* message
1368+
* @param packet
1369+
* incoming message packet
13701370
*/
1371-
public void handleMessageReceived(Packet message) {
1371+
public void handleMessageReceived(Packet packet) {
13721372
if (log.isTraceEnabled()) {
13731373
log.trace("handleMessageReceived - {}", sessionId);
13741374
}
1375-
final byte dataType = message.getHeader().getDataType();
1376-
// route these types outside the executor
1377-
switch (dataType) {
1378-
case Constants.TYPE_PING:
1379-
case Constants.TYPE_ABORT:
1380-
case Constants.TYPE_BYTES_READ:
1381-
case Constants.TYPE_CHUNK_SIZE:
1382-
case Constants.TYPE_CLIENT_BANDWIDTH:
1383-
case Constants.TYPE_SERVER_BANDWIDTH:
1384-
// pass message to the handler
1385-
try {
1386-
handler.messageReceived(this, message);
1387-
} catch (Exception e) {
1388-
log.error("Error processing received message {}", sessionId, e);
1389-
}
1390-
break;
1391-
default:
1392-
if (executor != null) {
1393-
final String messageType = getMessageType(message);
1375+
// set the packet expiration time if maxHandlingTimeout is not disabled (set to 0)
1376+
if (maxHandlingTimeout > 0) {
1377+
packet.setExpirationTime(System.currentTimeMillis() + maxHandlingTimeout);
1378+
}
1379+
if (executor != null) {
1380+
final byte dataType = packet.getHeader().getDataType();
1381+
// route these types outside the executor
1382+
switch (dataType) {
1383+
case Constants.TYPE_PING:
1384+
case Constants.TYPE_ABORT:
1385+
case Constants.TYPE_BYTES_READ:
1386+
case Constants.TYPE_CHUNK_SIZE:
1387+
case Constants.TYPE_CLIENT_BANDWIDTH:
1388+
case Constants.TYPE_SERVER_BANDWIDTH:
1389+
// pass message to the handler
1390+
try {
1391+
handler.messageReceived(this, packet);
1392+
} catch (Exception e) {
1393+
log.error("Error processing received message {}", sessionId, e);
1394+
}
1395+
break;
1396+
default:
1397+
final String messageType = getMessageType(packet);
13941398
try {
13951399
// increment the packet number
13961400
final long packetNumber = packetSequence.incrementAndGet();
13971401
if (executorQueueSizeToDropAudioPackets > 0 && currentQueueSize.get() >= executorQueueSizeToDropAudioPackets) {
1398-
if (message.getHeader().getDataType() == Constants.TYPE_AUDIO_DATA) {
1402+
if (packet.getHeader().getDataType() == Constants.TYPE_AUDIO_DATA) {
13991403
// if there's a backlog of messages in the queue. Flash might have sent a burst of messages after a network congestion. Throw away packets that we are able to discard.
14001404
log.info("Queue threshold reached. Discarding packet: session=[{}], msgType=[{}], packetNum=[{}]", sessionId, messageType, packetNumber);
14011405
return;
14021406
}
14031407
}
1404-
// set the packet expiration time if maxHandlingTimeout is not disabled (set to 0)
1405-
if (maxHandlingTimeout > 0) {
1406-
message.setExpirationTime(System.currentTimeMillis() + maxHandlingTimeout);
1407-
}
1408-
int streamId = message.getHeader().getStreamId().intValue();
1408+
int streamId = packet.getHeader().getStreamId().intValue();
14091409
if (log.isTraceEnabled()) {
1410-
log.trace("Handling message for streamId: {}, channelId: {} Channels: {}", streamId, message.getHeader().getChannelId(), channels);
1410+
log.trace("Handling message for streamId: {}, channelId: {} Channels: {}", streamId, packet.getHeader().getChannelId(), channels);
14111411
}
14121412
// create a task to setProcessing the message
1413-
ReceivedMessageTask task = new ReceivedMessageTask(sessionId, message, handler, this);
1413+
ReceivedMessageTask task = new ReceivedMessageTask(sessionId, packet, handler, this);
14141414
task.setPacketNumber(packetNumber);
14151415
// create a task queue
14161416
ReceivedMessageTaskQueue newStreamTasks = new ReceivedMessageTaskQueue(streamId, this);
@@ -1426,13 +1426,19 @@ public void handleMessageReceived(Packet message) {
14261426
} catch (Exception e) {
14271427
log.error("Incoming message handling failed on session=[" + sessionId + "], messageType=[" + messageType + "]", e);
14281428
if (log.isDebugEnabled()) {
1429-
log.debug("Execution rejected on {} - {}", getSessionId(), RTMP.states[getStateCode()]);
1429+
log.debug("Execution rejected on {} - {}", sessionId, RTMP.states[getStateCode()]);
14301430
log.debug("Lock permits - decode: {} encode: {}", decoderLock.availablePermits(), encoderLock.availablePermits());
14311431
}
14321432
}
1433-
} else {
1434-
log.warn("Executor is null on {} state: {}", getSessionId(), RTMP.states[getStateCode()]);
1435-
}
1433+
}
1434+
} else {
1435+
log.debug("Executor is null on {} state: {}", sessionId, RTMP.states[getStateCode()]);
1436+
// pass message to the handler
1437+
try {
1438+
handler.messageReceived(this, packet);
1439+
} catch (Exception e) {
1440+
log.error("Error processing received message {} state: {}", sessionId, RTMP.states[getStateCode()], e);
1441+
}
14361442
}
14371443
}
14381444

@@ -1452,7 +1458,7 @@ public void onTaskRemoved(ReceivedMessageTaskQueue queue) {
14521458
private void processTasksQueue(final ReceivedMessageTaskQueue currentStreamTasks) {
14531459
int streamId = currentStreamTasks.getStreamId();
14541460
if (log.isTraceEnabled()) {
1455-
log.trace("Process tasks for streamId {}", streamId);
1461+
log.trace("Process tasks for streamId {}", streamId);
14561462
}
14571463
final ReceivedMessageTask task = currentStreamTasks.getTaskToProcess();
14581464
if (task != null) {

src/main/java/org/red5/server/net/rtmp/event/Aggregate.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ public Aggregate duplicate() throws IOException, ClassNotFoundException {
274274
if (header != null) {
275275
result.setHeader(header.clone());
276276
}
277+
result.setSourceType(sourceType);
277278
return result;
278279
}
279280

src/main/java/org/red5/server/net/rtmp/event/AudioData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public AudioData duplicate() throws IOException, ClassNotFoundException {
178178
if (header != null) {
179179
result.setHeader(header.clone());
180180
}
181+
result.setSourceType(sourceType);
181182
return result;
182183
}
183184

src/main/java/org/red5/server/net/rtmp/event/BaseEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public abstract class BaseEvent implements Constants, IRTMPEvent, Externalizable
5050
/**
5151
* Source type
5252
*/
53-
private byte sourceType;
53+
protected byte sourceType;
5454

5555
/**
5656
* Event target object

src/main/java/org/red5/server/net/rtmp/event/Notify.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ public Notify duplicate() throws IOException, ClassNotFoundException {
291291
bais.close();
292292
// set the action if it exists
293293
result.setAction(getAction());
294+
result.setSourceType(sourceType);
294295
return result;
295296
}
296297

src/main/java/org/red5/server/net/rtmp/event/VideoData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ public VideoData duplicate() throws IOException, ClassNotFoundException {
229229
if (header != null) {
230230
result.setHeader(header.clone());
231231
}
232+
result.setSourceType(sourceType);
232233
return result;
233234
}
234235

src/main/java/org/red5/server/stream/ClientBroadcastStream.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import org.red5.server.net.rtmp.event.Invoke;
7777
import org.red5.server.net.rtmp.event.Notify;
7878
import org.red5.server.net.rtmp.event.VideoData;
79+
import org.red5.server.net.rtmp.message.Constants;
7980
import org.red5.server.net.rtmp.message.Header;
8081
import org.red5.server.net.rtmp.status.Status;
8182
import org.red5.server.net.rtmp.status.StatusCodes;
@@ -256,6 +257,10 @@ public void dispatchEvent(IEvent event) {
256257
return;
257258
}
258259
int eventTime = rtmpEvent.getTimestamp();
260+
// verify and / or set source type
261+
if (rtmpEvent.getSourceType() != Constants.SOURCE_TYPE_LIVE) {
262+
rtmpEvent.setSourceType(Constants.SOURCE_TYPE_LIVE);
263+
}
259264
/*
260265
if (log.isTraceEnabled()) {
261266
// If this is first packet save its timestamp; expect it is

0 commit comments

Comments
 (0)