To work around this issue, modify the Session Description
Protocol blob to set a limit on the bandwidth used by the conference
participants. For example, set the upper bandwidth limit to 60 Kbps or 80 Kbps.
To do this, modify the Exchange Conferencing Server Web access page
(Xipconf.asp) to set a bit rate for connected clients.
The following
example of the Xipconf.asp file has been modified to include a "strBitRate"
parameter between the
<SCRIPT> tags. Edit the strBitRate
value by using a text editor such as Notepad to set the bit rate that you want,
currently set at 50 Kbps, to the maximum value that you want to permit. This
example of the Xipconf.asp file is from Exchange Conferencing Server Service
Pack 2 (SP2). If you are not using Exchange Conferencing Server SP2, copy the
two
<SCRIPT> sections from this example and paste them
into the Xipconf.asp file from your version of Exchange Conferencing Server.
Microsoft provides programming examples for illustration only, without warranty either
expressed or implied, including, but not limited to, the implied warranties of
merchantability and/or fitness for a particular purpose. This article assumes
that you are familiar with the programming language being demonstrated and the
tools used to create and debug procedures. Microsoft support professionals can
help explain the functionality of a particular procedure, but they will not
modify these examples to provide added functionality or construct procedures to
meet your specific needs.
If you have limited programming experience, you may
want to contact a Microsoft Certified Partner or Microsoft Advisory Services. For more information, visit these Microsoft Web sites:
Microsoft Certified
Partners -
https://partner.microsoft.com/global/30000104Microsoft Advisory Services -
http://support.microsoft.com/gp/advisoryservice
For more information about the support options that are available and about how to contact Microsoft, visit the following Microsoft Web site:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS<% @ CodePage=1252 Language=VBScript %>
<%
OPTION EXPLICIT
Response.Expires = 0
'This page expects the following parameters:
'?SDP=<SDP> Attempt to join the meeting with the passed conference ID
'?DS=7 Pre-join request
'?DS=8 Post-join request
'?DS=9 No MADCAP servers currently available
'?DS=10 Too many users (currently not used)
'?DS=11 All MADCAP servers failed
'?DS=12 No MADCAP servers matching the required advertising scope were found
'?DS=13 No MADCAP servers configured with the multicast scope list specified by the resource were found
'?DS=14 The resource has no specified multicast scopes
' ================================ CONSTANTS =================================================
CONST L_PreJoinTitle_Text = "The video conference you are trying to join has not yet started. Please wait; you will be joined automatically when the conference starts." 'Title for screenshot 7
CONST L_PostJoinTitle_Text = "The video conference you are trying to join has ended. Check the date and time of the conference you are trying to join." 'Title for screenshot 8
CONST L_TooManyUsersTitle_Text = "The maximum number of participants allowed in this video conference has been reached. Wait a few minutes, and then try again."
CONST L_NoMadcapServersTitle_Text = "The videoconference was not started because no multicast address allocation (MADCAP) servers are running or configured. Contact your system administrator for assistance."
CONST L_AllMadcapServersFailedTitle_Text = "The videoconference was not started because none of the available multicast address allocation (MADCAP) servers can issue a multicast address. Contact your system administrator for assistance."
CONST L_NoScopeMatch1_Text = "The videoconference was not started because no multicast address allocation (MADCAP) server is within the advertising scope specified by the conference resource. The advertising scope is "
CONST L_NoScopeMatch2_Text = " and the Time-To-Live (TTL) value for IP multicast packets is "
CONST L_NoScopeMatch3_Text = ". Please note these values and forward them to your system administrator."
CONST L_NoScopesFound_Text = "The videoconference was not started because no multicast address allocation (MADCAP) servers configured with a multicast scope specified by the conference resource could be found. Contact your system administrator for assistance."
CONST L_NoScopesInResource_Text = "The videoconference was not started because no mutlicast scopes were specified by the conference resource. Contact your system administrator for assistance."
CONST L_DisplayOlderH323Client_Text = "This audio video conference is in session. You can now use your H.323 client program (for example, NetMeeting) to participate in the conference. If you are not in the conference, try one of the following: Try to rejoin the conference. Verify that your T.120 client program is running. Check your network connection or protocol settings."
CONST L_DisplayNoAudioVideoClient_Text = "An audio video connection to the Exchange Conferencing Server could not be automatically established. Either client, server, or network capabilities could not be negotiated or the conference capacity may have been reached."
CONST L_DisplayNoAudioVideoActiveX_Text = "An audio video connection to the Exchange Conferencing Server could not be automatically established. Verify that your browser security settings permit the download of ActiveX controls."
CONST L_LocalVideoWindowTitle_Text = "Local Video"
CONST L_RemoteVideoWindowTitle_Text = "Remote Video"
CONST PROVIDER_CLASS_ID = "{42749791-A1E6-11D2-9BA4-00AA00BD8C91}"
' ================================ VARIABLES =================================================
'REQUEST STRING VARIABLES:
DIM inDisplayState
DIM inScope
DIM inTimeToLive
DIM inH323
DIM NoScopeMatchMessage
' =============================== INITIALIZATION ==============================================
inDisplayState = Request.QueryString("DS")
inScope = Request.QueryString("SCOPE")
inTimeToLive = Request.QueryString("TTL")
inH323 = Request.QueryString("H323")
%>
<!-- #include file="utils.inc" -->
<HTML>
<HEAD>
<!-- Microsoft Exchange 2000 Conferencing Server
Video Conferencing Join Page
Copyright (c) 2000, Microsoft Corporation -->
<META http-equiv="Expires" content="0">
<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
<LINK href="confpanel.css" rel="stylesheet" type="text/css">
<%
' =============================== HTML ====================================================
SELECT CASE inDisplayState
CASE DISPLAY_PREJOIN, DISPLAY_POSTJOIN, DISPLAY_TOO_MANY_USERS, DISPLAY_NO_MADCAP_SERVERS, DISPLAY_ALL_MADCAP_SERVERS_FAILED, _
DISPLAY_NO_MADCAP_SCOPES_FOUND, DISPLAY_NO_SCOPES_IN_RESOURCE, DISPLAY_OLDER_H323_CLIENT, DISPLAY_NO_AUDIOVIDEO_CLIENT, _
DISPLAY_NO_AUDIOVIDEO_ACTIVEX, DISPLAY_NO_MADCAP_SERVERS_MATCH_SCOPE %>
</HEAD>
<BODY BGCOLOR=#0066CC TOPMARGIN=0 LEFTMARGIN=0 RIGHTMARGIN=0 BOTTOMMARGIN=0 MARGINHEIGHT=0 MARGINWIDTH=0>
<% If (DISPLAY_PREJOIN = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_PreJoinTitle_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_POSTJOIN = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_PostJoinTitle_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_TOO_MANY_USERS = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_TooManyUsersTitle_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_NO_MADCAP_SERVERS = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_NoMadcapServersTitle_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_ALL_MADCAP_SERVERS_FAILED = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_AllMadcapServersFailedTitle_Text%></FONT></CENTER>
<% ElseIf ( DISPLAY_NO_MADCAP_SCOPES_FOUND = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_NoScopesFound_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_NO_SCOPES_IN_RESOURCE = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_NoScopesInResource_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_OLDER_H323_CLIENT = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_DisplayOlderH323Client_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_NO_AUDIOVIDEO_CLIENT = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_DisplayNoAudioVideoClient_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_NO_AUDIOVIDEO_ACTIVEX = inDisplayState) Then %>
<CENTER><FONT CLASS="menuselected"><%=L_DisplayNoAudioVideoActiveX_Text%></FONT></CENTER>
<% ElseIf (DISPLAY_NO_MADCAP_SERVERS_MATCH_SCOPE = inDisplayState) Then %>
<% NoScopeMatchMessage = L_NoScopeMatch1_Text & inScope & L_NoScopeMatch2_Text & inTimeToLive & L_NoScopeMatch3_Text %>
<CENTER><FONT CLASS="menuselected"><%=NoScopeMatchMessage%></FONT></CENTER>
<% End If %>
<% CASE DISPLAY_MULTICAST_CLIENT%>
</HEAD>
<BODY BGCOLOR=#0066CC TOPMARGIN=0 LEFTMARGIN=0 RIGHTMARGIN=0 BOTTOMMARGIN=0 MARGINHEIGHT=0 MARGINWIDTH=0>
<OBJECT classid=clsid:1533A74E-B073-11D2-8F7E-0080C7852DA3 codeBase="/<%=VROOT_CONFBIN%>/xipcctl.cab#Version=###BUILD_VERSION###" type="application/x-cabinet" height="100%" id=ExConf style="HEIGHT: 100%; WIDTH: 100%" width="100%"></OBJECT>
<SCRIPT language="JavaScript">
<!--
var strSDP;
strSDP = "<%=Request.QueryString%>";
//debugging output
//document.write("<BR>");
//document.write(strSDP);
var strTimeField;
strTimeField = "&t%3d";
//bitrate in kilobits per second
strBitRate = "50";
var idxStartTimeField
idxStartTimeField = strSDP.indexOf(strTimeField);
//debugging output
//alert("start " + idxStartTimeField);
strSDP = strSDP.slice(0, idxStartTimeField) + "&b%3dCT:" + strBitRate + strSDP.slice(idxStartTimeField);
//debugging output
//document.write("<BR>");
//document.write(strSDP);
//-->
</SCRIPT>
<SCRIPT language="JavaScript">
<!--
if ("undefined" == typeof(ExConf))
{
L_ControlNotInstalled_ErrorMessage = "The ActiveX control required for videoconferencing is not installed on your computer. Rejoin the conference, and then click Yes if you are prompted to install the control. (Whether you will be prompted depends on your browser's security setting.)";
alert(L_ControlNotInstalled_ErrorMessage);
}
else
{
//debugging output
//alert("joining SDP: " + strSDP);
ExConf.Join(strSDP);
ExConf.BackColor = 0x8000000F;
}
//-->
</SCRIPT>
</BODY>
</HTML>
<% CASE DISPLAY_H323_CLIENT%>
<SCRIPT Language=Javascript>
<!--
function SetAutoScrollbars()
{
window.parent.document.all.tags("FRAME").item(window.name).scrolling="auto"
}
-->
</SCRIPT>
</HEAD>
<BODY scroll=auto onload="SetAutoScrollbars();" BGCOLOR=#0066CC TOPMARGIN=0 LEFTMARGIN=0 RIGHTMARGIN=0 BOTTOMMARGIN=0 MARGINHEIGHT=0 MARGINWIDTH=0>
<TABLE COLS="2" ROWS="2">
<TR>
<TD ALIGN="CENTER"><%=(L_TitleBoldBegin_HTMLText & L_RemoteVideoWindowTitle_Text & L_TitleBoldEnd_HTMLText)%></TD>
<TD ALIGN="CENTER"><%=(L_TitleBoldBegin_HTMLText & L_LocalVideoWindowTitle_Text & L_TitleBoldEnd_HTMLText)%></TD>
</TR>
<TR>
<TD>
<OBJECT ID=NetMeetingRemote CLASSID="CLSID:3E9BAF2D-7A79-11d2-9334-0000F875AE17">
<PARAM NAME="MODE" VALUE="RemoteOnly">
</OBJECT>
</TD>
<TD>
<OBJECT ID=NetMeetingLocal CLASSID="CLSID:3E9BAF2D-7A79-11d2-9334-0000F875AE17">
<PARAM NAME="MODE" VALUE="PreviewOnly">
</OBJECT>
</TD>
</TR>
</TABLE>
<SCRIPT FOR=window event=onunload>
if (typeof(NetMeetingLocal) != "undefined")
{
NetMeetingLocal.LeaveConference();
}
if (typeof(NetMeetingRemote) != "undefined")
{
NetMeetingRemote.LeaveConference();
}
</SCRIPT>
</BODY>
</HTML>
<%
CASE ELSE 'Standard join page
IF (0 = ErrorCount AND "" = inDisplayState) THEN 'Decide between H323 and multicast
%>
</HEAD>
<BODY BGCOLOR=#0066CC TOPMARGIN=0 LEFTMARGIN=15 RIGHTMARGIN=15 BOTTOMMARGIN=15 MARGINHEIGHT=0 MARGINWIDTH=15>
<OBJECT ID="NetMeetingCAC" CLASSID="CLSID:9A04E3F0-3BB2-11d2-91E2-00C04FAEC46B" HEIGHT="0" WIDTH="0" codebase="/<%=VROOT_CONFBIN%>/xcliacc.cab#Version=###BUILD_VERSION###" TYPE="application/x-cabinet"></OBJECT>
<SCRIPT language="JavaScript">
<!--
if ("undefined" == typeof(NetMeetingCAC) || "1" != NetMeetingCAC.IsLoaded)
{
location.replace("xipconf.asp?DS=<%=DISPLAY_NO_AUDIOVIDEO_ACTIVEX%>&<%=Request.QueryString%>");
}
else
{
var strP = NetMeetingCAC.OptimalConferencingProtocol("VIDEO", "<%=Request.QueryString%>");
if ("MULTICAST" == strP)
{
location.replace("xipconf.asp?DS=<%=DISPLAY_MULTICAST_CLIENT%>&<%=Request.QueryString%>");
}
<% IF ("1" = inH323) THEN %>
else if ("H323.A" == strP)
{
location.replace("xipconf.asp?DS=<%=DISPLAY_H323_CLIENT%>&<%=Request.QueryString%>");
}
else if ("H323.B" == strP)
{
location.replace("xipconf.asp?DS=<%=DISPLAY_OLDER_H323_CLIENT%>&<%=Request.QueryString%>");
}
<% END IF %>
else
{
location.replace("xipconf.asp?DS=<%=DISPLAY_NO_AUDIOVIDEO_CLIENT%>&<%=Request.QueryString%>");
}
}
//-->
</SCRIPT>
</BODY>
</HTML>
<%
ELSE 'Error has occurred, send error page (this code is currently never reached)
CONST L_InvalidDisplayStateTitle_ErrorMessage = "Invalid Display URL"
CONST L_InvalidDisplayStateReason_ErrorMessage = "The URL for this page was mistyped or incorrectly entered."
CONST L_InvalidDisplayStateFix1_ErrorMessage = "Click Back on your browser, and then try to send your last command again."
CONST L_InvalidDisplayStateFix2_ErrorMessage = "If you copied the URL from another message, verify that you are using the correct URL."
CALL SetError(L_InvalidDisplayStateTitle_ErrorMessage, CDbl(inDisplayState), "displayState", "Invalid Display URL")
CALL SetReason(L_InvalidDisplayStateReason_ErrorMessage)
CALL AddFix(L_InvalidDisplayStateFix1_ErrorMessage)
CALL AddFix(L_InvalidDisplayStateFix2_ErrorMessage)
CALL AddFix(L_LinkToConferenceListsFix_ErrorMessage & "<A HREF=""list.asp"">" & L_LinkToConferenceListsFix2_ErrorMessage & "</A>")
CALL DisplayErrorPage
END IF
END SELECT
%>