diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt index 3409c0ecd8a3a1b75f3e9c861cac396ab96bb6a9..a951b1e1d12fa9cb9dd299b0cf1908bb9e33e79a 100755 --- a/akka-bbb-apps/build.sbt +++ b/akka-bbb-apps/build.sbt @@ -49,8 +49,8 @@ libraryDependencies ++= { "joda-time" % "joda-time" % "2.3", "com.google.code.gson" % "gson" % "1.7.1", "redis.clients" % "jedis" % "2.7.2", - "org.apache.commons" % "commons-lang3" % "3.2", - "org.bigbluebutton" % "bbb-common-message" % "0.0.13" + "org.apache.commons" % "commons-lang3" % "3.2", + "org.bigbluebutton" % "bbb-common-message" % "0.0.14-SNAPSHOT" )} seq(Revolver.settings: _*) diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/AbstractDeskShareRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/AbstractDeskShareRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..90758f8303e22993c94dbd71cd9df95defdc80d6 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/AbstractDeskShareRecordEvent.java @@ -0,0 +1,28 @@ +/** +* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ +* +* Copyright (c) 2015 BigBlueButton Inc. and by respective authors (see below). +* +* This program is free software; you can redistribute it and/or modify it under the +* terms of the GNU Lesser General Public License as published by the Free Software +* Foundation; either version 3.0 of the License, or (at your option) any later +* version. +* +* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License along +* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. +* +*/ +package org.bigbluebutton.core.recorders.events; + +import org.bigbluebutton.core.service.recorder.RecordEvent; + +public abstract class AbstractDeskShareRecordEvent extends RecordEvent { + + public AbstractDeskShareRecordEvent() { + setModule("DESKSHARE"); + } +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareNotifyViewersRTMPRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareNotifyViewersRTMPRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..27ddf2886c9ac65f420f4117d925843b3eae8392 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareNotifyViewersRTMPRecordEvent.java @@ -0,0 +1,26 @@ +package org.bigbluebutton.core.recorders.events; + +public class DeskShareNotifyViewersRTMPRecordEvent extends + AbstractDeskShareRecordEvent { + + public DeskShareNotifyViewersRTMPRecordEvent() { + super(); + setEvent("DeskShareNotifyViewersRTMP"); + } + + public void setStreamPath(String streamPath) { + eventMap.put("streamPath", streamPath); + } + + public void setBroadcasting(Boolean broadcasting) { + eventMap.put("broadcasting", broadcasting.toString()); + } + + public void setVideoWidth(int videoWidth) { + eventMap.put("videoWidth", Integer.toString(videoWidth)); + } + + public void setVideoHeight(int videoHeight) { + eventMap.put("videoHeight", Integer.toString(videoHeight)); + } +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRTMPRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRTMPRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..83389b00894fa472d48fbced1c27223cc7a6f186 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRTMPRecordEvent.java @@ -0,0 +1,14 @@ +package org.bigbluebutton.core.recorders.events; + +public class DeskShareStartRTMPRecordEvent extends + AbstractDeskShareRecordEvent { + + public DeskShareStartRTMPRecordEvent() { + super(); + setEvent("DeskShareStartRTMP"); + } + + public void setStreamPath(String streamPath) { + eventMap.put("streamPath", streamPath); + } +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRecordingRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRecordingRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..a45072e3f9b9eea950a9ad51ed1ca341c39395e5 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStartRecordingRecordEvent.java @@ -0,0 +1,14 @@ +package org.bigbluebutton.core.recorders.events; + +public class DeskShareStartRecordingRecordEvent extends + AbstractDeskShareRecordEvent { + + public DeskShareStartRecordingRecordEvent() { + super(); + setEvent("DeskShareStartRecording"); + } + + public void setFilename(String filename) { + eventMap.put("filename", filename); + } +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRTMPRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRTMPRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..76457cdfbfeb0fe88a445ae04c8eb8e5d2082966 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRTMPRecordEvent.java @@ -0,0 +1,14 @@ +package org.bigbluebutton.core.recorders.events; + +public class DeskShareStopRTMPRecordEvent extends + AbstractDeskShareRecordEvent { + + public DeskShareStopRTMPRecordEvent() { + super(); + setEvent("DeskShareStopRTMP"); + } + + public void setStreamPath(String streamPath) { + eventMap.put("streamPath", streamPath); + } +} diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRecordingRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRecordingRecordEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..0023d1fe401fb7136ab6b863c7083f2a87dd7c45 --- /dev/null +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/DeskShareStopRecordingRecordEvent.java @@ -0,0 +1,14 @@ +package org.bigbluebutton.core.recorders.events; + +public class DeskShareStopRecordingRecordEvent extends + AbstractDeskShareRecordEvent { + + public DeskShareStopRecordingRecordEvent() { + super(); + setEvent("DeskShareStopRecording"); + } + + public void setFilename(String filename) { + eventMap.put("filename", filename); + } +} diff --git a/akka-bbb-apps/src/main/resources/application.conf b/akka-bbb-apps/src/main/resources/application.conf index d0e832cc2bf155818e0430ab9d3ad84bb77783ac..8629421b9c2fe03c342e1e8cfd1f3583bc16d3a6 100755 --- a/akka-bbb-apps/src/main/resources/application.conf +++ b/akka-bbb-apps/src/main/resources/application.conf @@ -31,9 +31,9 @@ redis { host="127.0.0.1" port=6379 password="" -} +} red5 { - deskshareip="127.0.0.1" - deskshareapp="live" + deskshareip="192.168.0.109" + deskshareapp="video-broadcast" } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala index c399cd10a9a1c6ad053f0160a656402679de421e..54536f2f8f26cd49d88dff5708dcbfec760b9f10 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala @@ -57,11 +57,11 @@ class BigBlueButtonActor(val system: ActorSystem, recorderApp: RecorderApplicati } private def findMeetingWithVoiceConfId(voiceConfId: String): Option[RunningMeeting] = { - // println("searching meeeting with voiceConfId=" + voiceConfId) - // meetings.values.find(m => { - // println("^^^^^^" + m.mProps.voiceBridge) - // m.mProps.voiceBridge == voiceConfId - // }) + println("searching meeeting with voiceConfId=" + voiceConfId) + meetings.values.find(m => { + println("^^^^^^" + m.mProps.voiceBridge) + m.mProps.voiceBridge == voiceConfId + }) meetings.values.find(m => m.mProps.voiceBridge == voiceConfId) } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala index 8fe2836a2ccf522fecdf6628b40cef8988ed57d2..ade84e56ab154733b5abc1e962bbd10646fdbfeb 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala @@ -318,6 +318,7 @@ class MeetingActor(val mProps: MeetingProperties, val outGW: OutMessageGateway) val streamPath = "rtmp://" + mProps.red5DeskShareIP + "/" + mProps.red5DeskShareApp + "/" + mProps.meetingID + "/" + mProps.meetingID + "-" + timestamp + println("____ in handleDeskShareStartedRequest and streamPath=" + streamPath) // Tell FreeSwitch to broadcast to RTMP outGW.send(new DeskShareStartRTMPBroadcast(msg.conferenceName, streamPath, timestamp)) @@ -368,9 +369,9 @@ class MeetingActor(val mProps: MeetingProperties, val outGW: OutMessageGateway) } private def handleDeskShareRTMPBroadcastStartedRequest(msg: DeskShareRTMPBroadcastStartedRequest) { - // println("\nMeetingActor-handleDeskShareRTMPBroadcastStartedRequest\n") - // println("isRecording=" + meetingModel.isRecording()) - // println("recorded=" + mProps.recorded) + println("\nMeetingActor-handleDeskShareRTMPBroadcastStartedRequest\n") + println("isRecording=" + meetingModel.isRecording()) + println("recorded=" + mProps.recorded) // only valid if not broadcasting yet if (!meetingModel.isBroadcastingRTMP()) { @@ -388,9 +389,9 @@ class MeetingActor(val mProps: MeetingProperties, val outGW: OutMessageGateway) } private def handleDeskShareRTMPBroadcastStoppedRequest(msg: DeskShareRTMPBroadcastStoppedRequest) { - // println("\nMeetingActor-handleDeskShareRTMPBroadcastStoppedRequest\n") - // println("isRecording=" + meetingModel.isRecording()) - // println("recorded=" + mProps.recorded) + println("\nMeetingActor-handleDeskShareRTMPBroadcastStoppedRequest\n") + println("isRecording=" + meetingModel.isRecording()) + println("recorded=" + mProps.recorded) // only valid if currently broadcasting if (meetingModel.isBroadcastingRTMP()) { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala index d3365f115c39c43a52095ce84714aca33b1a7c3e..e4bbc010d4da843dd6c0c241523d454d00efb8f9 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala @@ -29,6 +29,11 @@ import org.bigbluebutton.core.recorders.events.ParticipantEndAndKickAllRecordEve import org.bigbluebutton.core.recorders.events.UndoShapeWhiteboardRecordEvent import org.bigbluebutton.core.recorders.events.ClearPageWhiteboardRecordEvent import org.bigbluebutton.core.recorders.events.AddShapeWhiteboardRecordEvent +import org.bigbluebutton.core.recorders.events.DeskShareStartRTMPRecordEvent +import org.bigbluebutton.core.recorders.events.DeskShareStopRTMPRecordEvent +import org.bigbluebutton.core.recorders.events.DeskShareStartRecordingRecordEvent +import org.bigbluebutton.core.recorders.events.DeskShareStopRecordingRecordEvent +import org.bigbluebutton.core.recorders.events.DeskShareNotifyViewersRTMPRecordEvent // import org.bigbluebutton.core.service.whiteboard.WhiteboardKeyUtil import org.bigbluebutton.common.messages.WhiteboardKeyUtil import org.bigbluebutton.core.recorders.events.ModifyTextWhiteboardRecordEvent @@ -69,6 +74,11 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication) case msg: SendWhiteboardAnnotationEvent => handleSendWhiteboardAnnotationEvent(msg) case msg: ClearWhiteboardEvent => handleClearWhiteboardEvent(msg) case msg: UndoWhiteboardEvent => handleUndoWhiteboardEvent(msg) + case msg: DeskShareStartRTMPBroadcast => handleDeskShareStartRTMPBroadcast(msg) + case msg: DeskShareStopRTMPBroadcast => handleDeskShareStopRTMPBroadcast(msg) + case msg: DeskShareStartRecording => handleDeskShareStartRecording(msg) + case msg: DeskShareStopRecording => handleDeskShareStopRecording(msg) + case msg: DeskShareNotifyViewersRTMP => handleDeskShareNotifyViewersRTMP(msg) case _ => // do nothing } @@ -424,4 +434,54 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication) event.setShapeId(msg.shapeId); recorder.record(msg.meetingID, event) } + + private def handleDeskShareStartRTMPBroadcast(msg: DeskShareStartRTMPBroadcast) { + val event = new DeskShareStartRTMPRecordEvent() + event.setMeetingId(msg.conferenceName) + event.setStreamPath(msg.streamPath) + event.setTimestamp(TimestampGenerator.generateTimestamp) + println("\n\n\n\n recorder handleDeskShareStartRTMPBroadcast\n\n\n\n") + recorder.record(msg.conferenceName, event) + } + + private def handleDeskShareStopRTMPBroadcast(msg: DeskShareStopRTMPBroadcast) { + val event = new DeskShareStopRTMPRecordEvent() + event.setMeetingId(msg.conferenceName) + event.setStreamPath(msg.streamPath) + event.setTimestamp(TimestampGenerator.generateTimestamp) + println("\n\n\n\n recorder handleDeskShareStopRTMPBroadcast\n\n\n\n") + recorder.record(msg.conferenceName, event) + } + + private def handleDeskShareStartRecording(msg: DeskShareStartRecording) { + val event = new DeskShareStartRecordingRecordEvent() + event.setMeetingId(msg.conferenceName) + event.setFilename(msg.filename) + event.setTimestamp(TimestampGenerator.generateTimestamp) + println("\n\n\n\n recorder handleDeskShareStartRecording\n\n\n\n") + recorder.record(msg.conferenceName, event) + } + + private def handleDeskShareStopRecording(msg: DeskShareStopRecording) { + val event = new DeskShareStopRecordingRecordEvent() + event.setMeetingId(msg.conferenceName) + event.setFilename(msg.filename) + event.setTimestamp(TimestampGenerator.generateTimestamp) + println("\n\n\n\n recorder handleDeskShareStopRecording\n\n\n\n") + recorder.record(msg.conferenceName, event) + } + + private def handleDeskShareNotifyViewersRTMP(msg: DeskShareNotifyViewersRTMP) { + val event = new DeskShareNotifyViewersRTMPRecordEvent() + event.setMeetingId(msg.meetingID) + event.setStreamPath(msg.streamPath) + event.setBroadcasting(msg.broadcasting) + event.setVideoWidth(msg.videoWidth) + event.setVideoHeight(msg.videoHeight) + event.setTimestamp(TimestampGenerator.generateTimestamp) + + println("\n\n\n\n recorder handleDeskShareNotifyViewersRTMP\n\n\n\n") + recorder.record(msg.meetingID, event) + } + } \ No newline at end of file diff --git a/akka-bbb-fsesl/build.sbt b/akka-bbb-fsesl/build.sbt index 0ea8a8eb04168b2438701ff19a4ccefffac7d684..5bc27e861063aaf6001d99f1265232b16a47d696 100755 --- a/akka-bbb-fsesl/build.sbt +++ b/akka-bbb-fsesl/build.sbt @@ -50,8 +50,8 @@ libraryDependencies ++= { "com.google.code.gson" % "gson" % "1.7.1", "redis.clients" % "jedis" % "2.1.0", "org.apache.commons" % "commons-lang3" % "3.2", - "org.bigbluebutton" % "bbb-common-message" % "0.0.13", - "org.bigbluebutton" % "bbb-fsesl-client" % "0.0.2" + "org.bigbluebutton" % "bbb-common-message" % "0.0.14-SNAPSHOT", + "org.bigbluebutton" % "bbb-fsesl-client" % "0.0.3-SNAPSHOT" )} seq(Revolver.settings: _*) diff --git a/akka-bbb-fsesl/src/main/resources/application.conf b/akka-bbb-fsesl/src/main/resources/application.conf index 391e7827b8c39e967da65516dd11ea58577be125..4b0460696caa2f00d4f87c86fcf3ebab9721b150 100755 --- a/akka-bbb-fsesl/src/main/resources/application.conf +++ b/akka-bbb-fsesl/src/main/resources/application.conf @@ -19,7 +19,7 @@ akka { freeswitch { esl { - host="127.0.0.1" + host="192.168.23.45" port=8021 password="ClueCon" } diff --git a/bbb-common-message/build.sbt b/bbb-common-message/build.sbt index 6d78d92b26c6fe47b334223a0271d0b08a43b64d..24215e66984cef145136a77d57b872861c35a297 100755 --- a/bbb-common-message/build.sbt +++ b/bbb-common-message/build.sbt @@ -4,7 +4,7 @@ name := "bbb-common-message" organization := "org.bigbluebutton" -version := "0.0.13" +version := "0.0.14-SNAPSHOT" // We want to have our jar files in lib_managed dir. // This way we'll have the right path when we import @@ -48,19 +48,19 @@ autoScalaLibrary := false * publish to the local maven repo using "sbt publish" */ // Uncomment this to publish to local maven repo while commenting out the nexus repo -//publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) +publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/.m2/repository"))) // Comment this out when publishing to local maven repo using SNAPSHOT version. // To push to sonatype "sbt publishSigned" -publishTo := { - val nexus = "https://oss.sonatype.org/" - if (isSnapshot.value) - Some("snapshots" at nexus + "content/repositories/snapshots") - else - Some("releases" at nexus + "service/local/staging/deploy/maven2") -} +// publishTo := { +// val nexus = "https://oss.sonatype.org/" +// if (isSnapshot.value) +// Some("snapshots" at nexus + "content/repositories/snapshots") +// else +// Some("releases" at nexus + "service/local/staging/deploy/maven2") +// } // Enables publishing to maven repo diff --git a/bbb-fsesl-client/build.sbt b/bbb-fsesl-client/build.sbt index eb9f166450bfccabe95387d183c6caaaec100ca6..e8df772f62149a74df54b127b90f08967329d41a 100755 --- a/bbb-fsesl-client/build.sbt +++ b/bbb-fsesl-client/build.sbt @@ -6,7 +6,7 @@ description := "BigBlueButton custom FS-ESL client built on top of FS-ESL Java l organization := "org.bigbluebutton" -version := "0.0.2" +version := "0.0.3-SNAPSHOT" // We want to have our jar files in lib_managed dir. // This way we'll have the right path when we import diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java index d21613c306b6cf5701fa93ed2be71c587d4a0895..b5ead5e55dabf24b3cda153945e48b20dd034c66 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java @@ -179,7 +179,11 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { String meetingId = conn.getScope().getName(); String streamId = stream.getPublishedName(); - publisher.userSharedWebcamMessage(meetingId, userId, streamId); + //publisher.userSharedWebcamMessage(meetingId, userId, streamId); + log.info("^^^^^^^^^^^publisher.userSharedWebcamMessage(meetingId, userId, streamId);"); + + + VideoStreamListener listener = new VideoStreamListener(conn.getScope(), stream, recordVideoStream, userId, packetTimeout); listener.setEventRecordingService(recordingService); stream.addStreamListener(listener); @@ -212,7 +216,10 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { String meetingId = conn.getScope().getName(); String streamId = stream.getPublishedName(); - publisher.userUnshareWebcamRequestMessage(meetingId, userId, streamId); + //publisher.userUnshareWebcamRequestMessage(meetingId, userId, streamId); + log.info("^^^^^^^^^^^publisher.userUnshareWebcamRequestMessage(meetingId, userId, streamId);"); + + IStreamListener listener = streamListeners.remove(scopeName + "-" + stream.getPublishedName()); if (listener != null) { diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle index fc6a8dfd7ab0cf5a64cbe1b8ee8366c4c6031e4a..7dd9efc3d8a302c1e9c88b0681f99bdbf18fdc1a 100755 --- a/bigbluebutton-apps/build.gradle +++ b/bigbluebutton-apps/build.gradle @@ -105,7 +105,7 @@ dependencies { compile 'com.google.code.gson:gson:1.7.1' providedCompile 'org.apache.commons:commons-lang3:3.2' - compile 'org.bigbluebutton:bbb-common-message:0.0.13' + compile 'org.bigbluebutton:bbb-common-message:0.0.14-SNAPSHOT' } test { diff --git a/bigbluebutton-client/build.xml b/bigbluebutton-client/build.xml index bc9485afef5324a9eff00d87ad5fc17b56b5767b..be07181c649cb21e7bf51f385b409742c8a9f387 100755 --- a/bigbluebutton-client/build.xml +++ b/bigbluebutton-client/build.xml @@ -11,10 +11,10 @@ <property name="themeFile" value="BBBDefault.css"/> <property name="blackTheme" value="BBBBlack.css"/> <property name="LOCALE" value="en_US" /> - <property name="RESOURCES_DIR" value="${BASE_DIR}/resources" /> - <property name="PROD_RESOURCES_DIR" value="${RESOURCES_DIR}/prod" /> + <property name="RESOURCES_DIR" value="${BASE_DIR}/resources" /> + <property name="PROD_RESOURCES_DIR" value="${RESOURCES_DIR}/prod" /> <property name="SRC_DIR" value="${BASE_DIR}/src" /> - + <property name="OUTPUT_DIR" value="${BASE_DIR}/client" /> <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" /> @@ -38,31 +38,31 @@ <property name="POLLING" value="PollingModule" /> <property name="LAYOUT" value="LayoutModule" /> <property name="USERS" value="UsersModule" /> - + <xmlproperty file="${SRC_DIR}/conf/locales.xml" collapseAttributes="true"/> - + <target name="init-ant-contrib"> <property name="ant-contrib.jar" location="${BASE_DIR}/build/lib/ant-contrib-0.6.jar"/> <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${ant-contrib.jar}"/> </target> - + <target name="locales" depends="init-ant-contrib"> <echo message="Checking if locale output dir exists"/> <available file="${OUTPUT_DIR}/locale" type="file" property="locale.dir.present"/> - <if> - <equals arg1="${locale.dir.present}" arg2="true"/> - <then> - <echo message="Locale output dir exists. Deleting contents of ${OUTPUT_DIR}/locale"/> + <if> + <equals arg1="${locale.dir.present}" arg2="true"/> + <then> + <echo message="Locale output dir exists. Deleting contents of ${OUTPUT_DIR}/locale"/> <delete> <fileset dir="${OUTPUT_DIR}/locale"> <include name="**/*"/> </fileset> </delete> - </then> - <else> - <echo message="Locale output dir does not exists. Creating ${OUTPUT_DIR}/locale"/> + </then> + <else> + <echo message="Locale output dir does not exists. Creating ${OUTPUT_DIR}/locale"/> <mkdir dir="${OUTPUT_DIR}/locale"/> - </else> + </else> </if> <echo message="Determining supported locales."/> @@ -75,38 +75,38 @@ </path> </foreach> </target> - + <target name="branding" depends="init-ant-contrib"> <sequential> - <mxmlc file="${BASE_DIR}/branding/default/style/css/${themeFile}" - output="${OUTPUT_DIR}/branding/css/${themeFile}.swf" - debug="${DEBUG}" - mxml.compatibility-version="3.0.0" - swf-version="13" + <mxmlc file="${BASE_DIR}/branding/default/style/css/${themeFile}" + output="${OUTPUT_DIR}/branding/css/${themeFile}.swf" + debug="${DEBUG}" + mxml.compatibility-version="3.0.0" + swf-version="13" optimize="true"> </mxmlc> </sequential> </target> - + <target name="branding-black" depends="init-ant-contrib"> <sequential> - <mxmlc file="${BASE_DIR}/branding/default/style/css/${blackTheme}" - output="${OUTPUT_DIR}/branding/css/${blackTheme}.swf" - debug="${DEBUG}" - mxml.compatibility-version="3.0.0" - swf-version="13" + <mxmlc file="${BASE_DIR}/branding/default/style/css/${blackTheme}" + output="${OUTPUT_DIR}/branding/css/${blackTheme}.swf" + debug="${DEBUG}" + mxml.compatibility-version="3.0.0" + swf-version="13" optimize="true"> </mxmlc> </sequential> </target> - + <target name="build-bbb-main-test" description="Compile BigBlueButton Main Test"> <build-main src="${SRC_DIR}" target="${BBB_MAIN_TEST}" /> </target> <target name="build-locale"> <echo message="Locale dir is ${supportedlocale}. Extract locale name." /> - <basename property="locale.name" file="${supportedlocale}"/> + <basename property="locale.name" file="${supportedlocale}"/> <echo message="Locale name is ${locale.name}"/> <sequential> @@ -116,33 +116,33 @@ <equals arg1="${locale.name}" arg2="locale"/> <then> <echo message="Somehow, the dirset for locales is passing the parent (${locale.name}) dir."/> - <echo message="We don't want it, so we need to skip it."/> + <echo message="We don't want it, so we need to skip it."/> </then> - <else> - <if> - <equals arg1="${locale.dir.present}" arg2="true"/> - <then> + <else> + <if> + <equals arg1="${locale.dir.present}" arg2="true"/> + <then> <echo message="We already have a copy of the framework locale. No need to copy ${LOCALE_DIR}/${locale.name}"/> - </then> - <else> - <echo message="No copy of the framework locale. Copying ${LOCALE_DIR}/${locale.name}"/> + </then> + <else> + <echo message="No copy of the framework locale. Copying ${LOCALE_DIR}/${locale.name}"/> <exec vmlauncher="true" executable="copylocale"> <arg value="en_US"/> <arg value="${locale.name}"/> - </exec> + </exec> </else> - </if> + </if> <echo message="Compiling locale ${locale.name}"/> - <compileLocale locale="${locale.name}" /> - </else> - </if> + <compileLocale locale="${locale.name}" /> + </else> + </if> </sequential> </target> - + <target name="localize"> - <compileLocale locale="${LOCALE}" /> + <compileLocale locale="${LOCALE}" /> </target> - + <macrodef name="compileLocale" description="Compiles the Resource package for the given locale"> <attribute name="locale" default="en_US"/> <sequential> @@ -150,13 +150,13 @@ <echo message="**********************************************"/> <echo message="* Did you check bundles.txt and made *"/> <echo message="* all resources listed here? *"/> - <echo message="**********************************************"/> + <echo message="**********************************************"/> <!-- Invoke MXMLC --> <mxmlc output="${OUTPUT_DIR}/locale/@{locale}_resources.swf"> <locale>@{locale}</locale> <target-player>11</target-player> <source-path path-element="locale/{locale}"/> - + <!-- Look into bundles.txt to find out what resources to include here. http://forums.adobe.com/thread/758619 @@ -164,47 +164,47 @@ --> <include-resource-bundles>SharedResources</include-resource-bundles> <include-resource-bundles>bbbResources</include-resource-bundles> - <include-resource-bundles>collections</include-resource-bundles> - <include-resource-bundles>containers</include-resource-bundles> - <include-resource-bundles>controls</include-resource-bundles> - <include-resource-bundles>core</include-resource-bundles> - <include-resource-bundles>effects</include-resource-bundles> - <include-resource-bundles>logging</include-resource-bundles> - <include-resource-bundles>messaging</include-resource-bundles> - <include-resource-bundles>modules</include-resource-bundles> - <include-resource-bundles>rpc</include-resource-bundles> - <include-resource-bundles>skins</include-resource-bundles> + <include-resource-bundles>collections</include-resource-bundles> + <include-resource-bundles>containers</include-resource-bundles> + <include-resource-bundles>controls</include-resource-bundles> + <include-resource-bundles>core</include-resource-bundles> + <include-resource-bundles>effects</include-resource-bundles> + <include-resource-bundles>logging</include-resource-bundles> + <include-resource-bundles>messaging</include-resource-bundles> + <include-resource-bundles>modules</include-resource-bundles> + <include-resource-bundles>rpc</include-resource-bundles> + <include-resource-bundles>skins</include-resource-bundles> <include-resource-bundles>styles</include-resource-bundles> <source-path path-element="${FLEX_HOME}/frameworks"/> </mxmlc> </sequential> </macrodef> - + <target name="build-bbb-main" description="Compile BigBlueButton Main"> <build-main src="${SRC_DIR}" target="${BBB_MAIN}" /> - + <echo message="Copying common assets for BBB Main" /> <copy todir="${OUTPUT_DIR}/org/bigbluebutton/common/assets/images" > <fileset dir="${BASE_DIR}/src/org/bigbluebutton/common/assets/images/" /> - </copy> + </copy> </target> <target name="build-broadcast" description="Compile Broadcast Module" > <build-module src="${SRC_DIR}" target="${BROADCAST}" /> </target> - + <target name="build-chat" description="Compile Chat Module"> <build-module src="${SRC_DIR}" target="${CHAT}" /> </target> - + <target name="build-notes" description="Compile Notes Module"> <build-module src="${SRC_DIR}" target="${NOTES}" /> </target> - + <target name="build-polling" description="Compile Polling Module"> <build-module src="${SRC_DIR}" target="${POLLING}" /> </target> - + <target name="build-present" description="Compile Present Module"> <build-module src="${SRC_DIR}" target="${PRESENT}" /> </target> @@ -243,28 +243,28 @@ <echo message="Compiling Camera Check Application." /> <build-module-no-link src="${SRC_DIR}" target="${CAMERA_CHECK}" /> </target> - + <target name="build-conn-check" description="Compile Connection Check Application"> <echo message="Compiling Connection Check Application." /> <build-module-no-link src="${SRC_DIR}" target="${CONNECTION_CHECK}" /> </target> - + <target name="build-deskshare" description="Compile Deskshare Module"> <build-module src="${SRC_DIR}" target="${DESKSHARE}" /> <echo message="Copying deskshare applet for Deskshare Module" /> - <copy file="${PROD_RESOURCES_DIR}/bbb-deskshare-applet-unsigned-0.9.0.jar" todir="${OUTPUT_DIR}"/> - <copy file="${PROD_RESOURCES_DIR}/bbb-deskshare-applet-0.9.0.jar" todir="${OUTPUT_DIR}"/> + <copy file="${PROD_RESOURCES_DIR}/bbb-deskshare-applet-unsigned-0.9.0.jar" todir="${OUTPUT_DIR}"/> + <copy file="${PROD_RESOURCES_DIR}/bbb-deskshare-applet-0.9.0.jar" todir="${OUTPUT_DIR}"/> </target> - + <target name="build-phone" description="Compile Phone Module"> <build-module src="${SRC_DIR}" target="${PHONE}" /> - + <echo message="Copying assets for Phone Module" /> <copy todir="${OUTPUT_DIR}/org/bigbluebutton/modules/phone/views/assets/images/" > <fileset dir="${BASE_DIR}/src/org/bigbluebutton/modules/phone/views/assets/images/" /> - </copy> + </copy> </target> - + <target name="build-video" description="Compile Video Module"> <build-module src="${SRC_DIR}" target="${VIDEO}" /> </target> @@ -272,27 +272,27 @@ <target name="build-whiteboard" description="Compile Whiteboard Module"> <build-module src="${SRC_DIR}" target="${WHITEBOARD}" /> </target> - + <target name="build-layout" description="Compile Layout Module"> <build-module src="${SRC_DIR}" target="${LAYOUT}" /> </target> - + <target name="build-users" description="Compile Users Module"> <build-module src="${SRC_DIR}" target="${USERS}" /> </target> - + <!-- just a grouping of modules to compile --> - <target name="build-main-chat-present" + <target name="build-main-chat-present" depends="build-bbb-main, build-chat, build-present, build-layout, build-broadcast, build-users" description="Compile main, chat, present modules"> </target> - + <!-- just a grouping of modules to compile --> - <target name="build-deskshare-phone-video-whiteboard-dyn" + <target name="build-deskshare-phone-video-whiteboard-dyn" depends="build-deskshare, build-phone, build-video, build-whiteboard, build-notes, build-polling" description="Compile deskshare, phone, video, whiteboard modules"> </target> - + <macrodef name="build-main"> <attribute name="target" description="Module to compile" /> <attribute name="flex" default="${FLEX_HOME}" description="Location of the Flex install." /> @@ -303,7 +303,7 @@ <target-player>11</target-player> <load-config filename="@{flex}/frameworks/flex-config.xml" /> <source-path path-element="@{flex}/frameworks" /> - + <!-- Dump out resources to find out what resources to include building the locales. http://forums.adobe.com/thread/758619 @@ -311,7 +311,7 @@ --> <resource-bundle-list>bundles.txt</resource-bundle-list> <static-link-runtime-shared-libraries>${STATIC_RSL}</static-link-runtime-shared-libraries> - + <compiler.library-path dir="@{flex}/frameworks" append="true"> <include name="libs" /> <include name="../bundles/{locale}" /> @@ -331,7 +331,7 @@ <echo message="**********************************************"/> </sequential> </macrodef> - + <macrodef name="build-module-no-link"> <attribute name="target" description="Module to compile" /> <attribute name="flex" default="${FLEX_HOME}" description="Location of the Flex install." /> @@ -358,7 +358,7 @@ </mxmlc> </sequential> </macrodef> - + <macrodef name="build-module"> <attribute name="target" description="Module to compile" /> <attribute name="flex" default="${FLEX_HOME}" description="Location of the Flex install." /> @@ -387,12 +387,12 @@ </macrodef> <target name="compile-deskshare-standalone" depends="build-deskshare-standalone" - description="Compiling standalone desktop sharing"> + description="Compiling standalone desktop sharing"> <echo message="Deskshare standalone built without optimization." /> </target> - + <target name="compile-bbb" depends="build-main-chat-present, build-deskshare-phone-video-whiteboard-dyn, copy-resource-files" - description="Compiling the BBB without copying config.xml"> + description="Compiling the BBB without copying config.xml"> </target> <target name="copy-config-if-needed"> @@ -402,7 +402,7 @@ <copy file="/var/www/bigbluebutton/client/conf/config.xml" todir="${BASE_DIR}/src/conf" /> </else> </if> - </target> + </target> <target name="copy-join-mock-if-needed"> <if> @@ -411,22 +411,22 @@ <copy file="${RESOURCES_DIR}/dev/join-mock.xml" todir="${BASE_DIR}/src/conf" /> </else> </if> - </target> + </target> <target name="copy-resource-files" > <copy todir="${OUTPUT_DIR}/swfobject/" > <fileset dir="${PROD_RESOURCES_DIR}/swfobject" /> - </copy> + </copy> <copy todir="${OUTPUT_DIR}/lib/" > <fileset dir="${PROD_RESOURCES_DIR}/lib"/> - </copy> + </copy> <copy file="${PROD_RESOURCES_DIR}/BigBlueButtonTest.html" todir="${OUTPUT_DIR}" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/BigBlueButton.html" todir="${OUTPUT_DIR}" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/DeskshareStandalone.html" todir="${OUTPUT_DIR}" overwrite="true"/> - <copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/> + <copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/avatar.png" todir="${OUTPUT_DIR}" overwrite="true"/> - <copy file="${PROD_RESOURCES_DIR}/locales.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/> - <copy file="${PROD_RESOURCES_DIR}/expressInstall.swf" todir="${OUTPUT_DIR}" overwrite="true"/> + <copy file="${PROD_RESOURCES_DIR}/locales.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/> + <copy file="${PROD_RESOURCES_DIR}/expressInstall.swf" todir="${OUTPUT_DIR}" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/example-info-data.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/layout.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/> <copy file="${PROD_RESOURCES_DIR}/profiles.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/> @@ -434,17 +434,17 @@ <equals arg1="${BUILD_ENV}" arg2="DEV"/> <then> <echo message="Copying config.xml for development environment"/> - <copy file="${BASE_DIR}/src/conf/config.xml" todir="${OUTPUT_DIR}/conf" /> + <copy file="${BASE_DIR}/src/conf/config.xml" todir="${OUTPUT_DIR}/conf" /> <!-- echo message="Copying layout.xml for development environment"/> - <copy file="${BASE_DIR}/src/conf/layout.xml" todir="${OUTPUT_DIR}/conf" /--> + <copy file="${BASE_DIR}/src/conf/layout.xml" todir="${OUTPUT_DIR}/conf" /--> </then> <else> <echo message="Need to copy config.xml.template for production environment"/> - <copy file="${RESOURCES_DIR}/config.xml.template" todir="${OUTPUT_DIR}/conf" overwrite="true"/> + <copy file="${RESOURCES_DIR}/config.xml.template" todir="${OUTPUT_DIR}/conf" overwrite="true"/> </else> </if> </target> - + <target name="generate-html-wrapper"> <html-wrapper @@ -469,9 +469,9 @@ <mkdir dir="${BASE_DIR}/asdoc" /> <!-- asdoc task not natively supported for ant flexTasks.jar for flex3. It is supported for flex 4, so it should be enabled here when bbb-client is moved to Flex 4 --> - <!--<asdoc output="${BASE_DIR}/asdoc" - external-library-path="{BASE_DIR}/libs" - lenient="true" + <!--<asdoc output="${BASE_DIR}/asdoc" + external-library-path="{BASE_DIR}/libs" + lenient="true" failonerror="true" source-path="${SRC_DIR}" doc-sources="${SRC_DIR}" diff --git a/record-and-playback/core/scripts/bigbluebutton.yml b/record-and-playback/core/scripts/bigbluebutton.yml index 263b210baa220b368ae70aaf5f04c4ba920dc893..c7c9e1b3348c2bcc640fee21359a356cef1ecb50 100755 --- a/record-and-playback/core/scripts/bigbluebutton.yml +++ b/record-and-playback/core/scripts/bigbluebutton.yml @@ -9,15 +9,15 @@ redis_port: 6379 # # For PRODUCTION -log_dir: /var/log/bigbluebutton -recording_dir: /var/bigbluebutton/recording -published_dir: /var/bigbluebutton/published -playback_host: 10.0.3.203 +# log_dir: /var/log/bigbluebutton +# recording_dir: /var/bigbluebutton/recording +# published_dir: /var/bigbluebutton/published +# playback_host: 10.0.3.203 # For DEVELOPMENT # This allows us to run the scripts manually -# scripts_dir: /home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts -# log_dir: /home/ubuntu/temp/log -# recording_dir: /home/ubuntu/temp/recording -# published_dir: /home/ubuntu/temp/published -# playback_host: 192.168.22.137 +scripts_dir: /home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts +log_dir: /home/ubuntu/temp/log +recording_dir: /home/ubuntu/temp/recording +published_dir: /home/ubuntu/temp/published +playback_host: 192.168.0.109 diff --git a/record-and-playback/presentation/scripts/process/presentation.rb b/record-and-playback/presentation/scripts/process/presentation.rb index a66ef6fd00e9c1b8460a828abdd65bab5ad6c59f..869e9fbd8b96bfa54fd5f39852e842e7e489e369 100755 --- a/record-and-playback/presentation/scripts/process/presentation.rb +++ b/record-and-playback/presentation/scripts/process/presentation.rb @@ -21,10 +21,10 @@ # For DEVELOPMENT # Allows us to run the script manually -# require File.expand_path('../../../../core/lib/recordandplayback', __FILE__) +require File.expand_path('../../../../core/lib/recordandplayback', __FILE__) # For PRODUCTION -require File.expand_path('../../../lib/recordandplayback', __FILE__) +# require File.expand_path('../../../lib/recordandplayback', __FILE__) require 'rubygems' require 'trollop' diff --git a/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoApplication.java b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoApplication.java index 95d876898036832e8f46a80fe65a371ee6c172c4..b485bc13a9255be83da673b20568f1d42c395070 100755 --- a/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoApplication.java +++ b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoApplication.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; -import org.bigbluebutton.red5.pubsub.MessagePublisher; import org.red5.logging.Red5LoggerFactory; import org.red5.server.adapter.MultiThreadedApplicationAdapter; import org.red5.server.api.IConnection; @@ -41,7 +40,6 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { private IScope appScope; private IServerStream serverStream; - private MessagePublisher publisher; private boolean recordVideoStream = false; private EventRecordingService recordingService; private final Map<String, IStreamListener> streamListeners = new HashMap<String, IStreamListener>(); @@ -52,7 +50,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { public boolean appStart(IScope app) { super.appStart(app); log.info("BBB Video-broadcast appStart"); - System.out.println("BBB Video-broadcast appStart\n\n\n\n\n\n\n\n\n"); + System.out.println("BBB Video-broadcast appStart"); appScope = app; return true; } @@ -67,11 +65,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { public boolean roomConnect(IConnection conn, Object[] params) { log.info("BBB Video-broadcast roomConnect"); - log.info("\n\n\n\n\n\n video-broadcast roomConnect AAAAAAAA\n\n\n"); - - return super.roomConnect(conn, params); - // return true; } private String getConnectionType(String connType) { @@ -113,20 +107,20 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", getUserId()); logData.put("connType", connType); logData.put("connId", connId); - logData.put("event", "user_leaving_bbb_video"); //TODO video-broadcast - logData.put("description", "User leaving BBB Video."); //TODO video-broadcast + logData.put("event", "user_leaving_bbb_video_broadcast"); + logData.put("description", "User leaving BBB video-broadcast."); Gson gson = new Gson(); String logStr = gson.toJson(logData); - log.info("User leaving bbb-video: data={}", logStr); //TODO video-broadcast + log.info("User leaving bbb-video-broadcast: data={}", logStr); super.appDisconnect(conn); } @Override public void roomDisconnect(IConnection conn) { - log.info("BBB Video roomDisconnect"); //TODO video-broadcast + log.info("BBB video-broadcast roomDisconnect"); String connType = getConnectionType(Red5.getConnectionLocal().getType()); String connId = Red5.getConnectionLocal().getSessionId(); @@ -136,13 +130,13 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", getUserId()); logData.put("connType", connType); logData.put("connId", connId); - logData.put("event", "user_leaving_bbb_video"); //TODO video-broadcast - logData.put("description", "User leaving BBB Video."); //TODO video-broadcast + logData.put("event", "user_leaving_bbb_video_broadcast"); + logData.put("description", "User leaving BBB video-broadcast."); Gson gson = new Gson(); String logStr = gson.toJson(logData); - log.info("User leaving bbb-video: data={}", logStr); //TODO video-broadcast + log.info("User leaving bbb-video-broadcast: data={}", logStr); super.roomDisconnect(conn); } @@ -162,15 +156,8 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { log.info("streamBroadcastStart " + stream.getPublishedName() + " " + System.currentTimeMillis() + " " + conn.getScope().getName()); - String userId = getUserId(); - String meetingId = conn.getScope().getName(); - String streamId = stream.getPublishedName(); - - publisher.userSharedWebcamMessage(meetingId, userId, streamId); - // VideoStreamListener listener = new VideoStreamListener(conn.getScope(), stream, recordVideoStream, userId, packetTimeout); - // listener.setEventRecordingService(recordingService); - // stream.addStreamListener(listener); - // streamListeners.put(conn.getScope().getName() + "-" + stream.getPublishedName(), listener); + // TODO Anton publish a message to a redis channel so that all [Flash client] users are + // notified that there is an rtmp stream being broadcasted. if (recordVideoStream) { recordStream(stream); @@ -195,34 +182,29 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { log.info("Stream broadcast closed for stream=[{}] meeting=[{}]", stream.getPublishedName(), scopeName); + // TODO Anton publish a message to a redis channel so that all [Flash client] users are + // notified that there is no longer rtmp stream being broadcasted. + String userId = getUserId(); String meetingId = conn.getScope().getName(); String streamId = stream.getPublishedName(); - publisher.userUnshareWebcamRequestMessage(meetingId, userId, streamId); - - // IStreamListener listener = streamListeners.remove(scopeName + "-" + stream.getPublishedName()); - // if (listener != null) { - // ((VideoStreamListener) listener).streamStopped(); - // stream.removeStreamListener(listener); - // } - if (recordVideoStream) { long publishDuration = (System.currentTimeMillis() - stream.getCreationTime()) / 1000; log.info("Stop recording event for stream=[{}] meeting=[{}]", stream.getPublishedName(), scopeName); Map<String, String> event = new HashMap<String, String>(); - event.put("module", "WEBCAM"); + event.put("module", "WEBRTC-DESKSHARE"); event.put("timestamp", genTimestamp().toString()); event.put("meetingId", scopeName); event.put("stream", stream.getPublishedName()); event.put("duration", new Long(publishDuration).toString()); - event.put("eventName", "StopWebcamShareEvent"); + event.put("eventName", "StopWebRTCDesktopShareEvent"); recordingService.record(scopeName, event); } } /** - * A hook to record a stream. A file is written in webapps/video/streams/ //TODO video-broadcast + * A hook to record a stream. A file is written in webapps/video-broadcast/streams/ * @param stream */ private void recordStream(IBroadcastStream stream) { @@ -252,10 +234,6 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { recordingService = s; } - public void setMessagePublisher(MessagePublisher publisher) { - this.publisher = publisher; - } - /** * Start transmission notification from Flash Player 11.1+. This command asks the server to transmit more data because the buffer is running low. * diff --git a/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoStreamListener.java b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoStreamListener.java index a4c928de0a12243b876938ce241dac7cebbf92b0..58575becd5ce5f947b92f1218173ffe51463aef1 100755 --- a/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoStreamListener.java +++ b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/VideoStreamListener.java @@ -93,7 +93,6 @@ public class VideoStreamListener implements IStreamListener { // get the scheduler scheduler = (QuartzSchedulingService) scope.getParent().getContext().getBean(QuartzSchedulingService.BEAN_NAME); - } private Long genTimestamp() { @@ -115,7 +114,7 @@ public class VideoStreamListener implements IStreamListener { // keep track of last time video was received lastVideoTime = System.currentTimeMillis(); packetCount++; - + if (! firstPacketReceived) { firstPacketReceived = true; publishing = true; @@ -130,46 +129,44 @@ public class VideoStreamListener implements IStreamListener { event.put("timestamp", genTimestamp().toString()); event.put("meetingId", scope.getName()); event.put("stream", stream.getPublishedName()); - event.put("eventName", "StartWebcamShareEvent"); - - recordingService.record(scope.getName(), event); - } - } - - - if (streamPaused) { - streamPaused = false; - long now = System.currentTimeMillis(); - long numSeconds = (now - lastVideoTime)/1000; - - Map<String, Object> logData = new HashMap<String, Object>(); - logData.put("meetingId", scope.getName()); - logData.put("userId", userId); - logData.put("stream", stream.getPublishedName()); - logData.put("packetCount", packetCount); - logData.put("publishing", publishing); - logData.put("pausedFor (sec)", numSeconds); - - Gson gson = new Gson(); - String logStr = gson.toJson(logData); - - log.warn("Video stream restarted. data={}", logStr ); - } - - } + event.put("eventName", "StartWebRTCDeskShareEvent"); + + recordingService.record(scope.getName(), event); + } + } + + if (streamPaused) { + streamPaused = false; + long now = System.currentTimeMillis(); + long numSeconds = (now - lastVideoTime)/1000; + + Map<String, Object> logData = new HashMap<String, Object>(); + logData.put("meetingId", scope.getName()); + logData.put("userId", userId); + logData.put("stream", stream.getPublishedName()); + logData.put("packetCount", packetCount); + logData.put("publishing", publishing); + logData.put("pausedFor (sec)", numSeconds); + + Gson gson = new Gson(); + String logStr = gson.toJson(logData); + + log.warn("Video stream restarted. data={}", logStr ); + } + } } - + public void setEventRecordingService(EventRecordingService s) { recordingService = s; } - + public void streamStopped() { this.publishing = false; } - + private class TimeoutJob implements IScheduledJob { private boolean streamStopped = false; - + public void execute(ISchedulingService service) { Map<String, Object> logData = new HashMap<String, Object>(); logData.put("meetingId", scope.getName()); @@ -177,22 +174,20 @@ public class VideoStreamListener implements IStreamListener { logData.put("stream", stream.getPublishedName()); logData.put("packetCount", packetCount); logData.put("publishing", publishing); - + Gson gson = new Gson(); - + long now = System.currentTimeMillis(); if ((now - lastVideoTime) > videoTimeout && !streamPaused) { streamPaused = true; long numSeconds = (now - lastVideoTime)/1000; - logData.put("lastPacketTime (sec)", numSeconds); - - + + String logStr = gson.toJson(logData); - + log.warn("Video packet timeout. data={}", logStr ); - /* diff --git a/video-broadcast/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java b/video-broadcast/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java index db0c5b0584616338394c6f264ec382c35acb1bcd..3f4d12fc3d08fe51cc7fe4a474fd538be8c09a2c 100755 --- a/video-broadcast/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java +++ b/video-broadcast/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java @@ -1,24 +1,25 @@ package org.bigbluebutton.red5.pubsub; -import org.bigbluebutton.common.messages.*; +import org.bigbluebutton.common.messages.*; //TODO try with just the 2 messages public class MessagePublisher { private MessageSender sender; - + public void setMessageSender(MessageSender sender) { this.sender = sender; } - - // Polling + public void userSharedWebcamMessage(String meetingId, String userId, String streamId) { UserSharedWebcamMessage msg = new UserSharedWebcamMessage(meetingId, userId, streamId); - sender.send(MessagingConstants.TO_USERS_CHANNEL, msg.toJson()); + //sender.send(MessagingConstants.TO_USERS_CHANNEL, msg.toJson()); //TODO change the channel } public void userUnshareWebcamRequestMessage(String meetingId, String userId, String streamId) { UserUnshareWebcamRequestMessage msg = new UserUnshareWebcamRequestMessage(meetingId, userId, streamId); - sender.send(MessagingConstants.TO_USERS_CHANNEL, msg.toJson()); + //sender.send(MessagingConstants.TO_USERS_CHANNEL, msg.toJson()); //TODO what do we do with these } - + + + }