diff --git a/client/pom.xml b/client/pom.xml index 9bad3b3d14e404f95374b8f7e1fa02d13873912a..5881d9f25c55718e2c249fda90d123c1a2b7673f 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.red5</groupId> <artifactId>red5-parent</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>red5-client</artifactId> diff --git a/client/src/main/java/org/red5/client/Red5Client.java b/client/src/main/java/org/red5/client/Red5Client.java index b2e6e5aaa4e9a1ce2e47b47c599fe7e043661271..9d6962c51614876fce43b232de8cd98afcf57234 100644 --- a/client/src/main/java/org/red5/client/Red5Client.java +++ b/client/src/main/java/org/red5/client/Red5Client.java @@ -18,7 +18,7 @@ public final class Red5Client { /** * Current server version with revision */ - public static final String VERSION = "Red5 Client 1.3.25"; + public static final String VERSION = "Red5 Client 1.3.26"; /** * Create a new Red5Client object using the connection local to the current thread A bit of magic that lets you access the red5 scope diff --git a/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java b/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java index 3ab7436aa452c4e57a10540b4371a27a76ac6805..c280e4f183be053c02a22d83c9bcedac5bcb8693 100644 --- a/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java +++ b/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java @@ -11,7 +11,7 @@ import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -98,7 +98,7 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I /** * Net stream handling */ - private volatile CopyOnWriteArrayList<NetStreamPrivateData> streamDataList = new CopyOnWriteArrayList<>(); + private volatile CopyOnWriteArraySet<NetStreamPrivateData> streamDataList = new CopyOnWriteArraySet<>(); /** * Task to start on connection close @@ -577,7 +577,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I log.debug("publish - stream id: {}, name: {}, mode: {}", streamId, name, mode); // setup the netstream handler if (handler != null) { - NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId.doubleValue())).findFirst().orElse(null); + final int sid = streamId.intValue(); + NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null); if (streamData != null) { log.debug("Setting handler on stream data - handler: {}", handler); streamData.handler = handler; @@ -608,7 +609,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I @Override public void publishStreamData(Number streamId, IMessage message) { // get the stream data by index of the list - NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId.doubleValue())).findFirst().orElse(null); + final int sid = streamId.intValue(); + NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null); if (streamData != null) { if (streamData.connConsumer != null) { streamData.connConsumer.pushMessage(null, message); @@ -808,9 +810,10 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I } if (streamId != null) { // try lookup by stream id, if null return the first one - NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId)).findFirst().orElse(streamDataList.get(0)); + final int sid = streamId.intValue(); + NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null); if (streamData == null) { - log.warn("Stream data was null for id: {}", streamId); + log.warn("Stream data was null for id: {} entry count: {}", streamId, streamDataList.size()); } else if (streamData.handler != null) { log.debug("Got stream data and handler"); streamData.handler.onStreamEvent((Notify) command); @@ -1028,9 +1031,9 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I Object callResult = call.getResult(); if (callResult != null) { // we expect a number consisting of the stream id, but we'll check for an object map as well - Number streamId = null; + int streamId = -1; if (callResult instanceof Number) { - streamId = (Number) callResult; + streamId = ((Number) callResult).intValue(); } else if (callResult instanceof Map) { Map<?, ?> map = (Map<?, ?>) callResult; // XXX(paul) log out the map contents @@ -1038,14 +1041,14 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I if (map.containsKey("streamId")) { Object tmpStreamId = map.get("streamId"); if (tmpStreamId instanceof Number) { - streamId = (Number) tmpStreamId; + streamId = ((Number) tmpStreamId).intValue(); } else { log.warn("CreateStreamCallBack resultReceived - stream id is not a number: {}", tmpStreamId); } } } log.debug("CreateStreamCallBack resultReceived - stream id: {} call: {} connection: {}", streamId, call, conn); - if (conn != null && streamId != null) { + if (conn != null && streamId != -1) { log.debug("Setting new net stream"); NetStream stream = new NetStream(streamEventDispatcher); stream.setConnection(conn); @@ -1100,7 +1103,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I log.debug("Deleting net stream"); conn.removeClientStream(streamId); // send a delete notify? - NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId)).findFirst().orElse(null); + final int sid = streamId.intValue(); + NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null); if (streamData != null) { streamDataList.remove(streamData); } else { @@ -1148,22 +1152,22 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I public volatile ConnectionConsumer connConsumer; - final Number streamId; + private final int streamId; - NetStreamPrivateData(Number streamId) { + NetStreamPrivateData(int streamId) { this.streamId = streamId; if (streamEventHandler != null) { handler = streamEventHandler; } } - public Number getStreamId() { + public int getStreamId() { return streamId; } @Override public int hashCode() { - return streamId.hashCode(); + return streamId; } } diff --git a/client/src/main/resources/logback.xml b/client/src/main/resources/logback.xml new file mode 100644 index 0000000000000000000000000000000000000000..eae9066fb5117aaacc5391ffd363b0ce302012d5 --- /dev/null +++ b/client/src/main/resources/logback.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<configuration> + + <jmxConfigurator /> + + <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE"> + <encoder> + <pattern>[%p] [%thread] %logger - %msg%n</pattern> + </encoder> + </appender> + + <root level="INFO"> + <appender-ref ref="CONSOLE" /> + </root> + + <logger name="org.red5.server.service.ReflectionUtils" level="TRACE" /> + <logger name="org.red5.server.service.ServiceInvoker" level="TRACE" /> + <logger name="org.red5.server.net.rtmp.RTMPHandler" level="TRACE" /> + + <logger name="org.red5.client.net.rtmp.BaseRTMPClientHandler" level="TRACE" /> + <logger name="org.red5.client.test" level="DEBUG" /> + +</configuration> \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml index 7382320a0002f0267f73e66a8d88d637e95c97ff..fa9fd28f4f8deda14b33095f48d232088122315f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.red5</groupId> <artifactId>red5-parent</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>red5-server-common</artifactId> @@ -124,7 +124,7 @@ <dependency> <groupId>net.engio</groupId> <artifactId>mbassador</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </dependency> --> <dependency> <groupId>junit</groupId> diff --git a/common/src/main/java/org/red5/server/api/Red5.java b/common/src/main/java/org/red5/server/api/Red5.java index ff2678c0092f6485d41fc7a999d84aa2988f9fcc..a4fb0c7f32b19208ddc7510445e2375c4d8d8378 100644 --- a/common/src/main/java/org/red5/server/api/Red5.java +++ b/common/src/main/java/org/red5/server/api/Red5.java @@ -55,12 +55,12 @@ public final class Red5 { /** * Server version with revision */ - public static final String VERSION = "Red5 Server 1.3.25"; + public static final String VERSION = "Red5 Server 1.3.26"; /** * Server version for fmsVer requests */ - public static final String FMS_VERSION = "RED5/1,3,25,0"; + public static final String FMS_VERSION = "RED5/1,3,26,0"; /** * Server capabilities diff --git a/common/src/main/java/org/red5/server/stream/AbstractClientStream.java b/common/src/main/java/org/red5/server/stream/AbstractClientStream.java index 08f2c6b130c78aa77e879a0e601d9998723c1170..107e893879956699b5b0e1af88c83124deb89ab4 100644 --- a/common/src/main/java/org/red5/server/stream/AbstractClientStream.java +++ b/common/src/main/java/org/red5/server/stream/AbstractClientStream.java @@ -20,7 +20,7 @@ public abstract class AbstractClientStream extends AbstractStream implements ICl /** * Stream identifier. Unique across server. */ - private Number streamId = 0.0d; + private int streamId; /** * Stream name of the broadcasting stream. @@ -43,10 +43,20 @@ public abstract class AbstractClientStream extends AbstractStream implements ICl * @param streamId * Stream id */ - public void setStreamId(Number streamId) { + public void setStreamId(int streamId) { this.streamId = streamId; } + /** + * Setter for stream id + * + * @param streamId + * Stream id + */ + public void setStreamId(Number streamId) { + this.streamId = streamId.intValue(); + } + /** * Return stream id * diff --git a/io/pom.xml b/io/pom.xml index 1d7df3754a0a75d3f44cee861867302eb9cd557b..ffbd23a02487ffd3f7217949ca17179a2cde4364 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.red5</groupId> <artifactId>red5-parent</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>red5-io</artifactId> diff --git a/pom.xml b/pom.xml index 8c01f81136a9969f45170d72cd408e6952b21c73..cb775dc59676e172b49a8e15b3fdd66d427eafb7 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ <name>Red5</name> <description>The Red5 server</description> <groupId>org.red5</groupId> - <version>1.3.25</version> + <version>1.3.26</version> <url>https://github.com/Red5/red5-server</url> <inceptionYear>2005</inceptionYear> <organization> diff --git a/server/pom.xml b/server/pom.xml index c49dce6f6b4603bad7e1432b5c3905e1f3932af8..ee63aaa6fbe81bf89fa9038c9a0b749e7c98b3d3 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.red5</groupId> <artifactId>red5-parent</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>red5-server</artifactId> diff --git a/service/pom.xml b/service/pom.xml index 28c49c5b32f92706c473ef69391495e893fd28ed..e08e568a0ff722f410d5278884b77079d74bc235 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>org.red5</groupId> <artifactId>red5-parent</artifactId> - <version>1.3.25</version> + <version>1.3.26</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>red5-service</artifactId>