Merge pull request #752 from ritzalam/update-to-red5-2015-08-10-snapshot
Update to red5 2015 08 10 snapshot
This commit is contained in:
commit
9451876c72
@ -3,25 +3,30 @@
|
|||||||
<classpathentry kind="src" path="src/main/java"/>
|
<classpathentry kind="src" path="src/main/java"/>
|
||||||
<classpathentry kind="src" path="src/test/java"/>
|
<classpathentry kind="src" path="src/test/java"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
<classpathentry kind="lib" path="lib/com.springsource.slf4j.api-1.6.1.jar"/>
|
<classpathentry kind="lib" path="lib/aopalliance-1.0.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/com.springsource.slf4j.bridge-1.6.1.jar"/>
|
|
||||||
<classpathentry kind="lib" path="lib/commons-pool-1.5.6.jar"/>
|
<classpathentry kind="lib" path="lib/commons-pool-1.5.6.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/easymock-2.4.jar"/>
|
<classpathentry kind="lib" path="lib/easymock-2.4.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jcl-over-slf4j-1.6.1.jar"/>
|
<classpathentry kind="lib" path="lib/gson-1.7.1.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/jcip-annotations-1.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/jcl-over-slf4j-1.7.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jedis-2.0.0.jar"/>
|
<classpathentry kind="lib" path="lib/jedis-2.0.0.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jul-to-slf4j-1.6.1.jar"/>
|
<classpathentry kind="lib" path="lib/jul-to-slf4j-1.7.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/log4j-over-slf4j-1.6.1.jar"/>
|
<classpathentry kind="lib" path="lib/log4j-over-slf4j-1.7.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/logback-classic-0.9.28.jar"/>
|
<classpathentry kind="lib" path="lib/logback-classic-1.1.2.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/logback-core-0.9.28.jar"/>
|
<classpathentry kind="lib" path="lib/logback-core-1.1.2.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/mina-core-2.0.4.jar"/>
|
<classpathentry kind="lib" path="lib/mina-core-2.0.8.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/mina-integration-beans-2.0.4.jar"/>
|
<classpathentry kind="lib" path="lib/mina-integration-beans-2.0.8.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/mina-integration-jmx-2.0.4.jar"/>
|
<classpathentry kind="lib" path="lib/mina-integration-jmx-2.0.8.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/red5-io-1.0.5-RELEASE.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/red5-server-1.0.5-RELEASE.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/red5-server-common-1.0.5-RELEASE.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/servlet-api-2.5.jar"/>
|
<classpathentry kind="lib" path="lib/servlet-api-2.5.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/spring-beans-3.0.6.RELEASE.jar"/>
|
<classpathentry kind="lib" path="lib/slf4j-api-1.7.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/spring-context-3.0.6.RELEASE.jar"/>
|
<classpathentry kind="lib" path="lib/spring-aop-4.0.8.RELEASE.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/spring-core-3.0.6.RELEASE.jar"/>
|
<classpathentry kind="lib" path="lib/spring-beans-4.0.7.RELEASE.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/spring-web-3.0.6.RELEASE.jar"/>
|
<classpathentry kind="lib" path="lib/spring-context-4.0.7.RELEASE.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/testng-5.8.jar"/>
|
<classpathentry kind="lib" path="lib/spring-core-4.0.7.RELEASE.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/red5-1.0r4406.jar"/>
|
<classpathentry kind="lib" path="lib/spring-web-4.0.8.RELEASE.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/bbb-common-message-0.0.5.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -63,9 +63,9 @@ dependencies {
|
|||||||
providedCompile 'org.springframework:spring-core:4.0.7.RELEASE@jar'
|
providedCompile 'org.springframework:spring-core:4.0.7.RELEASE@jar'
|
||||||
|
|
||||||
// Red5
|
// Red5
|
||||||
providedCompile 'org/red5:red5-server:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-server-common:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server-common:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-io:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-io:1.0.6-SNAPSHOT@jar'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||||
|
@ -62,9 +62,9 @@ dependencies {
|
|||||||
providedCompile 'org.springframework:spring-context:4.0.8.RELEASE@jar'
|
providedCompile 'org.springframework:spring-context:4.0.8.RELEASE@jar'
|
||||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||||
|
|
||||||
providedCompile 'org/red5:red5-server:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-server-common:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server-common:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-io:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-io:1.0.6-SNAPSHOT@jar'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||||
|
@ -77,8 +77,8 @@ dependencies {
|
|||||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||||
|
|
||||||
// Red5
|
// Red5
|
||||||
providedCompile 'org/red5:red5-server:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-server-common:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server-common:1.0.6-SNAPSHOT@jar'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="f330b47a-ef44-431d-8c83-1768892be326" version="10">
|
<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="f330b47a-ef44-431d-8c83-1768892be326" version="11">
|
||||||
<compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
|
<compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
|
||||||
<compilerSourcePath/>
|
<compilerSourcePath/>
|
||||||
<libraryPath defaultLinkType="0">
|
<libraryPath defaultLinkType="0">
|
||||||
<libraryPathEntry kind="4" path="">
|
<libraryPathEntry kind="4" path="">
|
||||||
@ -17,6 +17,7 @@
|
|||||||
<application path="BigBlueButton.mxml"/>
|
<application path="BigBlueButton.mxml"/>
|
||||||
</applications>
|
</applications>
|
||||||
<modules/>
|
<modules/>
|
||||||
|
<workers/>
|
||||||
<buildCSSFiles/>
|
<buildCSSFiles/>
|
||||||
<flashCatalyst validateFlashCatalystCompatibility="false"/>
|
<flashCatalyst validateFlashCatalystCompatibility="false"/>
|
||||||
</actionScriptProperties>
|
</actionScriptProperties>
|
||||||
|
@ -208,7 +208,7 @@ package org.bigbluebutton.modules.videoconf.business
|
|||||||
ns.videoStreamSettings = h264;
|
ns.videoStreamSettings = h264;
|
||||||
}
|
}
|
||||||
|
|
||||||
ns.publish(e.stream);
|
ns.publish(e.stream, "live");
|
||||||
camerasPublishing[e.stream] = ns;
|
camerasPublishing[e.stream] = ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,9 +84,9 @@ dependencies {
|
|||||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||||
|
|
||||||
// Red5
|
// Red5
|
||||||
providedCompile 'org/red5:red5-server:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-server-common:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-server-common:1.0.6-SNAPSHOT@jar'
|
||||||
providedCompile 'org.red5:red5-io:1.0.5-RELEASE@jar'
|
providedCompile 'org.red5:red5-io:1.0.6-SNAPSHOT@jar'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||||
|
@ -81,5 +81,17 @@ public class ScreenVideo implements IVideoStreamCodec {
|
|||||||
log.debug("getting DecoderConfiguration");
|
log.debug("getting DecoderConfiguration");
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FrameData getInterframe(int arg0) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getNumInterframes() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
import org.red5.server.api.event.IEvent;
|
import org.red5.server.api.event.IEvent;
|
||||||
import org.red5.server.api.scope.IScope;
|
import org.red5.server.api.scope.IScope;
|
||||||
@ -38,12 +39,12 @@ import org.red5.server.messaging.PipeConnectionEvent;
|
|||||||
import org.red5.server.net.rtmp.event.IRTMPEvent;
|
import org.red5.server.net.rtmp.event.IRTMPEvent;
|
||||||
import org.red5.server.net.rtmp.event.Notify;
|
import org.red5.server.net.rtmp.event.Notify;
|
||||||
import org.red5.server.net.rtmp.event.VideoData;
|
import org.red5.server.net.rtmp.event.VideoData;
|
||||||
|
import org.red5.server.net.rtmp.message.Constants;
|
||||||
import org.red5.server.stream.message.RTMPMessage;
|
import org.red5.server.stream.message.RTMPMessage;
|
||||||
import org.red5.codec.IVideoStreamCodec;
|
import org.red5.codec.IVideoStreamCodec;
|
||||||
import org.red5.codec.IStreamCodecInfo;
|
import org.red5.codec.IStreamCodecInfo;
|
||||||
import org.red5.codec.StreamCodecInfo;
|
import org.red5.codec.StreamCodecInfo;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import org.red5.server.api.stream.IStreamPacket;;
|
import org.red5.server.api.stream.IStreamPacket;;
|
||||||
|
|
||||||
public class ScreenVideoBroadcastStream implements IBroadcastStream, IProvider, IPipeConnectionListener {
|
public class ScreenVideoBroadcastStream implements IBroadcastStream, IProvider, IPipeConnectionListener {
|
||||||
@ -189,7 +190,7 @@ public class ScreenVideoBroadcastStream implements IBroadcastStream, IProvider,
|
|||||||
if (event instanceof IRTMPEvent) {
|
if (event instanceof IRTMPEvent) {
|
||||||
IRTMPEvent rtmpEvent = (IRTMPEvent) event;
|
IRTMPEvent rtmpEvent = (IRTMPEvent) event;
|
||||||
if (livePipe != null) {
|
if (livePipe != null) {
|
||||||
RTMPMessage msg = RTMPMessage.build(rtmpEvent);
|
RTMPMessage msg = RTMPMessage.build(rtmpEvent, Constants.SOURCE_TYPE_LIVE);
|
||||||
|
|
||||||
if (creationTime == null)
|
if (creationTime == null)
|
||||||
creationTime = (long)rtmpEvent.getTimestamp();
|
creationTime = (long)rtmpEvent.getTimestamp();
|
||||||
@ -199,7 +200,7 @@ public class ScreenVideoBroadcastStream implements IBroadcastStream, IProvider,
|
|||||||
streamCodecInfo.setHasVideo(true);
|
streamCodecInfo.setHasVideo(true);
|
||||||
streamCodecInfo.setVideoCodec(videoStreamCodec);
|
streamCodecInfo.setVideoCodec(videoStreamCodec);
|
||||||
videoStreamCodec.reset();
|
videoStreamCodec.reset();
|
||||||
videoStreamCodec.addData(((VideoData) rtmpEvent).getData());
|
videoStreamCodec.addData(((VideoData) rtmpEvent).getData());
|
||||||
livePipe.pushMessage(msg);
|
livePipe.pushMessage(msg);
|
||||||
|
|
||||||
// Notify listeners about received packet
|
// Notify listeners about received packet
|
||||||
|
@ -44,10 +44,12 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime
|
|||||||
private var stop = true
|
private var stop = true
|
||||||
private var mouseLoc:Point = new Point(100,100)
|
private var mouseLoc:Point = new Point(100,100)
|
||||||
private var pendingGenKeyFrameRequest = false
|
private var pendingGenKeyFrameRequest = false
|
||||||
private var timestamp = 0L;
|
|
||||||
private var lastUserKeyFrameRequest = 0L
|
private var lastUserKeyFrameRequest = 0L
|
||||||
private var sentInitialKeyFrame = false;
|
private var sentInitialKeyFrame = false;
|
||||||
|
private var lastKeyFrameSentOn = 0L
|
||||||
|
private var streamStartedOn = 0L
|
||||||
|
private var streamStarted = false
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Schedule to generate a key frame after 30seconds of a request.
|
* Schedule to generate a key frame after 30seconds of a request.
|
||||||
* This prevents us from generating unnecessary key frames when
|
* This prevents us from generating unnecessary key frames when
|
||||||
@ -64,13 +66,23 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def scheduleGenerateFrame() {
|
def scheduleGenerateFrame() {
|
||||||
val mainActor = self
|
val mainActor = self
|
||||||
actor {
|
actor {
|
||||||
Thread.sleep(interframeInterval)
|
Thread.sleep(interframeInterval)
|
||||||
mainActor ! "GenerateFrame"
|
val now = System.currentTimeMillis()
|
||||||
}
|
if ((now - lastKeyFrameSentOn) > 60000) {
|
||||||
}
|
// Generate a key frame every 1 minute. The reason is that if
|
||||||
|
// packets are dropped for a user with slow connection, packets
|
||||||
|
// will continue to be dropped for that user until a key frame
|
||||||
|
// is sent. (ralam july 15, 2015)
|
||||||
|
mainActor ! "GenerateAKeyFrame"
|
||||||
|
} else {
|
||||||
|
mainActor ! "GenerateFrame"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def act() = {
|
def act() = {
|
||||||
loop {
|
loop {
|
||||||
@ -87,20 +99,20 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case GenerateKeyFrame => {
|
case GenerateKeyFrame => {
|
||||||
val now = System.currentTimeMillis()
|
// do not generate a key frame every time a user joins as we
|
||||||
// Wait 30sec between keyframe request from the users. This prevents
|
// generate key frames regularly now.
|
||||||
// creating many keyframes when users join the session close to one
|
//scheduleGenerateKeyFrame(keyFrameInterval)
|
||||||
// another.
|
|
||||||
if (now - lastUserKeyFrameRequest > 30000) {
|
|
||||||
lastUserKeyFrameRequest = now
|
|
||||||
scheduleGenerateKeyFrame(keyFrameInterval)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
case "GenerateAKeyFrame" => {
|
case "GenerateAKeyFrame" => {
|
||||||
pendingGenKeyFrameRequest = false
|
pendingGenKeyFrameRequest = false
|
||||||
log.debug("Session: Generating Key Frame for room %s", room)
|
log.debug("Session: Generating Key Frame for room %s", room)
|
||||||
generateFrame(true)
|
generateFrame(true)
|
||||||
|
lastKeyFrameSentOn = System.currentTimeMillis()
|
||||||
|
if (!stop) {
|
||||||
|
scheduleGenerateFrame()
|
||||||
|
} else {
|
||||||
|
exit()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case b: UpdateSessionBlock => updateBlock(b.position, b.blockData, b.keyframe, b.seqNum)
|
case b: UpdateSessionBlock => updateBlock(b.position, b.blockData, b.keyframe, b.seqNum)
|
||||||
case m: Any => log.warning("Session: Unknown message [%s]", m)
|
case m: Any => log.warning("Session: Unknown message [%s]", m)
|
||||||
@ -153,8 +165,15 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime
|
|||||||
sessionManager ! new RemoveSession(room)
|
sessionManager ! new RemoveSession(room)
|
||||||
} else {
|
} else {
|
||||||
if (blockManager != null) {
|
if (blockManager != null) {
|
||||||
timestamp += 50;
|
|
||||||
stream ! new UpdateStream(room, blockManager.generateFrame(keyframe), timestamp)
|
val now = System.currentTimeMillis()
|
||||||
|
if (!streamStarted) {
|
||||||
|
streamStarted = true
|
||||||
|
streamStartedOn = now
|
||||||
|
}
|
||||||
|
|
||||||
|
val ts = now - streamStartedOn
|
||||||
|
stream ! new UpdateStream(room, blockManager.generateFrame(keyframe), ts)
|
||||||
stream ! new UpdateStreamMouseLocation(room, mouseLoc)
|
stream ! new UpdateStreamMouseLocation(room, mouseLoc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,9 +82,9 @@ dependencies {
|
|||||||
compile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
compile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||||
|
|
||||||
// Red5
|
// Red5
|
||||||
compile 'org/red5:red5-server:1.0.5-RELEASE@jar'
|
compile 'org.red5:red5-server:1.0.6-SNAPSHOT@jar'
|
||||||
compile 'org.red5:red5-server-common:1.0.5-RELEASE@jar'
|
compile 'org.red5:red5-server-common:1.0.6-SNAPSHOT@jar'
|
||||||
compile 'org.red5:red5-io:1.0.5-RELEASE@jar'
|
compile 'org.red5:red5-io:1.0.6-SNAPSHOT@jar'
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
compile 'ch.qos.logback:logback-core:1.1.2@jar'
|
compile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||||
|
Loading…
Reference in New Issue
Block a user