Merge branch 'master' into sync-deskshare-that-will-work-with-0.8-with-master

This commit is contained in:
Richard Alam 2013-02-01 19:50:19 +00:00
commit dcecac18f9
23 changed files with 157 additions and 131 deletions

View File

@ -40,6 +40,7 @@ public class Application extends MultiThreadedApplicationAdapter {
private ClientConnectionManager clientConnManager;
private String sipServerHost = "localhost";
private String sipClientRtpIp = "";
private int sipPort = 5070;
private int startAudioPort = 3000;
private int stopAudioPort = 3029;
@ -55,7 +56,7 @@ public class Application extends MultiThreadedApplicationAdapter {
callStreamFactory.setScope(scope);
sipPeerManager.setCallStreamFactory(callStreamFactory);
sipPeerManager.setClientConnectionManager(clientConnManager);
sipPeerManager.createSipPeer("default", sipServerHost, sipPort, startAudioPort, stopAudioPort);
sipPeerManager.createSipPeer("default", sipClientRtpIp, sipServerHost, sipPort, startAudioPort, stopAudioPort);
try {
sipPeerManager.register("default", username, password);
} catch (PeerNotFoundException e) {
@ -180,6 +181,10 @@ public class Application extends MultiThreadedApplicationAdapter {
sipServerHost = h.trim();
}
public void setSipClientRtpIp(String ipAddr) {
this.sipClientRtpIp = ipAddr.trim();
}
public void setUsername(String un) {
this.username = un.trim();
}

View File

@ -46,6 +46,7 @@ public class CallAgent extends CallListenerAdapter implements CallStreamObserver
private final SipPeerProfile userProfile;
private final SipProvider sipProvider;
private final String clientRtpIp;
private ExtendedCall call;
private CallStream callStream;
private String localSession = null;
@ -65,8 +66,9 @@ public class CallAgent extends CallListenerAdapter implements CallStreamObserver
private CallState callState;
public CallAgent(SipProvider sipProvider, SipPeerProfile userProfile, AudioConferenceProvider portProvider, String clientId) {
public CallAgent(String sipClientRtpIp, SipProvider sipProvider, SipPeerProfile userProfile, AudioConferenceProvider portProvider, String clientId) {
this.sipProvider = sipProvider;
this.clientRtpIp = sipClientRtpIp;
this.userProfile = userProfile;
this.portProvider = portProvider;
this.clientId = clientId;
@ -77,15 +79,15 @@ public class CallAgent extends CallListenerAdapter implements CallStreamObserver
}
private void initSessionDescriptor() {
log.debug("initSessionDescriptor");
log.debug("initSessionDescriptor");
SessionDescriptor newSdp = SdpUtils.createInitialSdp(userProfile.username,
sipProvider.getViaAddress(), userProfile.audioPort,
userProfile.videoPort, userProfile.audioCodecsPrecedence );
this.clientRtpIp, userProfile.audioPort,
userProfile.videoPort, userProfile.audioCodecsPrecedence );
localSession = newSdp.toString();
log.debug("localSession Descriptor = " + localSession );
}
public void call(String callerName, String destination) {
public void call(String callerName, String destination) {
log.debug("{} making a call to {}", callerName, destination);
try {
localSocket = getLocalAudioSocket();

View File

@ -45,6 +45,7 @@ public class SipPeer implements SipRegisterAgentListener {
private CallManager callManager = new CallManager();
private SipProvider sipProvider;
private String clientRtpIp;
private SipRegisterAgent registerAgent;
private final String id;
private final AudioConferenceProvider audioconfProvider;
@ -52,8 +53,9 @@ public class SipPeer implements SipRegisterAgentListener {
private boolean registered = false;
private SipPeerProfile registeredProfile;
public SipPeer(String id, String host, int sipPort, int startAudioPort, int stopAudioPort) {
public SipPeer(String id, String sipClientRtpIp, String host, int sipPort, int startAudioPort, int stopAudioPort) {
this.id = id;
this.clientRtpIp = sipClientRtpIp;
audioconfProvider = new AudioConferenceProvider(host, sipPort, startAudioPort, stopAudioPort);
initSipProvider(host, sipPort);
}
@ -112,7 +114,7 @@ public class SipPeer implements SipRegisterAgentListener {
}
SipPeerProfile callerProfile = SipPeerProfile.copy(registeredProfile);
CallAgent ca = new CallAgent(sipProvider, callerProfile, audioconfProvider, clientId);
CallAgent ca = new CallAgent(this.clientRtpIp, sipProvider, callerProfile, audioconfProvider, clientId);
ca.setClientConnectionManager(clientConnManager);
ca.setCallStreamFactory(callStreamFactory);
callManager.add(ca);

View File

@ -41,13 +41,14 @@ public final class SipPeerManager {
private Map<String, SipPeer> sipPeers;
private int sipStackDebugLevel = 8;
private int sipRemotePort = 5060;
public SipPeerManager() {
sipPeers = Collections.synchronizedMap(new HashMap<String, SipPeer>());
}
public void createSipPeer(String peerId, String host, int sipPort, int startRtpPort, int stopRtpPort) {
SipPeer sipPeer = new SipPeer(peerId, host, sipPort, startRtpPort, stopRtpPort);
public void createSipPeer(String peerId, String clientRtpIp, String host, int sipPort, int startRtpPort, int stopRtpPort) {
SipPeer sipPeer = new SipPeer(peerId, clientRtpIp, host, sipPort, startRtpPort, stopRtpPort);
sipPeer.setClientConnectionManager(clientConnManager);
sipPeer.setCallStreamFactory(callStreamFactory);
sipPeers.put(peerId, sipPeer);
@ -127,6 +128,12 @@ public final class SipPeerManager {
SipStack.log_path = "log";
}
public void setSipRemotePort(int port) {
this.sipRemotePort = port;
SipStack.init();
SipStack.default_port = sipRemotePort;
}
public void setCallStreamFactory(CallStreamFactory csf) {
callStreamFactory = csf;
}

View File

@ -1,16 +1,19 @@
# The address of your FreeSWITCH/asterisk server
sip.server.host=127.0.0.1
sip.server.port=5070
# The ip and port the BBB SIP app is going to use
bbb.sip.app.ip=127.0.0.1
bbb.sip.app.port=5070
# The username and password the BBB SIP app to use to
# register with FreeSWITCH
sip.server.username=bbbuser
sip.server.password=secret
# The ip and port of the FreeSWITCH server
freeswitch.ip=127.0.0.1
freeswitch.port=5060
# The start/stop RTP port the application is going to use
# for the media stream.
# NOTE: This will also be used as SIP users to REGISTER with
# Asterisk. Therefore, make sure you have this range of users
# in your bbb_sip.conf.
# See http://code.google.com/p/bigbluebutton/source/browse/#svn/trunk/bbb-voice-conference/config/asterisk
# create-sip-users.sh script to create the users.
startAudioPort=15000
stopAudioPort=16383

View File

@ -49,8 +49,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
</bean>
<bean id="web.handler" class="org.bigbluebutton.voiceconf.red5.Application">
<property name="sipServerHost" value="${sip.server.host}" />
<property name="sipPort" value="${sip.server.port}" />
<property name="sipClientRtpIp" value="${bbb.sip.app.ip}" />
<property name="sipServerHost" value="${freeswitch.ip}" />
<property name="sipPort" value="${bbb.sip.app.port}" />
<property name="username" value="${sip.server.username}" />
<property name="password" value="${sip.server.password}" />
<property name="startAudioPort" value="${startAudioPort}" />
@ -65,6 +66,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<bean id="sipPeerManager" class="org.bigbluebutton.voiceconf.sip.SipPeerManager">
<property name="sipStackDebugLevel" value="${sipStackDebugLevel}"/>
<property name="sipRemotePort" value="${freeswitch.port}"/>
</bean>
<bean id="clientConnectionManager" class="org.bigbluebutton.voiceconf.red5.ClientConnectionManager"/>

View File

@ -40,12 +40,10 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
private RecorderApplication recorderApplication;
private AbstractApplicationContext appCtx;
private ConnectionInvokerService connInvokerService;
private String version;
@Override
public boolean appStart(IScope app) {
log.debug("Starting BigBlueButton version " + version);
log.debug("Starting BigBlueButton ");
IContext context = app.getContext();
appCtx = (AbstractApplicationContext) context.getApplicationContext();
appCtx.addApplicationListener(new ShutdownHookListener());
@ -55,7 +53,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
@Override
public void appStop(IScope app) {
log.debug("Stopping BigBlueButton version " + version);
log.debug("Stopping BigBlueButton ");
super.appStop(app);
}
@ -98,7 +96,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
* equivalent (i.e. zero (0) becomes 48) if we don't.
*/
long clientID = Long.parseLong(Red5.getConnectionLocal().getClient().getId());
String sessionName = connection.getScope().getName();
String sessionName = ((String)params[3]).toString();
log.info("[clientid=" + clientID + "] connected from " + remoteHost + ":" + remotePort + ".");
String voiceBridge = ((String) params[4]).toString();
@ -163,11 +161,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
super.addListener((IApplication) iter.next());
}
}
public void setVersion(String v) {
version = v;
}
private BigBlueButtonSession getBbbSession() {
return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION);
}

View File

@ -46,7 +46,7 @@ public class RoomManager {
rooms = new ConcurrentHashMap<String, RoomImp>();
}
public void createRoom(String name,boolean record, String meetingid) {
public void createRoom(String name, boolean record, String meetingid) {
log.debug("Creating room: " + name);
RoomImp r = new RoomImp(name,record,meetingid);
rooms.putIfAbsent(name, r);

View File

@ -42,9 +42,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
</beans:bean>
<beans:bean id="eslConnection" class="org.freeswitch.esl.client.manager.DefaultManagerConnection">
<beans:property name="hostname" value="${esl.host}"/>
<beans:property name="port" value="${esl.port}"/>
<beans:property name="password" value="${esl.password}"/>
<beans:property name="hostname" value="${freeswitch.esl.host}"/>
<beans:property name="port" value="${freeswitch.esl.port}"/>
<beans:property name="password" value="${freeswitch.esl.password}"/>
</beans:bean>
</beans:beans>

View File

@ -16,35 +16,12 @@
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
#
#
# NOTE: bigbluebutton default properties.
#
# NOTE!!!! NOTE!!!! NOTE!!!! NOTE!!!! NOTE!!!!
# When making changes that you don't want checked-in, do
# git update-index --assume-unchanged src/main/webapp/WEB-INF/bigbluebutton.properties
#
# To have git track the changes again
# git update-index --no-assume-unchanged src/main/webapp/WEB-INF/bigbluebutton.properties
#
# These settings enable bbb-apps to connect to the Asterisk conference server
# to receive events (such as when someone is talking).
# These properties are for Asterisk Management Interface (AMI)
# These should match with /etc/asterisk/manager.d/bigbluebutton.conf
ami.host=127.0.0.1
ami.port=5038
ami.username=bbb
ami.password=secret
# These settings enable bbb-apps to connect to the Freeswitch conference server
# These should match with the freeswitch event_socket_client.xml config
esl.host=127.0.0.1
esl.port=8021
esl.password=ClueCon
# When using asterisk, specify the conference application: [meetme, konference]
asterisk.application=konference
version=0.63
freeswitch.esl.host=127.0.0.1
freeswitch.esl.port=8021
freeswitch.esl.password=ClueCon
redis.host=127.0.0.1
redis.port=6379

View File

@ -58,8 +58,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
</set>
</property>
<property name="recorderApplication"> <ref bean="recorderApplication"/></property>
<property name="connInvokerService"> <ref bean="connInvokerService"/></property>
<property name="version" value="${version}"/>
<property name="connInvokerService"> <ref bean="connInvokerService"/></property>
</bean>
<bean id="connInvokerService" class="org.bigbluebutton.conference.ConnectionInvokerService"/>

View File

@ -624,3 +624,8 @@ MDIWindow {
downSkin: Embed('assets/images/resizeHandler.png');
disabledSkin: Embed('assets/images/resizeHandler.png');
}
.cameraDisplaySettingsWindowStartBtn
{
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

View File

@ -252,3 +252,6 @@ bbb.shortcutkey.chat.chatbox.gofirst = control+shift+32
bbb.shortcutkey.chat.chatbox.gofirst.function = Go to first message
bbb.shortcutkey.chat.chatbox.goread = control+shift+82
bbb.shortcutkey.chat.chatbox.goread.function = Go to the most recent message you have read
bbb.publishVideo.startPublishBtn.labelText = Start Sharing
bbb.publishVideo.changeCameraBtn.labelText = Change Camera Settings

View File

@ -28,52 +28,52 @@ bbb.viewers.viewersGrid.statusItemRenderer = अवस्था
bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip == हात उठौनुहोस {0}
bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip =हेर्नको लागि क्लिक गर्नुहोस
bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip = प्रस्तुतकर्ता
bbb.viewers.presentBtn.toolTip =
bbb.viewers.raiseHandBtn.toolTip =
bbb.viewers.presentBtn.label =
bbb.viewers.kickUserBtn.toolTip =
bbb.presentation.title =
bbb.presentation.fitToWidth.toolTip =
bbb.presentation.fitToPage.toolTip =
bbb.presentation.uploadPresBtn =
bbb.presentation.uploadPresBtn.toolTip =
bbb.presentation.backBtn.toolTip =
bbb.presentation.slideNumLbl.toolTip =
bbb.presentation.forwardBtn.toolTip =
bbb.presentation.resetZoomBtn.toolTip =
bbb.presentation.presenterNameLbl =
bbb.presentation.clickToUpload =
bbb.presentation.maxUploadFileExceededAlert =
bbb.presentation.uploadcomplete =
bbb.presentation.uploaded =
bbb.presentation.document.supported =
bbb.presentation.document.converted =
bbb.presentation.error.document.convert.failed =
bbb.presentation.error.io =
bbb.presentation.error.security =
bbb.presentation.error.convert.format =
bbb.presentation.error.convert.notsupported =
bbb.presentation.error.convert.nbpage =
bbb.presentation.error.convert.maxnbpagereach =
bbb.presentation.error.convert.swf =
bbb.presentation.converted =
bbb.presentation.ok =
bbb.presentation.uploadwindow.presentationfile =
bbb.viewers.presentBtn.toolTip = प्रयोगकर्तालाई प्रस्तुताकर्ताको रूपमा छान्नुहोस
bbb.viewers.raiseHandBtn.toolTip = हातउठाउनको लागि क्लिक गर्नुहोस
bbb.viewers.presentBtn.label = प्रस्तुताकर्ताकोरूपमा परिबर्तन गर्नुहोस
bbb.viewers.kickUserBtn.toolTip = प्रयोगकर्तालाई हटाउनुहोस
bbb.presentation.title = प्रस्तुती
bbb.presentation.fitToWidth.toolTip =मनिटरको आकारमा मिलाउनुहोस
bbb.presentation.fitToPage.toolTip = पेजको आकारमा मिलाउनुहोस
bbb.presentation.uploadPresBtn = सर्भरमा प्रस्तुती सामग्री पठाउनुहोस
bbb.presentation.uploadPresBtn.toolTip = सर्भरमा प्रस्तुती सामग्री पठाउनुहोस
bbb.presentation.backBtn.toolTip = पुरानो प्रस्तुती
bbb.presentation.slideNumLbl.toolTip = पस्तुती छान्नुहोस
bbb.presentation.forwardBtn.toolTip = अघिल्लो प्रस्तुती पेजमा जानुहोस
bbb.presentation.resetZoomBtn.toolTip = zoomलाइ पहिलेको अबस्थामा लैजानुहोस
bbb.presentation.presenterNameLbl = {0} प्रस्तुतकर्ताले प्रस्तुत गर्दैहुनुहुन्छ
bbb.presentation.clickToUpload = सर्भरमा प्रस्तुती पठाउनुहोस
bbb.presentation.maxUploadFileExceededAlert = क्षमाप्रार्थी छौ अनुमति भन्दा बढी आकारको सामग्री पठाउन खोजियो
bbb.presentation.uploadcomplete = सर्भरमा प्रस्तुती पठाउने काम सम्पन्न भयो
bbb.presentation.uploaded = सर्भरमा प्रस्तुती पठाउने काम सम्पन्न भयो
bbb.presentation.document.supported = तपाइले पठाउनु भएको प्रस्तुती ठिक छ
bbb.presentation.document.converted = परिबर्तन सफल भयो
bbb.presentation.error.document.convert.failed = परिबर्तन गसमस्या भयो
bbb.presentation.error.io = IO Error कृपया Administratorलाइ सम्पर्क गर्नुहोस
bbb.presentation.error.security = security मा समस्या भयो
bbb.presentation.error.convert.format = प्रस्तुती सामग्री परिबर्तन गर्न समस्या भयो
bbb.presentation.error.convert.notsupported = तपाइले सर्भरमा पठाउनुभएको सामग्रीको format बुझिएन
bbb.presentation.error.convert.nbpage = कति पेज छ भन्ने अनुमान गर्न सकिएन
bbb.presentation.error.convert.maxnbpagereach = क्षमाप्रार्थी छौ धेरै पेज भयो
bbb.presentation.error.convert.swf = सर्भरमा पठाइएको सामग्री परिबर्तन गर्न समस्या भयो कृपया Administrator लाइ सम्पर्क गर्नुहोस
bbb.presentation.converted = {0} मा {1} परिबर्तन भयो
bbb.presentation.ok = ठिक भयो
bbb.presentation.uploadwindow.presentationfile = प्रस्तुती सामग्री
bbb.presentation.uploadwindow.pdf =
bbb.presentation.uploadwindow.word =
bbb.presentation.uploadwindow.excel =
bbb.presentation.uploadwindow.powerpoint =
bbb.presentation.uploadwindow.image = चित्र
bbb.presentation.uploadwindow.closeLabel =
bbb.fileupload.title =
bbb.fileupload.fileLbl =
bbb.fileupload.selectBtn.toolTip =
bbb.fileupload.uploadBtn =
bbb.fileupload.uploadBtn.toolTip =
bbb.fileupload.presentationNamesLbl =
bbb.fileupload.deleteBtn.toolTip =
bbb.presentation.uploadwindow.closeLabel = बन्द गर्न क्लिक गर्नुहोस
bbb.fileupload.title = सामग्री पठाउनुहोस
bbb.fileupload.fileLbl = सामग्री
bbb.fileupload.selectBtn.toolTip = सर्भरमा पठाउनुहोस
bbb.fileupload.uploadBtn = सर्भरमा पठाउनुहोस
bbb.fileupload.uploadBtn.toolTip = सर्भरमा पठाउनुहोस
bbb.fileupload.presentationNamesLbl = सर्भरमा पठाउनुहोस
bbb.fileupload.deleteBtn.toolTip = मेट्नुहोस
bbb.fileupload.showBtn = देखाउनुहोस्
bbb.fileupload.showBtn.toolTip =
bbb.fileupload.showBtn.toolTip = सामग्री देखाउनुहोस
bbb.fileupload.okCancelBtn =
bbb.fileupload.genThumbText =
bbb.fileupload.progBarLbl =

View File

@ -98,6 +98,10 @@ package org.bigbluebutton.core
return UserManager.getInstance().getConference().amIThisUser(userID);
}
public static function getMyExternalUserID():String {
return UserManager.getInstance().getConference().getMyExternalUserID();
}
public static function getMyUserID():String {
return UserManager.getInstance().getConference().getMyUserId();
}

View File

@ -224,7 +224,8 @@ package org.bigbluebutton.core.services
}
private function log(s:String):void {
LogUtil.debug("[StreamMonitor] " + s);
//LogUtil.debug("[StreamMonitor] " + s);
trace("[StreamMonitor] " + s);
}
}
}

View File

@ -28,6 +28,7 @@ package org.bigbluebutton.main.model.users {
public var meetingName:String;
public var externalMeetingID:String;
public var internalMeetingID:String;
public var externalUserID:String;
public var avatarURL:String;
private var _myCamSettings:CameraSettingsVO = new CameraSettingsVO();
@ -273,6 +274,10 @@ package org.bigbluebutton.main.model.users {
return me.voiceLocked;
}
public function getMyExternalUserID():String {
return externalUserID;
}
public function getMyUserId():String {
return me.userID;
}

View File

@ -71,6 +71,7 @@ package org.bigbluebutton.main.model.users
UserManager.getInstance().getConference().externalMeetingID = result.externMeetingID;
UserManager.getInstance().getConference().meetingName = result.confereceName;
UserManager.getInstance().getConference().internalMeetingID = result.room;
UserManager.getInstance().getConference().externalUserID = result.externUserID;
UserManager.getInstance().getConference().avatarURL = result.avatarURL;
_conferenceParameters = new ConferenceParameters();

View File

@ -21,18 +21,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:view="org.bigbluebutton.main.views.*"
layout="absolute"
width="600" height="400" creationComplete="onCreationComplete()"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
width="630" height="450" creationComplete="onCreationComplete()" styleName="cameraDisplaySettingsWindowStyle"
showCloseButton="true" close="onCancelClicked()" keyDown="handleKeyDown(event)">
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import flash.ui.Keyboard;
import com.asfusion.mate.events.Dispatcher;
import flash.ui.Keyboard;
import mx.events.CloseEvent;
import mx.events.ItemClickEvent;
import mx.managers.PopUpManager;
import mx.managers.PopUpManager;
import org.bigbluebutton.common.Images;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.core.UsersUtil;
@ -63,16 +61,13 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
static private var _cameraAccessDenied:Boolean = false;
[Bindable]
private var camIcon:Class = images.webcam;
private var _video:Video;
private var aspectRatio:Number = 1;
private function onCreationComplete():void {
changeDefaultCamForMac();
if (UsersUtil.amIPresenter()) {
if (UsersUtil.amIPresenter() && resolutions.length > 1) {
showResControls(true);
}
@ -87,7 +82,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
for (var i:int = 0; i < Camera.names.length; i++){
if (Camera.names[i] == "USB Video Class Video") {
/** Set as default for Macs */
cmbCameraSelector.selectedIndex = i;
_camera = Camera.getCamera("USB Video Class Video");
}
}
}
@ -96,12 +91,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
if (show) {
this.visible = true;
btnStartPublish.visible = true;
cmbCameraSelector.visible = true;
} else{
this.width = 0;
this.height = 0;
btnStartPublish.visible = false;
cmbCameraSelector.visible = false;
this.visible = false;
}
}
@ -195,6 +188,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function startPublishing():void {
updateCamera();
// Save the index of the camera. Need it to send the message.
var camIndex:int = _camera.index;
@ -279,13 +274,22 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
]]>
</mx:Script>
<mx:VBox id="webcamDisplay" width="100%" height="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
<view:VideoHolder id="_videoHolder" width="100%" height="90%"/>
<mx:HBox width="100%">
<mx:Button id="btnStartPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}" icon="{camIcon}" click="startPublishing()" enabled="true"/>
<mx:ComboBox id="cmbCameraSelector" dataProvider="{Camera.names}" width="150" visible="false" change="updateCamera()"/>
<mx:Button id="changeCamera" label="Change Camera" toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}" click="showCameraSettings()"/>
<mx:ComboBox id="cmbResolution" dataProvider="{resolutions}" width="20%" visible="false" change="updateCamera()"/>
<mx:VBox id="webcamDisplay" width="100%" height="100%" paddingTop="10" styleName="cameraDisplaySettingsWindowBackground">
<view:VideoHolder id="_videoHolder" width="100%" height="75%" />
<mx:HBox width="100%" height="20%">
<mx:Spacer width="5"/>
<mx:Button id="changeCamera" styleName="cameraDisplaySettingsWindowChangeCamBtn"
label="{ResourceUtil.getInstance().getString('bbb.publishVideo.changeCameraBtn.labelText')}"
toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}"
click="showCameraSettings()"/>
<mx:Spacer width="70%"/>
<mx:ComboBox id="cmbResolution" styleName="cameraDisplaySettingsWindowChangeResolutionCombo"
dataProvider="{resolutions}" visible="false" change="updateCamera()"/>
<mx:Spacer width="5"/>
<mx:Button id="btnStartPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}"
click="startPublishing()" enabled="true" styleName="cameraDisplaySettingsWindowStartBtn"
label="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.labelText')}" />
<mx:Spacer width="5"/>
</mx:HBox>
</mx:VBox>

View File

@ -22,6 +22,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
title="Logged Out" showCloseButton="false" creationComplete="init()"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
x="168" y="86" layout="vertical" width="400" height="100" horizontalAlign="center">
<mx:Script>
<![CDATA[

View File

@ -18,12 +18,14 @@
*/
package org.bigbluebutton.modules.listeners.business
{
import com.asfusion.mate.events.Dispatcher;
import com.asfusion.mate.events.Dispatcher;
import flash.events.AsyncErrorEvent;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.Responder;
import flash.net.SharedObject;
import flash.net.SharedObject;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.core.EventConstants;
import org.bigbluebutton.core.UsersUtil;
@ -109,6 +111,8 @@ package org.bigbluebutton.modules.listeners.business
}
public function userJoin(userId:Number, cidName:String, cidNum:String, muted:Boolean, talking:Boolean, locked:Boolean):void {
trace("***************** Voice user joining [" + cidName + "]");
if (! _listeners.hasListener(userId)) {
var n:Listener = new Listener();
n.callerName = cidName != null ? cidName : "<Unknown Caller>";
@ -125,17 +129,23 @@ package org.bigbluebutton.modules.listeners.business
var pattern:RegExp = /(.*)-(.*)$/;
var result:Object = pattern.exec(n.callerName);
if (result != null) {
trace("******************** [" + n.callerName + "," + result[1] + "," + result[2] + "] ****************");
/**
* The first item is the userid and the second is the username.
*/
if (UserManager.getInstance().getConference().amIThisUser(result[1])) {
var externUserID:String = result[1] as String;
var internUserID:String = UsersUtil.externalUserIDToInternalUserID(externUserID);
if (UsersUtil.getMyExternalUserID() == externUserID) {
UserManager.getInstance().getConference().setMyVoiceUserId(n.userid);
UserManager.getInstance().getConference().muteMyVoice(n.muted);
UserManager.getInstance().getConference().setMyVoiceJoined(true);
}
if (UsersUtil.hasUser(result[1])) {
var bu:BBBUser = UsersUtil.getUser(result[1]);
if (UsersUtil.hasUser(internUserID)) {
var bu:BBBUser = UsersUtil.getUser(internUserID);
bu.voiceUserid = n.userid;
bu.voiceMuted = n.muted;
bu.voiceJoined = true;

View File

@ -26,6 +26,7 @@ package org.bigbluebutton.modules.phone.managers {
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.core.BBB;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.managers.UserManager;
import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.modules.phone.PhoneOptions;
@ -115,7 +116,7 @@ package org.bigbluebutton.modules.phone.managers {
userHangup = false;
setupMic(autoJoin);
var uid:String = String(Math.floor(new Date().getTime()));
var uname:String = encodeURIComponent(UserManager.getInstance().getConference().getMyUserId() + "-" + attributes.username);
var uname:String = encodeURIComponent(UsersUtil.getMyExternalUserID() + "-" + attributes.username);
connectionManager.connect(uid, attributes.internalUserID, uname , attributes.room, attributes.uri);
}