Merge branch 'master' of https://github.com/bigbluebutton/bigbluebutton
@ -0,0 +1,33 @@
|
||||
package org.bigbluebutton.conference;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.red5.server.api.Red5;
|
||||
|
||||
public class BigBlueButtonService {
|
||||
private ConnectionInvokerService connInvokerService;
|
||||
|
||||
public void sendMessage(HashMap<String, Object> params) {
|
||||
|
||||
Map<String, Object> messageToSend = new HashMap<String, Object>();
|
||||
|
||||
for (Iterator<String> it = params.keySet().iterator(); it.hasNext();) {
|
||||
String key = it.next();
|
||||
messageToSend.put(key, params.get(key));
|
||||
}
|
||||
|
||||
ClientMessage m = new ClientMessage(ClientMessage.BROADCAST, getMeetingId(), (String) params.get("messageID"), messageToSend);
|
||||
connInvokerService.sendMessage(m);
|
||||
}
|
||||
|
||||
private String getMeetingId(){
|
||||
return Red5.getConnectionLocal().getScope().getName();
|
||||
}
|
||||
|
||||
public void setConnInvokerService(ConnectionInvokerService connInvokerService) {
|
||||
this.connInvokerService = connInvokerService;
|
||||
}
|
||||
|
||||
}
|
@ -58,10 +58,12 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
|
||||
private FreeswitchHeartbeatMonitor heartbeatMonitor;
|
||||
private boolean debug = false;
|
||||
|
||||
private String icecastProtocol = "shout";
|
||||
private String icecastHost = "localhost";
|
||||
private int icecastPort = 8000;
|
||||
private String icecastUsername = "source";
|
||||
private String icecastPassword = "hackme";
|
||||
private String icecastStreamExtension = ".mp3";
|
||||
private Boolean icecastBroadcast = false;
|
||||
|
||||
private final Integer USER = 0; /* not used for now */
|
||||
@ -180,8 +182,8 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
|
||||
}
|
||||
|
||||
private void broadcastToIcecast(String room, String meetingid) {
|
||||
String shoutPath = "shout://" + icecastUsername + ":" + icecastPassword + "@" + icecastHost + ":" + icecastPort
|
||||
+ File.separatorChar + meetingid + ".mp3";
|
||||
String shoutPath = icecastProtocol + "://" + icecastUsername + ":" + icecastPassword + "@" + icecastHost + ":" + icecastPort
|
||||
+ File.separatorChar + meetingid + "." + icecastStreamExtension;
|
||||
|
||||
if (log.isDebugEnabled())
|
||||
log.debug("Broadcast to {}", shoutPath);
|
||||
@ -364,7 +366,11 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
|
||||
public void setDebugNullConferenceAction(boolean enabled) {
|
||||
this.debug = enabled;
|
||||
}
|
||||
|
||||
|
||||
public void setIcecastProtocol(String protocol) {
|
||||
icecastProtocol = protocol;
|
||||
}
|
||||
|
||||
public void setIcecastHost(String host) {
|
||||
icecastHost = host;
|
||||
}
|
||||
@ -384,6 +390,10 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
|
||||
public void setIcecastBroadcast(Boolean broadcast) {
|
||||
icecastBroadcast = broadcast;
|
||||
}
|
||||
|
||||
public void setIcecastStreamExtension(String ext) {
|
||||
icecastStreamExtension = ext;
|
||||
}
|
||||
|
||||
private Integer getMemberIdFromEvent(EslEvent e)
|
||||
{
|
||||
|
@ -12,7 +12,11 @@
|
||||
<property name="messagingService" ref="messagingService"></property>
|
||||
<property name="conversionUpdatesMessageListener" ref="conversionUpdatesMessageListener"></property>
|
||||
</bean>
|
||||
|
||||
|
||||
<bean id="bigbluebutton.service" class="org.bigbluebutton.conference.BigBlueButtonService">
|
||||
<property name="connInvokerService"> <ref bean="connInvokerService"/></property>
|
||||
</bean>
|
||||
|
||||
<bean id="participantsHandler" class="org.bigbluebutton.conference.service.participants.ParticipantsHandler">
|
||||
<property name="participantsApplication"> <ref local="participantsApplication"/></property>
|
||||
<property name="recorderApplication"> <ref local="recorderApplication"/></property>
|
||||
|
@ -14,6 +14,7 @@
|
||||
<beans:bean id="freeswitchApplication" class="org.bigbluebutton.webconference.voice.freeswitch.FreeswitchApplication">
|
||||
<beans:property name="managerConnection" ref="eslConnection"/>
|
||||
<beans:property name="DebugNullConferenceAction" value="true"/>
|
||||
<beans:property name="icecastProtocol" value="${icecast.protocol}"/>
|
||||
<beans:property name="icecastHost" value="${icecast.host}"/>
|
||||
<beans:property name="icecastPort" value="${icecast.port}"/>
|
||||
<beans:property name="icecastUsername" value="${icecast.username}"/>
|
||||
|
@ -31,6 +31,8 @@ version=0.63
|
||||
redis.host=127.0.0.1
|
||||
redis.port=6379
|
||||
|
||||
icecast.protocol=shout
|
||||
icecast.streamExt=mp3
|
||||
icecast.host=127.0.0.1
|
||||
icecast.port=8000
|
||||
icecast.username=source
|
||||
|
3
bigbluebutton-client/branding/README
Normal file
@ -0,0 +1,3 @@
|
||||
This is the directory where you should put your custom skinning/styling.
|
||||
|
||||
|
1
bigbluebutton-client/branding/default/README
Normal file
@ -0,0 +1 @@
|
||||
This is the default BigBlueButton style.
|
31
bigbluebutton-client/branding/default/build.xml
Executable file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- BigBlueButton Branding build.xml for use by Hudson builds. -->
|
||||
<project name="BigBlueButton Branding" basedir="../.." default="branding" >
|
||||
<property environment="env" />
|
||||
<property name="DEBUG" value="true" />
|
||||
<property name="BUILD_ENV" value="DEV" />
|
||||
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
|
||||
<property name="themeFile" value="BBBDefault.css" />
|
||||
<property name="BASE_DIR" value="${basedir}" />
|
||||
<property name="SRC_DIR" value="${BASE_DIR}/src" />
|
||||
|
||||
<property name="OUTPUT_DIR" value="${BASE_DIR}/bin" />
|
||||
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
|
||||
|
||||
<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="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"
|
||||
optimize="true">
|
||||
</mxmlc>
|
||||
</sequential>
|
||||
</target>
|
||||
</project>
|
504
bigbluebutton-client/branding/default/style/css/BBBDefault.css
Executable file
@ -0,0 +1,504 @@
|
||||
Application {
|
||||
backgroundColor: #ffffff;
|
||||
}
|
||||
|
||||
ApplicationControlBar {
|
||||
highlightAlphas: 0.1, 0;
|
||||
fillAlphas: 0, 0;
|
||||
fillColors: #32343b, #32343b;
|
||||
backgroundColor: #42444c;
|
||||
backgroundAlpha: 1;
|
||||
cornerRadius: 0;
|
||||
dropShadowEnabled: true;
|
||||
shadowDistance: 1;
|
||||
shadowDirection: center;
|
||||
dropShadowColor: #000000;
|
||||
}
|
||||
|
||||
Panel {
|
||||
borderColor: #dfdfdf;
|
||||
borderAlpha: 1;
|
||||
shadowDistance: 1;
|
||||
dropShadowColor: #666666;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.mypanelTitle {
|
||||
color: #444444;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.whiteboardToolbarStyle {
|
||||
backgroundColor: #CCCCCC;
|
||||
cornerRadius: 5;
|
||||
borderStyle: solid;
|
||||
borderThickness: 1;
|
||||
paddingBottom: 3;
|
||||
paddingTop: 3;
|
||||
paddingLeft: 3;
|
||||
paddingRight: 3;
|
||||
}
|
||||
|
||||
Button {
|
||||
textIndent: 0;
|
||||
paddingLeft: 1;
|
||||
paddingRight: 1;
|
||||
paddingTop: 1;
|
||||
paddingBottom: 1;
|
||||
highlightAlphas: 0.4, 0;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
|
||||
color: #5e5f63;
|
||||
textRollOverColor: #5e5f63;
|
||||
textSelectedColor: #5e5f63;
|
||||
borderColor: #b9babc;
|
||||
themeColor: haloBlue;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.chatSendButtonStyle {
|
||||
cornerRadius: 0;
|
||||
highlightAlphas: 0, 0;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #262626, #262626, #454545, #454545;
|
||||
color: #ffffff;
|
||||
textRollOverColor: #ffffff;
|
||||
textSelectedColor: #262626;
|
||||
borderColor: #000000;
|
||||
themeColor: haloBlue;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.logoutButtonStyle {
|
||||
cornerRadius: 0;
|
||||
highlightAlphas: 0, 0;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #262626, #262626, #454545, #454545;
|
||||
color: #ffffff;
|
||||
textRollOverColor: #ffffff;
|
||||
textSelectedColor: #262626;
|
||||
borderColor: #000000;
|
||||
themeColor: haloBlue;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.helpLinkButtonStyle {
|
||||
rollOverColor: #cccccc;
|
||||
selectionColor: #999999;
|
||||
color: #ffffff;
|
||||
textRollOverColor: #504f3d;
|
||||
textSelectedColor: #504f3d;
|
||||
}
|
||||
|
||||
DataGrid {
|
||||
backgroundColor: #e1e2e5;
|
||||
rollOverColor: #f3f3f3;
|
||||
textRollOverColor: #5e5f63;
|
||||
selectionColor: #e1e2e5;
|
||||
color: #5e5f63;
|
||||
textSelectedColor: #5e5f63;
|
||||
dropShadowEnabled: false;
|
||||
fontFamily: arial;
|
||||
fontSize: 11;
|
||||
headerStyleName: "mydataGridHeaderStyle";
|
||||
}
|
||||
|
||||
.mydataGridHeaderStyle {
|
||||
color: #5e5f63;
|
||||
fontFamily: arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
|
||||
.whiteboardUndoButtonStyle, .whiteboardCircleButtonStyle, .whiteboardClearButtonStyle,
|
||||
.whiteboardTriangleButtonStyle, .whiteboardTextButtonStyle, .whiteboardRectangleButtonStyle,
|
||||
.whiteboardPanZoomButtonStyle, .whiteboardLineButtonStyle, .whiteboardScribbleButtonStyle
|
||||
{
|
||||
textIndent: 0;
|
||||
paddingLeft: 0;
|
||||
paddingRight: 0;
|
||||
paddingTop: 5;
|
||||
paddingBottom: 5;
|
||||
highlightAlphas: 0.4, 0;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
|
||||
color: #5e5f63;
|
||||
textRollOverColor: #5e5f63;
|
||||
textSelectedColor: #5e5f63;
|
||||
borderColor: #b9babc;
|
||||
themeColor: haloBlue;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.whiteboardUndoButtonStyle
|
||||
{
|
||||
icon: Embed('assets/images/undo.png');
|
||||
}
|
||||
|
||||
.whiteboardCircleButtonStyle {
|
||||
icon: Embed('assets/images/ellipse.png');
|
||||
}
|
||||
|
||||
.whiteboardClearButtonStyle {
|
||||
icon: Embed('assets/images/delete.png');
|
||||
}
|
||||
|
||||
.whiteboardScribbleButtonStyle{
|
||||
icon: Embed('assets/images/pencil.png');
|
||||
}
|
||||
|
||||
.whiteboardLineButtonStyle {
|
||||
icon: Embed('assets/images/line.png');
|
||||
}
|
||||
|
||||
.whiteboardPanZoomButtonStyle {
|
||||
icon: Embed('assets/images/hand.png');
|
||||
}
|
||||
|
||||
.whiteboardRectangleButtonStyle {
|
||||
icon: Embed('assets/images/square.png');
|
||||
}
|
||||
|
||||
.whiteboardTextButtonStyle {
|
||||
icon: Embed('assets/images/text.png');
|
||||
}
|
||||
|
||||
.whiteboardTriangleButtonStyle {
|
||||
icon: Embed('assets/images/triangle.png');
|
||||
}
|
||||
|
||||
.presentationUploadButtonStyle, .presentationBackButtonStyle, .presentationForwardButtonStyle,
|
||||
.presentationFitToWidthButtonStyle, .presentationFitToPageButtonStyle
|
||||
{
|
||||
textIndent: 0;
|
||||
paddingLeft: 10;
|
||||
paddingRight: 10;
|
||||
paddingTop: 5;
|
||||
paddingBottom: 5;
|
||||
highlightAlphas: 0.4, 0;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
|
||||
color: #5e5f63;
|
||||
textRollOverColor: #5e5f63;
|
||||
textSelectedColor: #5e5f63;
|
||||
borderColor: #b9babc;
|
||||
themeColor: haloBlue;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.presentationUploadButtonStyle {
|
||||
icon: Embed('assets/images/upload.png');
|
||||
}
|
||||
|
||||
.presentationBackButtonStyle {
|
||||
icon: Embed('assets/images/left-arrow.png');
|
||||
}
|
||||
|
||||
.presentationForwardButtonStyle {
|
||||
icon: Embed('assets/images/right-arrow.png');
|
||||
}
|
||||
|
||||
.presentationFitToWidthButtonStyle {
|
||||
icon: Embed('assets/images/fit-to-width.png');
|
||||
}
|
||||
|
||||
.presentationFitToPageButtonStyle {
|
||||
icon: Embed('assets/images/fit-to-screen.png');
|
||||
}
|
||||
|
||||
.presentationZoomSliderStyle{
|
||||
labelOffset: 0;
|
||||
thumbOffset: 3;
|
||||
dataTipOffset: -1;
|
||||
tickOffset: 2;
|
||||
tickLength: 5;
|
||||
tickThickness: 2;
|
||||
tickColor: #6cccff;
|
||||
showTrackHighlight: true;
|
||||
invertThumbDirection: false;
|
||||
borderColor: #b9babc;
|
||||
trackColors: #aaaaaa, #aaaaaa;
|
||||
themeColor: haloBlue;
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
|
||||
labelStyleName: "presentationZoomSliderLabelStyle";
|
||||
}
|
||||
|
||||
.presentationZoomSliderLabelStyle {
|
||||
color: #5e5f63;
|
||||
fontFamily: Arial;
|
||||
}
|
||||
|
||||
.videoMuteButtonStyle, .videoUnmutedButtonStyle, .videoSwitchPresenterButtonStyle, .videoEjectUserButtonStyle, .videoPrivateChatButtonStyle {
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
|
||||
color: #5e5f63;
|
||||
textRollOverColor: #ffffff;
|
||||
textSelectedColor: #ffffff;
|
||||
borderColor: #b9babc;
|
||||
cornerRadius: 17;
|
||||
}
|
||||
|
||||
.videoMutedButtonStyle {
|
||||
/* Need to duplicate info here as the styleName is programatically changed. Extracting it out doesn't have any effect. */
|
||||
fillAlphas: 1, 1, 1, 1;
|
||||
fillColors: #96c7e6, #50a6d7, #ffffff, #eeeeee;
|
||||
color: #ffffff;
|
||||
textRollOverColor: #ffffff;
|
||||
textSelectedColor: #ffffff;
|
||||
borderColor: #50a6d7;
|
||||
cornerRadius: 17;
|
||||
icon: Embed('assets/images/webcam-muted.png');
|
||||
}
|
||||
|
||||
.videoUnmutedButtonStyle {
|
||||
icon: Embed('assets/images/webcam-unmuted.png');
|
||||
}
|
||||
|
||||
.videoSwitchPresenterButtonStyle {
|
||||
icon: Embed('assets/images/webcam-switch-presenter.png');
|
||||
}
|
||||
|
||||
.videoEjectUserButtonStyle {
|
||||
icon: Embed('assets/images/webcam-eject-user.png');
|
||||
}
|
||||
|
||||
.videoPrivateChatButtonStyle {
|
||||
icon: Embed('assets/images/webcam-private-chat.png');
|
||||
}
|
||||
|
||||
MDIWindow {
|
||||
|
||||
}
|
||||
|
||||
.mdiWindowFocus, .presentationWindowStyleFocus, .videoDockStyleFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: true;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 1;
|
||||
borderThickness: 1;
|
||||
borderThicknessLeft: 1;
|
||||
borderThicknessTop: 1;
|
||||
borderThicknessBottom: 1;
|
||||
borderThicknessRight: 1;
|
||||
cornerRadius: 0;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 2;
|
||||
cornerResizeHeight: 2;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus, .presentationWindowStyleNoFocus, .videoDockStyleNoFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: false;
|
||||
backgroundAlpha: 0.5;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 0.5;
|
||||
borderThickness: 1;
|
||||
borderThicknessLeft: 1;
|
||||
borderThicknessTop: 1;
|
||||
borderThicknessBottom: 1;
|
||||
borderThicknessRight: 1;
|
||||
cornerRadius: 0;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 2;
|
||||
cornerResizeHeight: 2;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.presentationSlideViewStyle {
|
||||
backgroundColor: #b9babc;
|
||||
}
|
||||
|
||||
.presentationWindowControlsStyle {
|
||||
paddingBottom: 5;
|
||||
paddingTop: 3;
|
||||
paddingLeft: 3;
|
||||
paddingRight: 3;
|
||||
bottom: 5;
|
||||
cornerRadius: 0;
|
||||
dropShadowEnabled: false;
|
||||
}
|
||||
|
||||
.videoViewStyleNoFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 0.5;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 0.5;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.videoViewStyleFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 1;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.videoPublishStyleNoFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 0.5;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 0.5;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.videoPublishStyleFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 1;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.videoAvatarStyleNoFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 0.5;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 0.5;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.videoAvatarStyleFocus
|
||||
{
|
||||
borderColor: #b9babc;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 5;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 20;
|
||||
backgroundColor: #b9babc;
|
||||
backgroundAlpha: 1;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
}
|
||||
|
||||
.mypanelTitle {
|
||||
color: #5e5f63;
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
}
|
||||
|
||||
.closeBtnFocus, .closeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/images/3_closeButton.png');
|
||||
overSkin: Embed('assets/images/3_closeButton.png');
|
||||
downSkin: Embed('assets/images/3_closeButton.png');
|
||||
disabledSkin: Embed('assets/images/3_closeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.increaseBtnFocus, .increaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/images/3_increaseButton.png');
|
||||
overSkin: Embed('assets/images/3_increaseButton.png');
|
||||
downSkin: Embed('assets/images/3_increaseButton.png');
|
||||
disabledSkin: Embed('assets/images/3_increaseButton.png');
|
||||
}
|
||||
|
||||
.decreaseBtnFocus, .decreaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/images/3_decreaseButton.png');
|
||||
overSkin: Embed('assets/images/3_decreaseButton.png');
|
||||
downSkin: Embed('assets/images/3_decreaseButton.png');
|
||||
disabledSkin: Embed('assets/images/3_decreaseButton.png');
|
||||
}
|
||||
|
||||
.minimizeBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/images/3_minimizeButton.png');
|
||||
overSkin: Embed('assets/images/3_minimizeButton.png');
|
||||
downSkin: Embed('assets/images/3_minimizeButton.png');
|
||||
disabledSkin: Embed('assets/images/3_minimizeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.resizeHndlr
|
||||
{
|
||||
upSkin: Embed('assets/images/resizeHandler.png');
|
||||
overSkin: Embed('assets/images/resizeHandler.png');
|
||||
downSkin: Embed('assets/images/resizeHandler.png');
|
||||
disabledSkin: Embed('assets/images/resizeHandler.png');
|
||||
}
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/delete.png
Executable file
After Width: | Height: | Size: 439 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/ellipse.png
Executable file
After Width: | Height: | Size: 398 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/fit-to-screen.png
Executable file
After Width: | Height: | Size: 381 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/fit-to-width.png
Executable file
After Width: | Height: | Size: 299 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/hand.png
Executable file
After Width: | Height: | Size: 416 B |
@ -0,0 +1,38 @@
|
||||
Silk icon set 1.3
|
||||
|
||||
_________________________________________
|
||||
Mark James
|
||||
http://www.famfamfam.com/lab/icons/silk/
|
||||
_________________________________________
|
||||
|
||||
This work is licensed under a
|
||||
Creative Commons Attribution 2.5 License.
|
||||
[ http://creativecommons.org/licenses/by/2.5/ ]
|
||||
|
||||
This means you may use it for any purpose,
|
||||
and make any changes you like.
|
||||
All I ask is that you include a link back
|
||||
to this page in your credits.
|
||||
|
||||
Are you using this icon set? Send me an email
|
||||
(including a link or picture if available) to
|
||||
mjames@gmail.com
|
||||
|
||||
Any other questions about this icon set please
|
||||
contact mjames@gmail.com
|
||||
|
||||
==================================================
|
||||
Diagona Icons
|
||||
|
||||
Copyright (C) 2007 Yusuke Kamiyamane. All rights reserved.
|
||||
The icons are licensed under a Creative Commons Attribution
|
||||
3.0 license. <http://creativecommons.org/licenses/by/3.0/>
|
||||
|
||||
If you can't or don't want to provide a link back, please
|
||||
purchase a royalty-free license.
|
||||
<http://p.yusukekamiyamane.com/>
|
||||
|
||||
I'm unavailable for custom icon design work. But your
|
||||
suggestions are always welcome!
|
||||
<mailto:p@yusukekamiyamane.com>
|
||||
====================
|
BIN
bigbluebutton-client/branding/default/style/css/assets/images/left-arrow.png
Executable file
After Width: | Height: | Size: 290 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/line.png
Executable file
After Width: | Height: | Size: 184 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/marker.png
Executable file
After Width: | Height: | Size: 462 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/pencil.png
Executable file
After Width: | Height: | Size: 376 B |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/right-arrow.png
Executable file
After Width: | Height: | Size: 292 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/square.png
Executable file
After Width: | Height: | Size: 214 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/text.png
Executable file
After Width: | Height: | Size: 268 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/trash.png
Executable file
After Width: | Height: | Size: 541 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/triangle.png
Executable file
After Width: | Height: | Size: 345 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/undo.png
Executable file
After Width: | Height: | Size: 365 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/upload.png
Executable file
After Width: | Height: | Size: 269 B |
After Width: | Height: | Size: 2.4 KiB |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/webcam-muted.png
Executable file
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.0 KiB |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/webcam-unmuted.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
@ -3,11 +3,14 @@
|
||||
<project name="BigBlueButton Client" basedir="." default="clean-build-all" >
|
||||
<property environment="env" />
|
||||
<property name="STATIC_RSL" value="true" />
|
||||
<property name="DEBUG" value="true" />
|
||||
<property name="BUILD_ENV" value="DEV" />
|
||||
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
|
||||
<property name="LOCALE_DIR" value="${FLEX_HOME}/frameworks/locale"/>
|
||||
<property name="BASE_DIR" value="${basedir}" />
|
||||
<property name="RESOURCES_DIR" value="${BASE_DIR}/resources" />
|
||||
<property name="themeFile" value="BBBDefault.css"/>
|
||||
|
||||
<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" />
|
||||
|
||||
@ -15,21 +18,20 @@
|
||||
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
|
||||
|
||||
<!-- Declare module names here -->
|
||||
<property name="BBB_MAIN_TEST" value="BigBlueButtonTest" />
|
||||
<property name="BBB_MAIN" value="BigBlueButton" />
|
||||
<property name="BROADCAST" value="BroadcastModule" />
|
||||
<property name="CHAT" value="ChatModule" />
|
||||
<property name="VIEWERS" value="ViewersModule" />
|
||||
<property name="LISTENERS" value="ListenersModule" />
|
||||
<property name="PRESENT" value="PresentModule" />
|
||||
<property name="DESKSHARE" value="DeskShareModule" />
|
||||
<property name="DESKSHARE_SA" value="DeskshareStandalone" />
|
||||
<property name="CAM_PREVIEW_SA" value="WebcamPreviewStandalone" />
|
||||
<property name="CAM_VIEW_SA" value="WebcamViewStandalone" />
|
||||
<property name="PHONE" value="PhoneModule" />
|
||||
<property name="NOTES" value="NotesModule" />
|
||||
<property name="VIDEO" value="VideoconfModule" />
|
||||
<property name="WHITEBOARD" value="WhiteboardModule" />
|
||||
<property name="DYN_INFO" value="DynamicInfoModule" />
|
||||
<property name="BREAKOUT" value="BreakoutModule" />
|
||||
<property name="CLASSROOM_AUDIO" value="ClassroomAudioModule" />
|
||||
<property name="SETTINGS" value="SettingsModule" />
|
||||
<property name="VIDEO_DOCK" value="VideodockModule" />
|
||||
<property name="LAYOUT" value="LayoutModule" />
|
||||
|
||||
@ -69,9 +71,9 @@
|
||||
|
||||
<target name="branding" depends="init-ant-contrib">
|
||||
<sequential>
|
||||
<mxmlc file="${SRC_DIR}/branding/css/${themeFile}"
|
||||
<mxmlc file="${BASE_DIR}/branding/default/style/css/${themeFile}"
|
||||
output="${OUTPUT_DIR}/branding/css/${themeFile}.swf"
|
||||
debug="false"
|
||||
debug="${DEBUG}"
|
||||
mxml.compatibility-version="3.0.0"
|
||||
swf-version="13"
|
||||
optimize="true">
|
||||
@ -162,14 +164,18 @@
|
||||
<fileset dir="${BASE_DIR}/src/org/bigbluebutton/common/assets/images/" />
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="build-breakout" description="Compile Breakout Module" >
|
||||
<build-module src="${SRC_DIR}" target="${BREAKOUT}" />
|
||||
</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-viewers" description="Compile Viewers Module">
|
||||
<build-module src="${SRC_DIR}" target="${VIEWERS}" />
|
||||
@ -183,16 +189,26 @@
|
||||
<build-module src="${SRC_DIR}" target="${PRESENT}" />
|
||||
</target>
|
||||
|
||||
<target name="build-deskshare-standalone" depends="build-deskshare-no-linker" description="Compile Deskshare Standalone Module">
|
||||
<target name="build-deskshare-standalone" depends="build-deskshare-no-linker" description="Compile Deskshare Standalone Application">
|
||||
<echo message="Compiling deskshare standalone without optimization." />
|
||||
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE_SA}" />
|
||||
</target>
|
||||
|
||||
<target name="build-deskshare-no-linker" description="Compile Deskshare Module without the linker">
|
||||
<echo message="Compiling deskshare without optimization." />
|
||||
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE}" />
|
||||
</target>
|
||||
|
||||
|
||||
<target name="build-deskshare-no-linker" description="Compile Deskshare Module without the linker">
|
||||
<echo message="Compiling deskshare without optimization." />
|
||||
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE}" />
|
||||
</target>
|
||||
|
||||
<target name="build-webcam-preview-standalone" description="Compile Webcam Preview Standalone Application">
|
||||
<echo message="Compiling webcam preview standalone without optimization." />
|
||||
<build-module-no-link src="${SRC_DIR}" target="${CAM_PREVIEW_SA}" />
|
||||
</target>
|
||||
|
||||
<target name="build-webcam-view-standalone" description="Compile Webcam View Standalone Application">
|
||||
<echo message="Compiling webcam view standalone without optimization." />
|
||||
<build-module-no-link src="${SRC_DIR}" target="${CAM_VIEW_SA}" />
|
||||
</target>
|
||||
|
||||
<target name="build-deskshare" description="Compile Deskshare Module">
|
||||
<build-module src="${SRC_DIR}" target="${DESKSHARE}" />
|
||||
<echo message="Copying deskshare applet for Deskshare Module" />
|
||||
@ -207,14 +223,6 @@
|
||||
<fileset dir="${BASE_DIR}/src/org/bigbluebutton/modules/phone/views/assets/images/" />
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="build-classroom-audio" description="Compile Classroom Audio Module">
|
||||
<build-module src="${SRC_DIR}" target="${CLASSROOM_AUDIO}" />
|
||||
</target>
|
||||
|
||||
<target name="build-settings" description="Compile Settings Module">
|
||||
<build-module src="${SRC_DIR}" target="${SETTINGS}" />
|
||||
</target>
|
||||
|
||||
<target name="build-video" description="Compile Video Module">
|
||||
<build-module src="${SRC_DIR}" target="${VIDEO}" />
|
||||
@ -228,24 +236,20 @@
|
||||
<build-module src="${SRC_DIR}" target="${WHITEBOARD}" />
|
||||
</target>
|
||||
|
||||
<target name="build-dyn" description="Compile Dynamic Info Module">
|
||||
<build-module src="${SRC_DIR}" target="${DYN_INFO}" />
|
||||
</target>
|
||||
|
||||
<target name="build-layout" description="Compile Layout Module">
|
||||
<build-module src="${SRC_DIR}" target="${LAYOUT}" />
|
||||
</target>
|
||||
|
||||
<!-- just a grouping of modules to compile -->
|
||||
<target name="build-main-chat-viewers-listeners-present"
|
||||
depends="build-bbb-main, build-bbb-main-test, build-chat, build-viewers, build-listeners, build-present, build-breakout, build-layout"
|
||||
description="Compile main, chat, viewers, listeners, present, breakout modules">
|
||||
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present, build-layout, build-broadcast"
|
||||
description="Compile main, chat, viewers, listeners, present modules">
|
||||
</target>
|
||||
|
||||
<!-- just a grouping of modules to compile -->
|
||||
<target name="build-deskshare-phone-video-whiteboard-dyn"
|
||||
depends="build-deskshare, build-phone, build-video, build-videodock, build-whiteboard, build-dyn, build-classroom-audio, build-settings"
|
||||
description="Compile deskshare, phone, video, whiteboard, dynamic info modules">
|
||||
depends="build-deskshare, build-phone, build-video, build-videodock, build-whiteboard, build-notes"
|
||||
description="Compile deskshare, phone, video, whiteboard modules">
|
||||
</target>
|
||||
|
||||
<macrodef name="build-main">
|
||||
@ -254,7 +258,7 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" link-report="linker-report.xml">
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" link-report="linker-report.xml">
|
||||
<target-player>11</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
@ -293,7 +297,7 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13">
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13">
|
||||
<target-player>11</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
@ -320,7 +324,7 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" load-externs="linker-report.xml">
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" load-externs="linker-report.xml">
|
||||
<target-player>11</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
@ -378,7 +382,8 @@
|
||||
<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}/example-info-data.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
|
||||
@ -455,13 +460,16 @@
|
||||
|
||||
<!-- NOTE: compile-deskshare-standalone MUST come first before compile-bbb as we need the deskshare-standalone
|
||||
to be compiled withouth being optimized by using the linker -->
|
||||
<target name="clean-build-bbb" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
<target name="clean-build-bbb" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
|
||||
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb"
|
||||
description="Build BBB client skipping compiling of locales"/>
|
||||
<target name="clean-build-all" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
<target name="clean-build-all" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
|
||||
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb, branding"
|
||||
description="Build BBB client including locales"/>
|
||||
<target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
<target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
|
||||
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb"
|
||||
description="Build BBB client without locales"/>
|
||||
<target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/>
|
||||
|
||||
<target name="build-custom" depends="init-ant-contrib, build-classroom-audio" description="Build a custom defined module only, to save time as each build takes several minutes" />
|
||||
<target name="build-custom" depends="init-ant-contrib" description="Build a custom defined module only, to save time as each build takes several minutes" />
|
||||
</project>
|
||||
|
@ -173,6 +173,10 @@ bbb.logout.rejected = The connection to the server has been rejected
|
||||
bbb.logout.invalidapp = The red5 app does not exist
|
||||
bbb.logout.unknown = Your client has lost connection with the server
|
||||
bbb.logout.usercommand = You have logged out of the conference
|
||||
bbb.notes.title = Notes
|
||||
bbb.notes.cmpColorPicker.toolTip = Text Color
|
||||
bbb.notes.saveBtn = Save
|
||||
bbb.notes.saveBtn.toolTip = Save Note
|
||||
bbb.settings.deskshare.instructions = Click Allow on the prompt that pops up to check that desktop sharing is working properly for you
|
||||
bbb.settings.deskshare.start = Check Desktop Sharing
|
||||
bbb.settings.voice.volume = Microphone Activity
|
||||
@ -217,6 +221,8 @@ bbb.accessibility.chat.plustab.fontsize = Font size
|
||||
bbb.accessibility.chat.chatView.publicTabNew = NEW MESSAGE IN PUBLIC CHAT
|
||||
bbb.accessibility.chat.chatView.privateTabNew = NEW MESSAGE IN PRIVATE CHAT WITH {0}
|
||||
|
||||
bbb.accessibility.notes.notesview.input = Notes input
|
||||
|
||||
bbb.shortcuthelp.title = Shortcut glossary
|
||||
bbb.shortcuthelp.dropdown.all = All shortcuts
|
||||
bbb.shortcuthelp.dropdown.general = General shortcuts
|
||||
|
@ -6,7 +6,7 @@
|
||||
<porttest host="HOST" application="video" timeout="10000"/>
|
||||
<application uri="rtmp://HOST/bigbluebutton" host="http://HOST/bigbluebutton/api/enter" />
|
||||
<language userSelectionEnabled="true" />
|
||||
<skinning enabled="false" url="branding/css/theme.css.swf" />
|
||||
<skinning enabled="true" url="http://HOST/client/branding/css/BBBDefault.css.swf" />
|
||||
<layout showLogButton="false" showVideoLayout="false" showResetLayout="true" defaultLayout="Default"
|
||||
showToolbar="true" showFooter="true" showHelpButton="true" showLogoutWindow="true"/>
|
||||
|
||||
@ -25,13 +25,11 @@
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
host="http://HOST/bigbluebutton/api/enter"
|
||||
allowKickUser="false"
|
||||
windowVisible="true"
|
||||
/>
|
||||
|
||||
<module name="ListenersModule" url="http://HOST/client/ListenersModule.swf?v=VERSION"
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
recordingHost="http://HOST"
|
||||
windowVisible="true"
|
||||
position="bottom-left"
|
||||
/>
|
||||
|
||||
@ -74,7 +72,8 @@
|
||||
filterDivisor="4"
|
||||
enableH264 = "true"
|
||||
h264Level = "2.1"
|
||||
h264Profile = "main"
|
||||
h264Profile = "main"
|
||||
displayAvatar = "false"
|
||||
/>
|
||||
|
||||
<module name="WhiteboardModule" url="http://HOST/client/WhiteboardModule.swf?v=VERSION"
|
||||
@ -94,6 +93,7 @@
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
dependsOn="VideoconfModule, ViewersModule"
|
||||
autoDock="true"
|
||||
showControls="true"
|
||||
maximizeWindow="false"
|
||||
position="bottom-right"
|
||||
width="172"
|
||||
@ -107,24 +107,22 @@
|
||||
layoutConfig="http://HOST/client/conf/layout.xml"
|
||||
enableEdit="true"
|
||||
/>
|
||||
|
||||
<!-- new module in development:
|
||||
<module name="DynamicInfoModule" url="http://HOST/client/DynamicInfoModule.swf?v=VERSION"
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
host="http://HOST"
|
||||
infoURL="http://HOST/client/conf/example-info-data.xml?user={userID}&role={role}&meetingID={meetingID}"
|
||||
/>
|
||||
-->
|
||||
|
||||
<!--<module name="ExampleChatModule" url="http://HOST/client/ExampleChatModule.swf?v=56"
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
host="http://HOST"
|
||||
/>-->
|
||||
|
||||
<!--<module name="SharedNotesModule" url="http://HOST/client/SharedNotesModule.swf?v=VERSION"
|
||||
uri="http://192.168.0.225/bigbluebutton"
|
||||
dependsOn="ViewersModule"
|
||||
/>-->
|
||||
|
||||
<!--
|
||||
<module name="NotesModule" url="http://HOST/client/NotesModule.swf?v=VERSION"
|
||||
saveURL="http://HOST"
|
||||
position="top-left"
|
||||
/>
|
||||
|
||||
<module name="BroadcastModule" url="http://HOST/client/BroadcastModule.swf?v=VERSION"
|
||||
uri="rtmp://HOST/bigbluebutton"
|
||||
streamsUri="http://HOST/streams.xml"
|
||||
position="top-left"
|
||||
showStreams="true"
|
||||
autoPlay="false"
|
||||
dependsOn="ViewersModule"
|
||||
/>
|
||||
-->
|
||||
|
||||
</modules>
|
||||
</config>
|
||||
|
@ -11,6 +11,8 @@
|
||||
<script type="text/javascript" src="http://192.168.0.249/client/swfobject/swfobject.js"></script>
|
||||
<script type="text/javascript">
|
||||
swfobject.registerObject("BigBlueButton", "11", "expressInstall.swf");
|
||||
swfobject.registerObject("WebcamPreviewStandalone", "11", "expressInstall.swf");
|
||||
swfobject.registerObject("WebcamViewStandalone", "11", "expressInstall.swf");
|
||||
</script>
|
||||
<script src="http://192.168.0.249/client/lib/jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="http://192.168.0.249/client/lib/bigbluebutton.js" language="javascript"></script>
|
||||
@ -18,12 +20,21 @@
|
||||
<script src="http://192.168.0.249/client/lib/bbb_blinker.js" language="javascript"></script>
|
||||
<script src="http://192.168.0.249/client/lib/bbb_deskshare.js" language="javascript"></script>
|
||||
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_bridge.js"></script>
|
||||
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_cam_preview.js"></script>
|
||||
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_cam_view.js"></script>
|
||||
<script type="text/javascript" src="http://192.168.0.235/3rd-party.js"></script>
|
||||
<script>
|
||||
window.displayBBBClient = function() {
|
||||
var bbbc = document.getElementById("flashclient");
|
||||
var wcpc = document.getElementById("webcampreviewclient");
|
||||
wcpc.style.display = "none";
|
||||
bbbc.style.display = "block";
|
||||
}
|
||||
window.displayWCClient = function() {
|
||||
console.log("Displaying webcam preview client");
|
||||
var wcpc = document.getElementById("webcampreview");
|
||||
wcpc.style.display = "block";
|
||||
}
|
||||
window.onload = function() {
|
||||
registerListeners();
|
||||
}
|
||||
@ -31,24 +42,77 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="controls">
|
||||
<button type="button" onclick="displayBBBClient()">Show Client</button>
|
||||
<button type="button" onclick="BBB.shareVideoCamera()">Webcam</button>
|
||||
<button type="button" onclick="registerListeners()">Listen for Events</button>
|
||||
<button type="button" onclick="displayBBBClient()">Show BBB Client</button>
|
||||
<button type="button" onclick="displayWCClient()">Show WC Client</button>
|
||||
<button type="button" onclick="BBB.shareVideoCamera()">Share Webcam</button>
|
||||
<button type="button" onclick="BBB.stopSharingCamera()">Stop Webcam</button>
|
||||
<button type="button" onclick="BBB.switchPresenter('x8hxeozsqbk1')">Switch Presenter</button>
|
||||
<button type="button" onclick="joinVoiceConference2()">Join Voice</button>
|
||||
<button type="button" onclick="leaveVoiceConference2()">Leave Voice</button>
|
||||
<button type="button" onclick="getMyUserID()">Get My UserID</button>
|
||||
<button type="button" onclick="getMeetingID()">Get MeetingID</button>
|
||||
<button type="button" onclick="getMyRoleAsynch()">Get My Role Asynch</button>
|
||||
<button type="button" onclick="getMyRoleSynch()">Get My Role Synch</button>
|
||||
<button type="button" onclick="muteMe()">Mute Me</button>
|
||||
<button type="button" onclick="unmuteMe()">Unmute Me</button>
|
||||
<button type="button" onclick="muteAll()">Mute All</button>
|
||||
<button type="button" onclick="unmuteAll()">Unmute All</button>
|
||||
<button type="button" onclick="switchLayout('Video Chat')">Switch Video Layout</button>
|
||||
<button type="button" onclick="switchLayout('Lecture')">Switch Present Layout</button>
|
||||
<button type="button" onclick="switchLayout('S2SVideoChat')">Switch Video Layout</button>
|
||||
<button type="button" onclick="switchLayout('S2SPresentation')">Switch Present Layout</button>
|
||||
<button type="button" onclick="lockLayout(true)">Lock Layout</button>
|
||||
<button type="button" onclick="lockLayout(false)">Unlock Layout</button>
|
||||
<button type="button" onclick="sendPublicChat()">Send Public Chat</button>
|
||||
<button type="button" onclick="sendPrivateChat()">Send Private Chat</button>
|
||||
<button type="button" onclick="amIPresenterSync()">Am I Presenter Sync</button>
|
||||
<button type="button" onclick="amIPresenterAsync()">Am I Presenter Async</button>
|
||||
</div>
|
||||
<div id="flashclient" style="display: none">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="90%" id="BigBlueButton" name="BigBlueButton" align="middle">
|
||||
<div id="webcampreview" style="background-color:#FFD700;height:240px;width:320px;float:left;">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540001" width="320" height="240" id="WebcamPreviewStandalone" name="WebcamPreviewStandalone" align="middle">
|
||||
<param name="movie" value="http://192.168.0.249/client/WebcamPreviewStandalone.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="allowfullscreen" value="true" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/WebcamPreviewStandalone.swf?v=VERSION" width="100%" height="90%" align="middle">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflashplayer">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</div>
|
||||
<div id="webcamview" style="background-color:#FFD700;height:240px;width:320px;float:left;">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540002" width="320" height="240" id="WebcamViewStandalone" name="WebcamViewStandalone" align="middle">
|
||||
<param name="movie" value="http://192.168.0.249/client/WebcamViewStandalone.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="allowfullscreen" value="true" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/WebcamViewStandalone.swf?v=VERSION" width="100%" height="90%" align="middle">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflashplayer">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</div>
|
||||
<div id="flashclient" style="background-color:#EEEEEE;height:900px;width:1200px;float:left;">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="50%" height="50%" id="BigBlueButton" name="BigBlueButton" align="middle">
|
||||
<param name="movie" value="http://192.168.0.249/client/BigBlueButton.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="allowfullscreen" value="true" />
|
||||
@ -68,7 +132,7 @@
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</div>
|
||||
</div>
|
||||
<div id="update-display"/>
|
||||
<div id="notifications" aria-live="polite" role="region" aria-label="Chat Notifications"></div>
|
||||
</body>
|
||||
|
BIN
bigbluebutton-client/resources/prod/avatar.png
Normal file
After Width: | Height: | Size: 14 KiB |
@ -1,6 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<layouts>
|
||||
<layout name="Video Chat">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" minimized="true" order="3" hidden="true" />
|
||||
<window name="VideoDock" width="1" height="1" x="0" y="0" order="0"/>
|
||||
<window name="ChatWindow" width="0.303125" height="0.9955703211517165" x="0.3229166666666667" y="0.9656699889258029" order="4" hidden="true" />
|
||||
@ -8,6 +10,8 @@
|
||||
<window name="ListenersWindow" minimized="true" hidden="true" order="2"/>
|
||||
</layout>
|
||||
<layout name="Default" default="true">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" width="0.1772793053545586" height="0.33643617021276595" x="0" y="0" />
|
||||
<window name="ListenersWindow" width="0.1772793053545586" height="0.33643617021276595" x="0" y="0.34308510638297873" />
|
||||
<window name="PresentationWindow" width="0.5137481910274964" height="0.9946808510638298" x="0.18017366136034732" y="0" />
|
||||
@ -15,6 +19,8 @@
|
||||
<window name="ChatWindow" width="0.3031837916063676" height="0.9960106382978723" x="0.6968162083936325" y="0" />
|
||||
</layout>
|
||||
<layout name="Meeting">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="VideoDock" width="0.6570188133140377" height="0.9960106382978723" x="0" y="0" />
|
||||
<window name="ChatWindow" width="0.3393632416787265" height="0.5305851063829787" x="0.658465991316932" y="0" />
|
||||
<window name="ListenersWindow" hidden="true" />
|
||||
@ -22,6 +28,8 @@
|
||||
<window name="PresentationWindow" width="0.34008683068017365" height="0.4601063829787234" x="0.658465991316932" y="0.535904255319149" />
|
||||
</layout>
|
||||
<layout name="Webinar">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" minimized="true" />
|
||||
<window name="VideoDock" width="0.2923611111111111" height="0.4640957446808511" x="0.7048611111111112" y="0.535904255319149" />
|
||||
<window name="ListenersWindow" minimized="true" />
|
||||
@ -29,6 +37,8 @@
|
||||
<window name="ChatWindow" width="0.2923611111111111" height="0.5305851063829787" x="0.7048611111111112" y="0" />
|
||||
</layout>
|
||||
<layout name="Lecture assistant">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" width="0.4597222222222222" height="0.9958677685950413" x="0.2263888888888889" y="0" />
|
||||
<window name="ListenersWindow" width="0.2222222222222222" height="0.4765840220385675" x="0" y="0.5179063360881543" />
|
||||
<window name="ViewersWindow" width="0.22152777777777777" height="0.5055096418732782" x="0" y="0" />
|
||||
@ -36,6 +46,8 @@
|
||||
<window name="VideoDock" width="0.30972222222222223" height="0.4256198347107438" x="0.6902777777777778" y="0.568870523415978" />
|
||||
</layout>
|
||||
<layout name="Lecture">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" hidden="true" />
|
||||
<window name="VideoDock" width="0.2923611111111111" height="0.4640957446808511" x="0.7048611111111112" y="0.535904255319149" />
|
||||
<window name="ListenersWindow" hidden="true" />
|
||||
@ -43,6 +55,8 @@
|
||||
<window name="ChatWindow" width="0.2923611111111111" height="0.5305851063829787" x="0.7048611111111112" y="0" />
|
||||
</layout>
|
||||
<layout name="Lecture" role="presenter">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" hidden="true" />
|
||||
<window name="ListenersWindow" hidden="true" />
|
||||
<window name="ViewersWindow" hidden="true" />
|
||||
@ -50,10 +64,48 @@
|
||||
<window name="VideoDock" hidden="true" />
|
||||
</layout>
|
||||
<layout name="Lecture" role="moderator">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" width="0.4597222222222222" height="0.9958677685950413" x="0.2263888888888889" y="0" />
|
||||
<window name="ListenersWindow" width="0.2222222222222222" height="0.4765840220385675" x="0" y="0.5179063360881543" />
|
||||
<window name="ViewersWindow" width="0.22152777777777777" height="0.5055096418732782" x="0" y="0" />
|
||||
<window name="PresentationWindow" width="0.3104166666666667" height="0.5537190082644629" x="0.6895833333333333" y="0" />
|
||||
<window name="VideoDock" width="0.30972222222222223" height="0.4256198347107438" x="0.6902777777777778" y="0.568870523415978" />
|
||||
</layout>
|
||||
<layout name="S2SPresentation">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="PresentationWindow" width="0.8" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
|
||||
</layout>
|
||||
<layout name="S2SVideoChat">
|
||||
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="VideoDock" width="1" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
</layout>
|
||||
<layout name="Notes">
|
||||
<window name="NotesWindow" hidden="false" width="0.7" height="0.4" x="0" y="0.6" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="false" width="0.7" height="0.6" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" width="0.3" height="1" x="0.7" y="0" draggable="false" resizable="false"/>
|
||||
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
</layout>
|
||||
<layout name="Broadcast">
|
||||
<window name="NotesWindow" hidden="false" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="BroadcastWindow" hidden="false" width="0.7" height="0.9" x="0" y="0" draggable="false" resizable="false"/>
|
||||
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ChatWindow" width="0.3" height="1" x="0.7" y="0" draggable="false" resizable="false"/>
|
||||
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
|
||||
</layout>
|
||||
</layouts>
|
||||
|
@ -1,26 +1,67 @@
|
||||
|
||||
var registerListeners = function() {
|
||||
console.log("Listening for events.");
|
||||
BBB.listen("UserLeftEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + "] has left.");
|
||||
});
|
||||
BBB.listen("UserJoinedEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + ", [" + bbbEvent.userName + "] has joined.");
|
||||
});
|
||||
BBB.listen("UserJoinedVoiceEvent", function(bbbEvent) {
|
||||
console.log("Received userHasJoinedVoiceConference event");
|
||||
});
|
||||
BBB.listen("NewPublicChatEvent", function(bbbEvent) {
|
||||
console.log("Received NewPublicChatEvent [" + bbbEvent.message + "]");
|
||||
});
|
||||
BBB.listen("NewPrivateChatEvent", function(bbbEvent) {
|
||||
console.log("Received NewPrivateChatEvent event");
|
||||
});
|
||||
BBB.listen("UserJoinedVoiceEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + "] had joined the voice conference.");
|
||||
});
|
||||
BBB.listen("UserLeftVoiceEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + "has left the voice conference.");
|
||||
});
|
||||
BBB.listen("UserVoiceMutedEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + "] is muted [" + bbbEvent.muted + "]");
|
||||
});
|
||||
BBB.listen("UserLockedVoiceEvent", function(bbbEvent) {
|
||||
console.log("User [" + bbbEvent.userID + "] is locked [" + bbbEvent.locked + "]");
|
||||
});
|
||||
BBB.listen("CamStreamSharedEvent", function(bbbEvent) {
|
||||
console.log("User CamStreamSharedEvent [" + bbbEvent.uri + "," + bbbEvent.streamName + "]");
|
||||
CAM_VIEW.viewWebcamStream(bbbEvent.uri, bbbEvent.streamName);
|
||||
});
|
||||
BBB.listen("BroadcastingCameraStartedEvent", function(bbbEvent) {
|
||||
console.log("User BroadcastingCameraStartedEvent [" + bbbEvent.camIndex + "] [" + bbbEvent.camWidth + "]");
|
||||
CAM_PREVIEW.previewCamera(bbbEvent.camIndex, bbbEvent.camWidth, bbbEvent.camHeight, bbbEvent.camKeyFrameInterval,
|
||||
bbbEvent.camModeFps, bbbEvent.camQualityBandwidth, bbbEvent.camQualityPicture);
|
||||
});
|
||||
BBB.listen("BroadcastingCameraStoppedEvent", function(bbbEvent) {
|
||||
console.log("User BroadcastingCameraStoppedEvent ]");
|
||||
CAM_PREVIEW.stopPreviewCamera();
|
||||
});
|
||||
}
|
||||
|
||||
var leaveVoiceConference2 = function () {
|
||||
BBB.leaveVoiceConference();
|
||||
}
|
||||
|
||||
var joinVoiceConference2 = function () {
|
||||
BBB.joinVoiceConference();
|
||||
}
|
||||
|
||||
var amIPresenterAsync = function() {
|
||||
BBB.listen("AmIPresenterQueryResponse", function(bbbEvent) {
|
||||
console.log("Received AmIPresenterQueryResponse event [" + bbbEvent.amIPresenter + "]");
|
||||
});
|
||||
|
||||
BBB.amIPresenter();
|
||||
}
|
||||
|
||||
var amIPresenterSync = function() {
|
||||
BBB.amIPresenter(function(amIPresenter) {
|
||||
console.log("Am I Presenter = " + amIPresenter);
|
||||
});
|
||||
}
|
||||
|
||||
var getMyRoleAsynch = function() {
|
||||
BBB.listen("GetMyRoleResponse", function(bbbEvent) {
|
||||
console.log("Received GetMyRoleResponse event");
|
||||
@ -35,6 +76,18 @@ var getMyRoleSynch = function() {
|
||||
});
|
||||
}
|
||||
|
||||
var getMyUserID = function() {
|
||||
BBB.getMyUserID(function(userID) {
|
||||
console.log("My user ID = [" + userID + "]");
|
||||
});
|
||||
}
|
||||
|
||||
var getMeetingID = function() {
|
||||
BBB.getMeetingID(function(meetingID) {
|
||||
console.log("Meeting ID = [" + meetingID + "]");
|
||||
});
|
||||
}
|
||||
|
||||
var muteMe = function() {
|
||||
BBB.muteMe();
|
||||
}
|
||||
|
@ -12,6 +12,33 @@
|
||||
return swfobject.getObjectById("BigBlueButton");
|
||||
}
|
||||
|
||||
BBB.switchPresenter = function(newPresenterUserID) {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
console.log("Request to switch presenter to [" + newPresenterUserID + "]");
|
||||
swfObj.switchPresenterRequest(newPresenterUserID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the Flash client if user is presenter.
|
||||
* Params:
|
||||
* callback - function if you want a callback as response. Otherwise, you need to listen
|
||||
* for the response as an event.
|
||||
*/
|
||||
BBB.amIPresenter = function(callback) {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
if (arguments.length == 0) {
|
||||
swfObj.amIPresenterRequestAsync();
|
||||
} else {
|
||||
if (typeof callback === 'function') {
|
||||
callback(swfObj.amIPresenterRequestSync());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the Flash client for the user's role.
|
||||
* Params:
|
||||
@ -31,6 +58,32 @@
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get external meetingID.
|
||||
*/
|
||||
BBB.getMyUserID = function(callback) {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
console.log("Getting my userID");
|
||||
if (typeof callback === 'function') {
|
||||
callback(swfObj.getMyUserID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get external meetingID.
|
||||
*/
|
||||
BBB.getMeetingID = function(callback) {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
console.log("Getting external meetingID");
|
||||
if (typeof callback === 'function') {
|
||||
callback(swfObj.getExternalMeetingID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Join the voice conference.
|
||||
*/
|
||||
@ -42,16 +95,35 @@
|
||||
}
|
||||
}
|
||||
|
||||
BBB.leaveVoiceConference = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
console.log("Leave voice");
|
||||
swfObj.leaveVoiceRequest();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Share user's webcam.
|
||||
*/
|
||||
BBB.shareVideoCamera = function() {
|
||||
BBB.shareVideoCamera = function(publishInClient) {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.shareVideoCamera();
|
||||
if (typeof publishInClient === 'boolean') {
|
||||
swfObj.shareVideoCamera(publishInClient);
|
||||
} else {
|
||||
swfObj.shareVideoCamera();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BBB.stopSharingCamera = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.stopShareCameraRequest();
|
||||
}
|
||||
}
|
||||
|
||||
BBB.muteMe = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
@ -187,16 +259,32 @@
|
||||
|
||||
/************************************************
|
||||
* EVENT NAME CONSTANTS
|
||||
*
|
||||
* See https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-client/src/org/bigbluebutton/core/EventConstants.as
|
||||
*
|
||||
************************************************/
|
||||
var GET_MY_ROLE_REQ = 'GetMyRoleRequest';
|
||||
var SWITCH_LAYOUT_REQ = 'SwitchLayoutRequest';
|
||||
var JOIN_VOICE_REQ = 'JoinVoiceRequest';
|
||||
var MUTE_ALL_REQ = 'MuteAllRequest';
|
||||
var MUTE_ME_REQ = 'MuteMeRequest';
|
||||
var SHARE_CAM_REQ = 'ShareCameraRequest';
|
||||
|
||||
|
||||
|
||||
var GET_MY_ROLE_RESP:String = 'GetMyRoleResponse';
|
||||
var AM_I_PRESENTER_RESP:String = 'AmIPresenterQueryResponse';
|
||||
var AM_I_SHARING_CAM_RESP:String = 'AmISharingCamQueryResponse';
|
||||
var BROADCASTING_CAM_STARTED:String = 'BroadcastingCameraStartedEvent';
|
||||
var BROADCASTING_CAM_STOPPED:String = 'BroadcastingCameraStoppedEvent';
|
||||
var I_AM_SHARING_CAM:String = 'IAmSharingCamEvent';
|
||||
var CAM_STREAM_SHARED:String = 'CamStreamSharedEvent';
|
||||
var USER_JOINED:String = 'UserJoinedEvent';
|
||||
var USER_LEFT:String = 'UserLeftEvent';
|
||||
var SWITCHED_PRESENTER:String = 'SwitchedPresenterEvent';
|
||||
var NEW_PRIVATE_CHAT:String = 'NewPrivateChatEvent';
|
||||
var NEW_PUBLIC_CHAT:String = 'NewPublicChatEvent';
|
||||
var SWITCHED_LAYOUT:String = 'SwitchedLayoutEvent';
|
||||
var REMOTE_LOCKED_LAYOUT:String = 'RemoteLockedLayoutEvent';
|
||||
var REMOTE_UNLOCKED_LAYOUT:String = 'RemoteUnlockedLayoutEvent';
|
||||
var USER_JOINED_VOICE:String = 'UserJoinedVoiceEvent';
|
||||
var USER_LEFT_VOICE:String = 'UserLeftVoiceEvent';
|
||||
var USER_MUTED_VOICE:String = 'UserVoiceMutedEvent';
|
||||
var USER_TALKING:String = 'UserTalkingEvent';
|
||||
var USER_LOCKED_VOICE:String = 'UserLockedVoiceEvent';
|
||||
var START_PRIVATE_CHAT:String = "StartPrivateChatEvent";
|
||||
|
||||
window.BBB = BBB;
|
||||
})(this);
|
||||
|
||||
|
44
bigbluebutton-client/resources/prod/lib/bbb_api_cam_preview.js
Executable file
@ -0,0 +1,44 @@
|
||||
(function(window, undefined) {
|
||||
|
||||
var CAM_PREVIEW = {};
|
||||
|
||||
/**
|
||||
* Internal function to get the BBB embed object. Seems like we have to do this
|
||||
* each time and can't create a var for it.
|
||||
*
|
||||
* To get the object, see https://code.google.com/p/swfobject/wiki/api
|
||||
*/
|
||||
function getSwfObj() {
|
||||
return swfobject.getObjectById("WebcamPreviewStandalone");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Preview user's webcam.
|
||||
*/
|
||||
CAM_PREVIEW.previewCamera = function(camIndex, camWidth, camHeight,
|
||||
camKeyFrameInterval, camModeFps,
|
||||
camQualityBandwidth, camQualityPicture) {
|
||||
console.log("CAM_PREVIEW::previewCamera [" + camIndex + "]");
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.startPreviewCamera(camIndex, camWidth, camHeight, camKeyFrameInterval, camModeFps,
|
||||
camQualityBandwidth, camQualityPicture);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop previewing user's webcam.
|
||||
*/
|
||||
CAM_PREVIEW.stopPreviewCamera = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.stopPreviewCamera();
|
||||
}
|
||||
}
|
||||
|
||||
console.log("CAM_PREVIEW INITIALIZED");
|
||||
|
||||
window.CAM_PREVIEW = CAM_PREVIEW;
|
||||
})(this);
|
||||
|
42
bigbluebutton-client/resources/prod/lib/bbb_api_cam_view.js
Executable file
@ -0,0 +1,42 @@
|
||||
(function(window, undefined) {
|
||||
|
||||
var CAM_VIEW = {};
|
||||
|
||||
/**
|
||||
* Internal function to get the BBB embed object. Seems like we have to do this
|
||||
* each time and can't create a var for it.
|
||||
*
|
||||
* To get the object, see https://code.google.com/p/swfobject/wiki/api
|
||||
*/
|
||||
function getSwfObj() {
|
||||
return swfobject.getObjectById("WebcamViewStandalone");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* View user's webcam.
|
||||
*/
|
||||
CAM_VIEW.viewWebcamStream = function(url, streamName) {
|
||||
console.log("CAM_VIEW::viewWebcamStream [" + url + "," + streamName + "]");
|
||||
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
console.log("CAM_VIEW::viewWebcamStream 2 [" + url + "," + streamName + "]");
|
||||
swfObj.startViewCameraStream(url, streamName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop viewing user's webcam.
|
||||
*/
|
||||
CAM_VIEW.stopViewWebcamStream = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.stopViewCameraStream();
|
||||
}
|
||||
}
|
||||
|
||||
console.log("CAM_VIEW INITIALIZED");
|
||||
window.CAM_VIEW = CAM_VIEW;
|
||||
})(this);
|
||||
|
5
bigbluebutton-client/resources/streams.xml
Executable file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" ?>
|
||||
<streams>
|
||||
<stream url="rtmp://192.168.153.128/oflaDemo" id="hobbit_vp6" name="The Hobbit"/>
|
||||
<stream url="rtmp://192.168.153.128/oflaDemo" id="startrekintodarkness_vp6" name="Star Trek"/>
|
||||
</streams>
|
@ -25,12 +25,11 @@
|
||||
xmlns:apimap="org.bigbluebutton.main.api.maps.*"
|
||||
xmlns:coreMap="org.bigbluebutton.core.controllers.maps.*"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
xmlns:m="library://melomel/2010"
|
||||
pageTitle="BigBlueButton"
|
||||
layout="absolute" preinitialize="init()"
|
||||
preloader="org.bigbluebutton.main.model.BigBlueButtonPreloader"
|
||||
applicationComplete="hotkeyCapture()">
|
||||
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
@ -50,7 +49,6 @@
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
private var langResources:ResourceUtil = null; //ResourceUtil.getInstance();
|
||||
|
||||
public var myFoo:String = "bar";
|
||||
|
||||
/**
|
||||
* Thse two lines are workaround for this. (ralam - Nov 8, 2008)
|
||||
@ -63,147 +61,8 @@
|
||||
/** another workaround - for this issue: https://bugs.adobe.com/jira/browse/SDK-13121*/
|
||||
private var hist:HistoryManager
|
||||
|
||||
private function handleChatEvent(e:Event):void {
|
||||
trace('Got CHAT_EVENT');
|
||||
}
|
||||
|
||||
public function setFoo(f:String):void {
|
||||
myFoo = f;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* Testing
|
||||
******************************/
|
||||
|
||||
private var globalDispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
// Login test
|
||||
private static var isLoggedIn:Boolean = false; // flag to indicate if we successfully logged in
|
||||
|
||||
// Chat test
|
||||
private static var chatMessageSent:String = "";
|
||||
private static var chatTestSucceeded:Boolean = false;
|
||||
|
||||
// Voice test
|
||||
private static var didUserJoin:Boolean = false;
|
||||
|
||||
// Presentation test
|
||||
private static var didPresentationConvert:Boolean = false;
|
||||
|
||||
// Video test
|
||||
private static var didVideoStart:Boolean = false;
|
||||
|
||||
|
||||
public function handleLoginEvent(event:BBBEvent):void {
|
||||
LogUtil.debug("******************* Received loggedin event");
|
||||
isLoggedIn = true;
|
||||
LogUtil.debug("******************* Received loggedin event " + isLoggedIn.toString());
|
||||
}
|
||||
|
||||
public function checkLogin():String {
|
||||
LogUtil.debug("******************* " + isLoggedIn.toString());
|
||||
return isLoggedIn.toString();
|
||||
}
|
||||
|
||||
public function checkChat():String {
|
||||
if (chatTestSucceeded)
|
||||
{
|
||||
chatTestSucceeded = false;
|
||||
return "true";
|
||||
} else {
|
||||
return chatTestSucceeded.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public function handleReceivedPublicChatMessageEvent(event:BBBEvent):void {
|
||||
if (event.message.search(chatMessageSent) != -1) {
|
||||
chatTestSucceeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a random string and sends it as a chat message.
|
||||
public function sendRandomChatMessage():void {
|
||||
chatMessageSent = generateRandomString(15);
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT, chatMessageSent));
|
||||
}
|
||||
|
||||
/**
|
||||
* Voice
|
||||
*/
|
||||
public function joinVoiceConference():void {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.JOIN_VOICE_CONFERENCE));
|
||||
}
|
||||
|
||||
public function checkVoice():String {
|
||||
return didUserJoin.toString();
|
||||
}
|
||||
|
||||
public function handleAddedListenerEvent(event:BBBEvent):void {
|
||||
// if (event.message == _attributes.username) {
|
||||
didUserJoin = true;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Presentation
|
||||
*/
|
||||
|
||||
public function checkPresentation():String {
|
||||
if (didPresentationConvert) {
|
||||
didPresentationConvert = false;
|
||||
return "true";
|
||||
} else {
|
||||
return "false";
|
||||
}
|
||||
}
|
||||
|
||||
public function handlePresentationConversion(event:Event):void {
|
||||
didPresentationConvert = true;
|
||||
}
|
||||
|
||||
// Obtained from: http://www.zedia.net/2008/generate-random-strings-in-as2-or-as3/
|
||||
private function generateRandomString(newLength:uint = 1, userAlphabet:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"):String{
|
||||
var alphabet:Array = userAlphabet.split("");
|
||||
var alphabetLength:int = alphabet.length;
|
||||
var randomLetters:String = "";
|
||||
for (var i:uint = 0; i < newLength; i++){
|
||||
randomLetters += alphabet[int(Math.floor(Math.random() * alphabetLength))];
|
||||
}
|
||||
return randomLetters;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Video
|
||||
*/
|
||||
|
||||
public function startVideoConnection():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_CONNECTION));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function playVideo():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_STREAM, "640x480avatar.flv"));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function videoHasStarted(e:Event):void {
|
||||
didVideoStart = true;
|
||||
}
|
||||
|
||||
public function checkVideo():String {
|
||||
return didVideoStart.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Desktop Sharing
|
||||
*/
|
||||
|
||||
public function startDeskshare():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_DESKSHARE));
|
||||
return "true";
|
||||
}
|
||||
|
||||
protected function init():void {
|
||||
setupAPI();
|
||||
EventBroadcaster.getInstance().addEventListener("configLoadedEvent", configLoadedEventHandler);
|
||||
@ -226,17 +85,13 @@
|
||||
|
||||
private function determineHTMLURL():String {
|
||||
var serverName:String = "*";
|
||||
if(ExternalInterface.available) // import flash.external.ExternalInterface;
|
||||
{
|
||||
try
|
||||
{
|
||||
if(ExternalInterface.available) {
|
||||
try {
|
||||
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
|
||||
serverName = URLUtil.getServerName(htmlURL);
|
||||
// Alert.show("HTML URL [" + htmlURL + "]");
|
||||
}
|
||||
catch(s:Error)
|
||||
{
|
||||
// Alert.show("Cannot determine HTML URL");
|
||||
trace("HTML URL [" + htmlURL + "]");
|
||||
} catch(s:Error) {
|
||||
trace("Cannot determine HTML URL");
|
||||
}
|
||||
}
|
||||
|
||||
@ -263,10 +118,10 @@
|
||||
}
|
||||
|
||||
public function hotkeyCapture():void{
|
||||
LogUtil.debug("Entering hotkeyCapture");
|
||||
trace("Entering hotkeyCapture");
|
||||
stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
|
||||
ResourceUtil.getInstance().addEventListener(Event.CHANGE, localeChanged); // Listen for locale changing
|
||||
LogUtil.debug("Leaving hotkeyCapture");
|
||||
trace("Leaving hotkeyCapture");
|
||||
}
|
||||
|
||||
public function handleKeyDown(e:KeyboardEvent) :void
|
||||
@ -277,7 +132,7 @@
|
||||
|
||||
if (keyCombos[keyPress])
|
||||
{
|
||||
LogUtil.debug("Chad keypress " + keyPress);
|
||||
trace("Chad keypress " + keyPress);
|
||||
globalDispatcher.dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
|
||||
}
|
||||
}
|
||||
@ -289,9 +144,4 @@
|
||||
<maps:ApplicationEventMap />
|
||||
<views:MainApplicationShell id="mainShell"/>
|
||||
|
||||
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
|
||||
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
|
||||
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
|
||||
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
|
||||
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>
|
||||
</mx:Application>
|
||||
|
@ -206,7 +206,7 @@
|
||||
|
||||
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
|
||||
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
|
||||
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
|
||||
<mate:Listener type="{BBBEvent.USER_VOICE_JOINED}" method="handleAddedListenerEvent"/>
|
||||
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
|
||||
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>
|
||||
|
||||
|
60
bigbluebutton-client/src/BroadcastModule.mxml
Executable file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
|
||||
|
||||
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
BigBlueButton 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 2.1 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/>.
|
||||
|
||||
$Id: $
|
||||
-->
|
||||
|
||||
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
xmlns:maps="org.bigbluebutton.modules.broadcast.maps.*"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
implements="org.bigbluebutton.common.IBigBlueButtonModule"
|
||||
creationComplete="onCreationComplete()">
|
||||
|
||||
<maps:BroadcastEventMap id="broadcastEventMap" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
|
||||
private var _moduleName:String = "Broadcast Module";
|
||||
private var _attributes:Object;
|
||||
private var dispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
private function onCreationComplete():void {
|
||||
LogUtil.debug("BrodcastModule Initialized");
|
||||
}
|
||||
|
||||
public function get moduleName():String {
|
||||
return _moduleName;
|
||||
}
|
||||
|
||||
public function start(attributes:Object):void {
|
||||
LogUtil.debug("***Starting BroadcastModule");
|
||||
dispatcher.dispatchEvent(new Event("BroadcastModuleStartEvent"));
|
||||
}
|
||||
|
||||
public function stop():void {
|
||||
LogUtil.debug("Stop Broadcast Module");
|
||||
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Module>
|
@ -34,7 +34,6 @@
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.controls.Image;
|
||||
|
||||
import org.bigbluebutton.modules.deskshare.events.CursorEvent;
|
||||
import org.bigbluebutton.modules.deskshare.events.ViewStreamEvent;
|
||||
import mx.controls.Button;
|
||||
|
59
bigbluebutton-client/src/NotesModule.mxml
Executable file
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 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 2.1 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/>.
|
||||
|
||||
Author: Felipe Cecagno <felipe@mconf.org>
|
||||
|
||||
$Id: $
|
||||
-->
|
||||
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
xmlns:maps="org.bigbluebutton.modules.notes.maps.*"
|
||||
implements="org.bigbluebutton.common.IBigBlueButtonModule">
|
||||
|
||||
|
||||
<maps:NotesEventMap id="notesEventMap" />
|
||||
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.modules.notes.events.NotesModuleStartEvent;
|
||||
|
||||
private var _moduleName:String = "Layout Module";
|
||||
private var _dispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
private function onCreationComplete():void {
|
||||
LogUtil.debug(_moduleName + " initialized");
|
||||
}
|
||||
|
||||
public function get moduleName():String {
|
||||
return _moduleName;
|
||||
}
|
||||
|
||||
public function start(attributes:Object):void {
|
||||
_dispatcher.dispatchEvent(new NotesModuleStartEvent());
|
||||
}
|
||||
|
||||
public function stop():void {
|
||||
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Module>
|
@ -3,22 +3,20 @@
|
||||
xmlns:maps="org.bigbluebutton.modules.videoconf.maps.*" implements="org.bigbluebutton.common.IBigBlueButtonModule">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import mx.controls.Alert;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.CloseWindowEvent;
|
||||
import org.bigbluebutton.common.events.OpenWindowEvent;
|
||||
import org.bigbluebutton.modules.videoconf.business.VideoProxy;
|
||||
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.CloseWindowEvent;
|
||||
import org.bigbluebutton.common.events.OpenWindowEvent;
|
||||
import org.bigbluebutton.modules.videoconf.business.VideoProxy;
|
||||
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
|
||||
import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
|
||||
import org.bigbluebutton.modules.videoconf.events.VideoModuleStartEvent;
|
||||
import org.bigbluebutton.modules.videoconf.events.VideoModuleStopEvent;
|
||||
|
||||
private var _moduleName:String = "Videoconf Module";
|
||||
private var _attributes:Object;
|
||||
private var proxy:VideoProxy;
|
||||
private var mockProxy:VideoProxy;
|
||||
|
||||
|
||||
private function onCreationComplete():void {
|
||||
LogUtil.debug("VideoconfModule initialized");
|
||||
}
|
||||
@ -38,15 +36,7 @@
|
||||
public function get username():String {
|
||||
return _attributes.username;
|
||||
}
|
||||
|
||||
public function get connection():NetConnection {
|
||||
return proxy.connection;
|
||||
}
|
||||
|
||||
public function get mockConnection():NetConnection {
|
||||
return mockProxy.connection;
|
||||
}
|
||||
|
||||
|
||||
public function get mode():String {
|
||||
if (_attributes.mode == null) {
|
||||
//_attributes.mode = "PLAYBACK"
|
||||
@ -79,27 +69,16 @@
|
||||
}
|
||||
|
||||
public function start(attributes:Object):void {
|
||||
LogUtil.debug("Videoconf attr: " + attributes.username);
|
||||
_attributes = attributes;
|
||||
proxy = new VideoProxy(uri);
|
||||
|
||||
eventMap.module = this;
|
||||
eventMap.proxy = proxy;
|
||||
eventMap.addToolbarButton();
|
||||
|
||||
if (proxy.videoOptions.autoStart) {
|
||||
var dispatcher:Dispatcher = new Dispatcher();
|
||||
dispatcher.dispatchEvent(new ShareCameraRequestEvent());
|
||||
}
|
||||
trace("Starting Video Module");
|
||||
var globalDispatcher:Dispatcher = new Dispatcher();
|
||||
globalDispatcher.dispatchEvent(new VideoModuleStartEvent(VideoModuleStartEvent.START));
|
||||
}
|
||||
|
||||
public function stop():void {
|
||||
eventMap.stopModule();
|
||||
var globalDispatcher:Dispatcher = new Dispatcher();
|
||||
globalDispatcher.dispatchEvent(new VideoModuleStopEvent(VideoModuleStopEvent.STOP));
|
||||
}
|
||||
|
||||
public function mockConnect():void {
|
||||
mockProxy = new VideoProxy(proxy.connection.uri.substring(0, proxy.connection.uri.indexOf("video") + 5));
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
|
168
bigbluebutton-client/src/WebcamPreviewStandalone.mxml
Executable file
@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
|
||||
|
||||
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
BigBlueButton 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 2.1 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/>.
|
||||
|
||||
$Id: $
|
||||
-->
|
||||
|
||||
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
creationComplete="onCreationComplete()"
|
||||
pageTitle="WebcamPreview" width="600" height="400" layout="absolute">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.core.UIComponent;
|
||||
import mx.utils.URLUtil;
|
||||
|
||||
[Bindable] private var defaultWidth:Number = 320;
|
||||
[Bindable] private var defaultHeight:Number = 240;
|
||||
|
||||
private var _video:Video;
|
||||
private var _videoHolder:UIComponent;
|
||||
private var camIndex:int = 0;
|
||||
private var camWidth:Number = 320;
|
||||
private var camHeight:Number = 240;
|
||||
private var _camera:Camera = null;
|
||||
private var quality:Number = 0;
|
||||
private var PADDING_HORIZONTAL:Number = 6;
|
||||
private var PADDING_VERTICAL:Number = 29;
|
||||
private var _minWidth:int = 160 + PADDING_HORIZONTAL;
|
||||
private var _minHeight:int = 120 + PADDING_VERTICAL;
|
||||
private var aspectRatio:Number = 1;
|
||||
|
||||
private function onCreationComplete():void{
|
||||
_videoHolder = new UIComponent();
|
||||
_videoHolder.width = camWidth;
|
||||
_videoHolder.height = camHeight;
|
||||
this.addChild(_videoHolder);
|
||||
|
||||
this.minWidth = _minWidth;
|
||||
this.minHeight = _minHeight;
|
||||
|
||||
trace('WebcamPreviewSA::onCreationComplete');
|
||||
Security.allowDomain(determineHTMLURL());
|
||||
trace("WebcamPreviewSA:: Security.allowDomain(" + determineHTMLURL() + ");");
|
||||
|
||||
initExternalInterface();
|
||||
// displayCamera("0", 30, 10, 0, 90);
|
||||
}
|
||||
|
||||
private function determineHTMLURL():String {
|
||||
var serverName:String = "*";
|
||||
if(ExternalInterface.available) {
|
||||
try {
|
||||
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
|
||||
serverName = URLUtil.getServerName(htmlURL);
|
||||
trace("WebcamPreviewSA::determineHTMLURL HTML URL [" + htmlURL + "]");
|
||||
} catch(s:Error) {
|
||||
trace("WebcamPreviewSA::determineHTMLURL Cannot determine HTML URL");
|
||||
}
|
||||
}
|
||||
|
||||
return serverName;
|
||||
}
|
||||
|
||||
private function initExternalInterface():void {
|
||||
trace('WebcamPreviewSA::initExternalInterface');
|
||||
if (ExternalInterface.available) {
|
||||
ExternalInterface.addCallback("startPreviewCamera", handleStartPreviewCameraRequest);
|
||||
ExternalInterface.addCallback("stopPreviewCamera", handleStopPreviewCamera);
|
||||
}
|
||||
}
|
||||
|
||||
private function handleStartPreviewCameraRequest(camIndex:String, camWidth:int, camHeight:int,
|
||||
camKeyFrameInterval:int, camModeFps:Number,
|
||||
camQualityBandwidth:int, camQualityPicture:int):void {
|
||||
displayCamera(camIndex, camWidth, camHeight, camKeyFrameInterval, camModeFps, camQualityBandwidth, camQualityPicture);
|
||||
}
|
||||
|
||||
private function handleStopPreviewCamera():void {
|
||||
stopCamera();
|
||||
}
|
||||
|
||||
public function displayCamera(camIndex:String, camWidth:int, camHeight:int, camKeyFrameInterval:int, camModeFps:Number, camQualityBandwidth:int, camQualityPicture:int):void {
|
||||
trace('WebcamPreviewSA::displayCamera');
|
||||
stopCamera();
|
||||
|
||||
if (Camera.names.length == 0) {
|
||||
trace('WebcamPreviewSA::bbb.video.publish.hint.noCamera');
|
||||
return;
|
||||
}
|
||||
|
||||
_camera = Camera.getCamera(camIndex);
|
||||
if (_camera == null) {
|
||||
trace('WebcamPreviewSA::bbb.video.publish.hint.cantOpenCamera');
|
||||
return;
|
||||
}
|
||||
|
||||
setResolution(camWidth, camHeight);
|
||||
|
||||
_camera.setMotionLevel(5, 1000);
|
||||
|
||||
_camera.setKeyFrameInterval(camKeyFrameInterval);
|
||||
_camera.setMode(camWidth, camHeight, camModeFps);
|
||||
_camera.setQuality(camQualityBandwidth, camQualityPicture);
|
||||
|
||||
if (_camera.width != camWidth || _camera.height != camHeight) {
|
||||
trace("WebcamPreviewSA::Resolution " + camWidth + "x" + camHeight + " is not supported, using " + _camera.width + "x" + _camera.height + " instead");
|
||||
setResolution(_camera.width, _camera.height);
|
||||
}
|
||||
|
||||
_video = new Video;
|
||||
_video.attachCamera(_camera);
|
||||
|
||||
if (aspectRatio > _videoHolder.width / _videoHolder.height) {
|
||||
_video.width = _videoHolder.width;
|
||||
_video.height = _videoHolder.width / aspectRatio;
|
||||
_video.x = 0;
|
||||
_video.y = (_videoHolder.height - _video.height) / 2;
|
||||
} else {
|
||||
_video.width = _videoHolder.height * aspectRatio;
|
||||
_video.height = _videoHolder.height;
|
||||
_video.x = (_videoHolder.width - _video.width) / 2;
|
||||
_video.y = 0;
|
||||
}
|
||||
|
||||
_videoHolder.addChild(_video);
|
||||
}
|
||||
|
||||
private function stopCamera():void {
|
||||
_camera = null;
|
||||
if (_video != null) {
|
||||
_videoHolder.removeChild(_video);
|
||||
_video.attachCamera(null);
|
||||
_video.clear();
|
||||
_video = null;
|
||||
}
|
||||
}
|
||||
|
||||
private function setResolution(width:int, height:int):void {
|
||||
camWidth = width;
|
||||
camHeight = height;
|
||||
setAspectRatio(camWidth, camHeight);
|
||||
}
|
||||
|
||||
private function setAspectRatio(width:int, height:int):void {
|
||||
aspectRatio = (width/height);
|
||||
this.minHeight = Math.floor((this.minWidth - PADDING_HORIZONTAL) / aspectRatio) + PADDING_VERTICAL;
|
||||
}
|
||||
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
</mx:Application>
|
249
bigbluebutton-client/src/WebcamViewStandalone.mxml
Executable file
@ -0,0 +1,249 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
|
||||
|
||||
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
BigBlueButton 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 2.1 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/>.
|
||||
|
||||
$Id: $
|
||||
-->
|
||||
|
||||
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
creationComplete="onCreationComplete()"
|
||||
pageTitle="WebcamView" width="600" height="400" layout="absolute">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import flash.net.NetConnection;
|
||||
|
||||
import mx.core.UIComponent;
|
||||
import mx.utils.URLUtil;
|
||||
|
||||
private var _video:Video;
|
||||
private var _videoHolder:UIComponent;
|
||||
private var ns:NetStream;
|
||||
private var nc:NetConnection;
|
||||
private var PADDING_HORIZONTAL:Number = 6;
|
||||
private var PADDING_VERTICAL:Number = 29;
|
||||
private var _minWidth:int = 160 + PADDING_HORIZONTAL;
|
||||
private var _minHeight:int = 120 + PADDING_VERTICAL;
|
||||
private var aspectRatio:Number = 1;
|
||||
private var camWidth:Number = 320;
|
||||
private var camHeight:Number = 240;
|
||||
|
||||
private var _url:String;
|
||||
private var _stream:String;
|
||||
|
||||
private var smoothVideo:Boolean = false;
|
||||
private var applyConvolutionFilter:Boolean = false;
|
||||
private var convolutionFilter:Array = [-1, 0, -1, 0, 6, 0, -1, 0, -1];
|
||||
private var filterBias:Number = 0;
|
||||
private var filterDivisor:Number = 4;
|
||||
private var enableH264:Boolean = false;
|
||||
private var h264Level:String = "2.1";
|
||||
private var h264Profile:String = "main";
|
||||
|
||||
private function onCreationComplete():void{
|
||||
_videoHolder = new UIComponent();
|
||||
_videoHolder.width = camWidth;
|
||||
_videoHolder.height = camHeight;
|
||||
this.addChild(_videoHolder);
|
||||
|
||||
this.minWidth = _minWidth;
|
||||
this.minHeight = _minHeight;
|
||||
|
||||
Security.allowDomain(determineHTMLURL());
|
||||
trace("WebcamViewSA:: Security.allowDomain(" + determineHTMLURL() + ");");
|
||||
|
||||
initExternalInterface();
|
||||
}
|
||||
|
||||
private function determineHTMLURL():String {
|
||||
var serverName:String = "*";
|
||||
if(ExternalInterface.available) {
|
||||
try {
|
||||
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
|
||||
serverName = URLUtil.getServerName(htmlURL);
|
||||
trace("WebcamViewSA::determineHTMLURL HTML URL [" + htmlURL + "]");
|
||||
} catch(s:Error) {
|
||||
trace("WebcamViewSA::determineHTMLURL Cannot determine HTML URL");
|
||||
}
|
||||
}
|
||||
|
||||
return serverName;
|
||||
}
|
||||
|
||||
private function initExternalInterface():void {
|
||||
trace('WebcamViewSA::initExternalInterface');
|
||||
if (ExternalInterface.available) {
|
||||
ExternalInterface.addCallback("startViewCameraStream", handleStartViewCameraRequest);
|
||||
ExternalInterface.addCallback("stopViewCameraStream", handleStopViewCamera);
|
||||
}
|
||||
}
|
||||
|
||||
private function connect(url:String):void {
|
||||
nc = new NetConnection();
|
||||
nc.client = this;
|
||||
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
nc.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
|
||||
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetConnectStatus);
|
||||
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
|
||||
nc.connect(url);
|
||||
}
|
||||
|
||||
public function onBWCheck(... rest):Number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function onBWDone(... rest):void {
|
||||
var p_bw:Number;
|
||||
if (rest.length > 0) p_bw = rest[0];
|
||||
// your application should do something here
|
||||
// when the bandwidth check is complete
|
||||
trace("WebcamViewSA:: bandwidth = " + p_bw + " Kbps.");
|
||||
}
|
||||
|
||||
private function getVideoResolution(stream:String):Array {
|
||||
var pattern:RegExp = new RegExp("(\\d+x\\d+)-([A-Za-z0-9]+)-\\d+", "");
|
||||
if (pattern.test(stream)) {
|
||||
trace("WebcamViewSA:: The stream name is well formatted [" + stream + "]");
|
||||
trace("WebcamViewSA:: Stream resolution is [" + pattern.exec(stream)[1] + "]");
|
||||
trace("WebcamViewSA:: Userid [" + pattern.exec(stream)[2] + "]");
|
||||
return pattern.exec(stream)[1].split("x");
|
||||
} else {
|
||||
trace("WebcamViewSA:: The stream name doesn't follow the pattern <width>x<height>-<userId>-<timestamp>. Using 320x240 resolution.");
|
||||
return "320x240".split("x");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function onIOError(event:NetStatusEvent):void{
|
||||
}
|
||||
|
||||
private function onNetConnectStatus(event:NetStatusEvent):void{
|
||||
switch(event.info.code){
|
||||
case "NetConnection.Connect.Success":
|
||||
playWebcamStream();
|
||||
break;
|
||||
default:
|
||||
trace("WebcamViewSA:: [" + event.info.code + "] for [" + _url + "]");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function onSecurityError(event:NetStatusEvent):void{
|
||||
}
|
||||
|
||||
private function handleStartViewCameraRequest(url:String, stream:String):void {
|
||||
_url = url;
|
||||
_stream = stream;
|
||||
connect(url);
|
||||
}
|
||||
|
||||
private function handleStopViewCamera():void {
|
||||
stopViewing();
|
||||
}
|
||||
|
||||
private function stopViewing():void {
|
||||
if (_video != null) {
|
||||
trace("WebcamViewSA:: removing video from holder");
|
||||
_videoHolder.removeChild(_video);
|
||||
_video.clear();
|
||||
_video = null;
|
||||
}
|
||||
_videoHolder.visible = false;
|
||||
trace("WebcamViewSA:: closing stream");
|
||||
ns.close();
|
||||
}
|
||||
|
||||
private function playWebcamStream():void {
|
||||
ns = new NetStream(nc);
|
||||
ns.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );
|
||||
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
ns.client = this;
|
||||
ns.bufferTime = 0;
|
||||
ns.receiveVideo(true);
|
||||
ns.receiveAudio(false);
|
||||
|
||||
var res:Array = getVideoResolution(_stream);
|
||||
if (res == null) // error
|
||||
return;
|
||||
_video = new Video(Number(res[0]), Number(res[1]));
|
||||
_video.width = Number(res[0]);
|
||||
_video.height = Number(res[1]);
|
||||
trace("WebcamViewSA:: resolution [" + _video.width + "," + _video.height + "]");
|
||||
setAspectRatio(Number(res[0]), Number(res[1]));
|
||||
_video.attachNetStream(ns);
|
||||
|
||||
_video.smoothing = smoothVideo;
|
||||
|
||||
if (applyConvolutionFilter) {
|
||||
var filter:ConvolutionFilter = new flash.filters.ConvolutionFilter();
|
||||
filter.matrixX = 3;
|
||||
filter.matrixY = 3;
|
||||
filter.matrix = convolutionFilter;
|
||||
filter.bias = filterBias;
|
||||
filter.divisor = filterDivisor;
|
||||
_video.filters = [filter];
|
||||
}
|
||||
|
||||
trace("WebcamViewSA:: adding video to video holder");
|
||||
|
||||
_videoHolder.addChild(_video);
|
||||
|
||||
_videoHolder.visible = true;
|
||||
ns.play(_stream);
|
||||
}
|
||||
|
||||
private function onAsyncError(e:AsyncErrorEvent):void{
|
||||
trace("WebcamViewSA::asyncerror " + e.toString());
|
||||
}
|
||||
|
||||
public function onMetaData(info:Object):void{
|
||||
trace("WebcamViewSA:: metadata: width=" + info.width + " height=" + info.height);
|
||||
_video.width = info.width;
|
||||
_video.height = info.height;
|
||||
setAspectRatio(info.width, info.height);
|
||||
}
|
||||
|
||||
private function onNetStatus(e:NetStatusEvent):void{
|
||||
switch(e.info.code){
|
||||
case "NetStream.Publish.Start":
|
||||
trace("WebcamViewSA:: NetStream.Publish.Start");
|
||||
break;
|
||||
case "NetStream.Play.UnpublishNotify":
|
||||
trace("WebcamViewSA:: NetStream.Play.UnpublishNotify");
|
||||
stopViewing();
|
||||
break;
|
||||
case "NetStream.Play.Start":
|
||||
trace("WebcamViewSA:: Netstatus: " + e.info.code);
|
||||
break;
|
||||
case "NetStream.Play.FileStructureInvalid":
|
||||
trace("WebcamViewSA:: The MP4's file structure is invalid.");
|
||||
break;
|
||||
case "NetStream.Play.NoSupportedTrackFound":
|
||||
trace("WebcamViewSA:: The MP4 doesn't contain any supported tracks");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function setAspectRatio(width:int, height:int):void {
|
||||
aspectRatio = (width/height);
|
||||
this.minHeight = Math.floor((this.minWidth - PADDING_HORIZONTAL) / aspectRatio) + PADDING_VERTICAL;
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
</mx:Application>
|
BIN
bigbluebutton-client/src/assets/images/delete.png
Executable file
After Width: | Height: | Size: 439 B |
BIN
bigbluebutton-client/src/assets/images/elipse.png
Executable file
After Width: | Height: | Size: 398 B |
BIN
bigbluebutton-client/src/assets/images/fit-to-screen.png
Executable file
After Width: | Height: | Size: 562 B |
BIN
bigbluebutton-client/src/assets/images/fit-to-width.png
Executable file
After Width: | Height: | Size: 430 B |
BIN
bigbluebutton-client/src/assets/images/hand.png
Executable file
After Width: | Height: | Size: 416 B |
BIN
bigbluebutton-client/src/assets/images/left_arrow.png
Executable file
After Width: | Height: | Size: 290 B |
BIN
bigbluebutton-client/src/assets/images/line.png
Executable file
After Width: | Height: | Size: 184 B |
BIN
bigbluebutton-client/src/assets/images/pencil.png
Executable file
After Width: | Height: | Size: 376 B |
BIN
bigbluebutton-client/src/assets/images/right_arrow.png
Executable file
After Width: | Height: | Size: 292 B |
BIN
bigbluebutton-client/src/assets/images/square.png
Executable file
After Width: | Height: | Size: 214 B |
BIN
bigbluebutton-client/src/assets/images/text.png
Executable file
After Width: | Height: | Size: 268 B |
BIN
bigbluebutton-client/src/assets/images/triangle.png
Executable file
After Width: | Height: | Size: 345 B |
BIN
bigbluebutton-client/src/assets/images/undo.png
Executable file
After Width: | Height: | Size: 365 B |
BIN
bigbluebutton-client/src/assets/images/upload.png
Executable file
After Width: | Height: | Size: 269 B |
@ -1,173 +0,0 @@
|
||||
Application
|
||||
{
|
||||
backgroundColors: #000000,#3f3f3f;
|
||||
backgroundImage: Embed(source="assets/img/bk3.jpg");
|
||||
backgroundSize: "100%";
|
||||
backgroundGradientColors: #B4BFCF, #78829C;
|
||||
themeColor: #0094C7;
|
||||
backgroundGradientAlphas: 0.62, 0.26;
|
||||
}
|
||||
|
||||
|
||||
MDICanvas
|
||||
{
|
||||
backgroundColor: #0094C7;
|
||||
backgroundAlpha: 0;
|
||||
}
|
||||
|
||||
|
||||
Button
|
||||
{
|
||||
highlightAlphas: 1, 0.33;
|
||||
fillAlphas: 1, 0.16, 0.18, 1;
|
||||
fillColors: #5f89b9, #697182, #ffffff, #eeeeee;
|
||||
}
|
||||
|
||||
|
||||
.mdiWindowFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: true;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #ffffff;
|
||||
borderAlpha: 1;
|
||||
borderThickness: 2;
|
||||
borderThicknessLeft: 0;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 0;
|
||||
borderThicknessRight: 0;
|
||||
cornerRadius: 4;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 15;
|
||||
cornerResizeHeight: 15;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: true;
|
||||
backgroundAlpha: 0.5;
|
||||
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #ffffff;
|
||||
borderAlpha: 1;
|
||||
borderThickness: 2;
|
||||
borderThicknessLeft: 0;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 0;
|
||||
borderThicknessRight: 0;
|
||||
cornerRadius: 4;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 15;
|
||||
cornerResizeHeight: 15;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.mypanelTitle
|
||||
{
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
fontWeight: bold;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.closeBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_closeButton.png');
|
||||
overSkin: Embed('assets/img/3_closeButton.png');
|
||||
downSkin: Embed('assets/img/3_closeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_closeButton.png');
|
||||
}
|
||||
|
||||
.closeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_closeButton.png');
|
||||
overSkin: Embed('assets/img/3_closeButton.png');
|
||||
downSkin: Embed('assets/img/3_closeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_closeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.increaseBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_increaseButton.png');
|
||||
overSkin: Embed('assets/img/3_increaseButton.png');
|
||||
downSkin: Embed('assets/img/3_increaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_increaseButton.png');
|
||||
}
|
||||
|
||||
.increaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_increaseButton.png');
|
||||
overSkin: Embed('assets/img/3_increaseButton.png');
|
||||
downSkin: Embed('assets/img/3_increaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_increaseButton.png');
|
||||
}
|
||||
|
||||
|
||||
.decreaseBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
overSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
downSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
}
|
||||
|
||||
.decreaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
overSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
downSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
}
|
||||
|
||||
|
||||
.minimizeBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
overSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
downSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
}
|
||||
|
||||
.minimizeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
overSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
downSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.resizeHndlr
|
||||
{
|
||||
upSkin: Embed('assets/img/resizeHandler.png');
|
||||
overSkin: Embed('assets/img/resizeHandler.png');
|
||||
downSkin: Embed('assets/img/resizeHandler.png');
|
||||
disabledSkin: Embed('assets/img/resizeHandler.png');
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
Application
|
||||
{
|
||||
|
||||
backgroundImage: Embed(source="assets/img/BrushedMetalBack.jpg");
|
||||
backgroundSize: "100%";
|
||||
themeColor: #999999;
|
||||
fontFamily: Arial;
|
||||
paddingLeft:10; paddingRight:10; paddingTop:10; paddingBottom:10;
|
||||
}
|
||||
|
||||
.mdiWindowFocus
|
||||
{
|
||||
borderStyle: solid;
|
||||
borderColor: #FFFFFF;
|
||||
borderAlpha: 0;
|
||||
borderThickness: 1;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 15;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 27;
|
||||
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
|
||||
backgroundImage: Embed(source="assets/swf/BrushedMetal.swf", symbol="Window_Background");
|
||||
backgroundSize: "100%";
|
||||
|
||||
dropShadowEnabled: true;
|
||||
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/BrushedMetal.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 12;
|
||||
cornerResizeHeight: 12;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
titleStyleName: "mypanelTitle";
|
||||
titleBackgroundSkin: Embed(source="assets/swf/BrushedMetal.swf", symbol="header");
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 8;
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus
|
||||
{
|
||||
borderStyle: solid;
|
||||
borderColor: #FFFFFF;
|
||||
borderAlpha: 0;
|
||||
borderThickness: 1;
|
||||
borderThicknessLeft: 5;
|
||||
borderThicknessTop: 5;
|
||||
borderThicknessBottom: 15;
|
||||
borderThicknessRight: 5;
|
||||
roundedBottomCorners: true;
|
||||
cornerRadius: 5;
|
||||
headerHeight: 27;
|
||||
|
||||
|
||||
|
||||
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
|
||||
backgroundImage: Embed(source="assets/swf/BrushedMetal.swf", symbol="Window_Background");
|
||||
backgroundSize: "100%";
|
||||
|
||||
dropShadowEnabled: true;
|
||||
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/BrushedMetal.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 12;
|
||||
cornerResizeHeight: 12;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
titleStyleName: "mypanelTitle";
|
||||
titleBackgroundSkin: Embed(source="assets/swf/BrushedMetal.swf", symbol="header");
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 8;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.mypanelTitle {
|
||||
fontSize: 12;
|
||||
fontWeight: bold;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
fillColors: #ffffff, #999999, #ffffff, #eeeeee;
|
||||
themeColor: #999999;
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
Application
|
||||
{
|
||||
background-image: Embed(source="assets/img/wallpaperOS9.gif");
|
||||
}
|
||||
|
||||
MDIWindow
|
||||
{
|
||||
titleStyleName: "macTitle";
|
||||
}
|
||||
|
||||
.macTitle
|
||||
{
|
||||
fontFamily: Georgia;
|
||||
fontSize: 12;
|
||||
fontWeight: normal;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.mdiWindowFocus
|
||||
{
|
||||
borderColor: #CCCCCC;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 2;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 2;
|
||||
borderThicknessRight: 2;
|
||||
roundedBottomCorners: false;
|
||||
cornerRadius: 5;
|
||||
dropShadowEnabled: false;
|
||||
headerHeight: 29;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="macHeaderFocus");
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus
|
||||
{
|
||||
borderColor: #CCCCCC;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 2;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 2;
|
||||
borderThicknessRight: 2;
|
||||
roundedBottomCorners: false;
|
||||
cornerRadius: 5;
|
||||
dropShadowEnabled: false;
|
||||
headerHeight: 29;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="macHeaderNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowMinimizeBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
|
||||
}
|
||||
|
||||
.mdiWindowMaximizeBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
}
|
||||
|
||||
.mdiWindowRestoreBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
|
||||
}
|
||||
|
||||
.mdiWindowCloseBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
|
||||
}
|
@ -1,143 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2007 FlexLib Contributors. See:
|
||||
http://code.google.com/p/flexlib/wiki/ProjectContributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
Application
|
||||
{
|
||||
background-image: Embed(source="assets/img/wallpaperWin.jpg");
|
||||
}
|
||||
|
||||
MDIWindow
|
||||
{
|
||||
titleStyleName: "winXPTitleStyle";
|
||||
|
||||
minimizeBtnStyleNameNoFocus: "mdiWindowMinimizeBtnNoFocus";
|
||||
maximizeBtnStyleNameNoFocus: "mdiWindowMaximizeBtnNoFocus";
|
||||
restoreBtnStyleNameNoFocus: "mdiWindowRestoreBtnNoFocus";
|
||||
closeBtnStyleNameNoFocus: "mdiWindowCloseBtnNoFocus";
|
||||
}
|
||||
|
||||
.winXPTitleStyle
|
||||
{
|
||||
fontFamily: Verdana;
|
||||
fontSize: 12;
|
||||
fontWeight: normal;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.mdiWindowFocus
|
||||
{
|
||||
borderColor: #0053E1;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 2;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 2;
|
||||
borderThicknessRight: 2;
|
||||
roundedBottomCorners: false;
|
||||
cornerRadius: 5;
|
||||
dropShadowEnabled: false;
|
||||
headerHeight: 29;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="headerBgDefault");
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus
|
||||
{
|
||||
borderColor: #7B97E0;
|
||||
borderAlpha: 1;
|
||||
borderThicknessLeft: 2;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 2;
|
||||
borderThicknessRight: 2;
|
||||
roundedBottomCorners: false;
|
||||
cornerRadius: 5;
|
||||
dropShadowEnabled: false;
|
||||
headerHeight: 29;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="headerBgDefaultNoFocus");
|
||||
|
||||
}
|
||||
|
||||
.mdiWindowMinimizeBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_up");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_over");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_down");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowMinimizeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowMaximizeBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_up");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_over");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_down");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowMaximizeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowRestoreBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_up");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_over");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_down");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowRestoreBtnNoFocus
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowCloseBtn
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_up");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_over");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_down");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
|
||||
}
|
||||
|
||||
.mdiWindowCloseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
|
||||
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
|
||||
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
|
||||
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
|
||||
}
|
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 220 B |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 210 B |
Before Width: | Height: | Size: 230 B |
Before Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 83 B |
Before Width: | Height: | Size: 84 B |
Before Width: | Height: | Size: 84 B |
Before Width: | Height: | Size: 85 B |
Before Width: | Height: | Size: 97 B |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 41 KiB |
@ -1,6 +0,0 @@
|
||||
/*The image for your logo is 200x200 pixels. No other size is currently supported so resize your logo accordingly. The logo will always appear in the lower right corner. */
|
||||
BrandingLogo
|
||||
{
|
||||
backgroundImage: Embed(source="assets/img/BBBLogo.png");
|
||||
backgroundSize: "100%";
|
||||
}
|
@ -1,180 +0,0 @@
|
||||
Application
|
||||
{
|
||||
backgroundColors: #000000,#3f3f3f;
|
||||
backgroundImage: Embed(source="assets/img/bk3.jpg");
|
||||
backgroundSize: "100%";
|
||||
backgroundGradientColors: #B4BFCF, #78829C;
|
||||
themeColor: #0094C7;
|
||||
backgroundGradientAlphas: 0.62, 0.26;
|
||||
}
|
||||
|
||||
/*The image for your logo is 200x200 pixels. No other size is currently supported so resize your logo accordingly. The logo will always appear in the lower right corner. */
|
||||
BrandingLogo
|
||||
{
|
||||
backgroundImage: Embed(source="assets/img/BBBLogo.png");
|
||||
backgroundSize: "100%";
|
||||
}
|
||||
|
||||
|
||||
MDICanvas
|
||||
{
|
||||
backgroundColor: #0094C7;
|
||||
backgroundAlpha: 0;
|
||||
}
|
||||
|
||||
|
||||
Button
|
||||
{
|
||||
highlightAlphas: 1, 0.33;
|
||||
fillAlphas: 1, 0.16, 0.18, 1;
|
||||
fillColors: #5f89b9, #697182, #ffffff, #eeeeee;
|
||||
}
|
||||
|
||||
|
||||
.mdiWindowFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: true;
|
||||
backgroundAlpha: 1;
|
||||
backgroundColor: #FFFFFF;
|
||||
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #ffffff;
|
||||
borderAlpha: 1;
|
||||
borderThickness: 2;
|
||||
borderThicknessLeft: 0;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 0;
|
||||
borderThicknessRight: 0;
|
||||
cornerRadius: 4;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 15;
|
||||
cornerResizeHeight: 15;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.mdiWindowNoFocus
|
||||
{
|
||||
headerHeight: 26;
|
||||
roundedBottomCorners: true;
|
||||
backgroundAlpha: 0.5;
|
||||
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
|
||||
backgroundSize: '100%';
|
||||
|
||||
borderStyle: solid;
|
||||
borderColor: #ffffff;
|
||||
borderAlpha: 1;
|
||||
borderThickness: 2;
|
||||
borderThicknessLeft: 0;
|
||||
borderThicknessTop: 0;
|
||||
borderThicknessBottom: 0;
|
||||
borderThicknessRight: 0;
|
||||
cornerRadius: 4;
|
||||
dropShadowEnabled: false;
|
||||
titleStyleName: "mypanelTitle";
|
||||
|
||||
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
|
||||
cornerResizeWidth: 15;
|
||||
cornerResizeHeight: 15;
|
||||
cornerResizePaddingRight: 2;
|
||||
cornerResizePaddingBottom: 2;
|
||||
|
||||
controlButtonWidth: 10;
|
||||
controlButtonHeight: 10;
|
||||
controlButtonGap: 4;
|
||||
}
|
||||
|
||||
.mypanelTitle
|
||||
{
|
||||
fontFamily: Arial;
|
||||
fontSize: 12;
|
||||
fontWeight: bold;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.closeBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_closeButton.png');
|
||||
overSkin: Embed('assets/img/3_closeButton.png');
|
||||
downSkin: Embed('assets/img/3_closeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_closeButton.png');
|
||||
}
|
||||
|
||||
.closeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_closeButton.png');
|
||||
overSkin: Embed('assets/img/3_closeButton.png');
|
||||
downSkin: Embed('assets/img/3_closeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_closeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.increaseBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_increaseButton.png');
|
||||
overSkin: Embed('assets/img/3_increaseButton.png');
|
||||
downSkin: Embed('assets/img/3_increaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_increaseButton.png');
|
||||
}
|
||||
|
||||
.increaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_increaseButton.png');
|
||||
overSkin: Embed('assets/img/3_increaseButton.png');
|
||||
downSkin: Embed('assets/img/3_increaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_increaseButton.png');
|
||||
}
|
||||
|
||||
|
||||
.decreaseBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
overSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
downSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
}
|
||||
|
||||
.decreaseBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
overSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
downSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
disabledSkin: Embed('assets/img/3_decreaseButton.png');
|
||||
}
|
||||
|
||||
|
||||
.minimizeBtnFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
overSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
downSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
}
|
||||
|
||||
.minimizeBtnNoFocus
|
||||
{
|
||||
upSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
overSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
downSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
disabledSkin: Embed('assets/img/3_minimizeButton.png');
|
||||
}
|
||||
|
||||
|
||||
.resizeHndlr
|
||||
{
|
||||
upSkin: Embed('assets/img/resizeHandler.png');
|
||||
overSkin: Embed('assets/img/resizeHandler.png');
|
||||
downSkin: Embed('assets/img/resizeHandler.png');
|
||||
disabledSkin: Embed('assets/img/resizeHandler.png');
|
||||
}
|
@ -21,6 +21,33 @@ package org.bigbluebutton.common
|
||||
[Bindable]
|
||||
public class Images
|
||||
{
|
||||
[Embed(source="assets/images/webcam_kickuser.png")]
|
||||
public var webcam_kickuser:Class;
|
||||
|
||||
[Embed(source="assets/images/webcam_make_presenter.png")]
|
||||
public var webcam_make_presenter:Class;
|
||||
|
||||
[Embed(source="assets/images/webcam_mute.png")]
|
||||
public var webcam_mute:Class;
|
||||
|
||||
[Embed(source="assets/images/webcam_private_chat.png")]
|
||||
public var webcam_private_chat:Class;
|
||||
|
||||
[Embed(source="assets/images/webcam_unmute.png")]
|
||||
public var webcam_unmute:Class;
|
||||
|
||||
[Embed(source="assets/images/vdoc_bg.jpg")]
|
||||
public var video_dock_bg:Class;
|
||||
|
||||
[Embed(source="assets/images/bandwidth.png")]
|
||||
public var bandwidth:Class;
|
||||
|
||||
[Embed(source="assets/images/statistics.png")]
|
||||
public var stats:Class;
|
||||
|
||||
[Embed(source="assets/images/avatar.png")]
|
||||
public var avatar:Class;
|
||||
|
||||
[Embed(source="assets/images/sign-out.png")]
|
||||
public var signOutIcon:Class;
|
||||
|
||||
@ -91,7 +118,7 @@ package org.bigbluebutton.common
|
||||
public var sound:Class;
|
||||
|
||||
[Embed(source="assets/images/cancel.png")]
|
||||
public var cancel_user:Class;
|
||||
public var cancel:Class;
|
||||
|
||||
[Embed(source="assets/images/user_go.png")]
|
||||
public var eject_user:Class;
|
||||
@ -108,19 +135,19 @@ package org.bigbluebutton.common
|
||||
[Embed(source="assets/images/shape_square.png")]
|
||||
public var square_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/arrow_undo.png")]
|
||||
[Embed(source="assets/images/undo.png")]
|
||||
public var undo_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/hand_icon.png")]
|
||||
[Embed(source="assets/images/hand.png")]
|
||||
public var hand_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/scribble_icon.png")]
|
||||
[Embed(source="assets/images/marker.png")]
|
||||
public var scribble_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/text_icon.png")]
|
||||
[Embed(source="assets/images/text.png")]
|
||||
public var text_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/circle.png")]
|
||||
[Embed(source="assets/images/ellipse.png")]
|
||||
public var circle_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/arrow_out.png")]
|
||||
@ -144,7 +171,7 @@ package org.bigbluebutton.common
|
||||
[Embed(source="assets/images/table.png")]
|
||||
public var table:Class;
|
||||
|
||||
[Embed(source="assets/images/cancel.png")]
|
||||
[Embed(source="assets/images/trash.png")]
|
||||
public var delete_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/arrow_right.png")]
|
||||
@ -223,7 +250,7 @@ package org.bigbluebutton.common
|
||||
[Embed(source="assets/images/pointer_icon_small.png")]
|
||||
public var select_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/triangle_icon.png")]
|
||||
[Embed(source="assets/images/triangle.png")]
|
||||
public var triangle_icon:Class;
|
||||
|
||||
[Embed(source="assets/images/text_background_icon.png")]
|
||||
|
After Width: | Height: | Size: 14 KiB |
BIN
bigbluebutton-client/src/org/bigbluebutton/common/assets/images/bandwidth.png
Executable file
After Width: | Height: | Size: 880 B |
BIN
bigbluebutton-client/src/org/bigbluebutton/common/assets/images/ellipse.png
Executable file
After Width: | Height: | Size: 442 B |
After Width: | Height: | Size: 475 B |