我是Lync 2013 SDK的新手(现在已经使用了几个星期)并且能够找出我需要的所有东西,除此之外......
当我加入会议时(使用ConversationManager.JoinConference()),它加入正常。但是,在某些情况下(并非所有情况),我想在会议上连接AVModality。有时候它有效,有时只是坐在"连接"并且从不连接(即使我称之为EndConnect)。
我发现的是Skype的选项中的设置 - > Skype会议 - >加入电话会议部分,似乎覆盖了我的代码。也许是竞争条件?
当设置为"不加入音频"和#34;在我参加会议之前,问我要使用哪种音频设备"未检查(意味着我在加入时没有提示):会议加入,AVModality断开连接 - >连接 - >断开。然后我的代码触发BeginConnect并且AVModality变为Disconnected - >连接 - 永不解决(有时我会收到快速忙音音频)。
当我加入会议之前,问我要使用哪种音频设备" IS CHECKED(意思是我收到提示):会议加入,提示询问如何连接,如果我选择Skype进行业务 - 它连接音频正常(预期)。有趣的是,如果我使用Lync UI挂断电话(AVModality转到Disconnected),它会立即再次连接(假设我的BeginConnect这样做)。
在这里,它真正令人费解: 如果我在ModalityStateChanged事件处理程序中的状态是在AVmodality上连接时调用BeginConnect ...会发生以下情况: 会议加入,提示我如何连接(AVmodality状态是"正在连接"此时直到决定提示) - 这意味着我的BeginConnect会激活。然后,如果我选择"不加入音频"在提示符... AVModality状态变为连接 - >断开连接 - >连接 - >加入 - >连接的。所以 - 我的BeginConnect已经在进行中,并且在这种情况下仍然有效,只要它在选择"不加入音频"之前触发。
所以我想知道"不加入音频"选择(无论有没有提示)实际上设置一些其他属性,阻止AVModality在该点之后连接而不做一些额外的hocus pocus?如果是这样 - 我想知道我需要执行的额外hocus pocus:)
感谢您的帮助!
答案 0 :(得分:1)
归结为此......会议加入是否加入了音频 - 我已经处理了除了一个以外的所有场景,我仍然无法弄清楚: 1.我需要加入会议音频,但用户选择不加入音频(在提示符或Skype选项设置中)。
在这种情况下 - 我已经为模态状态更改事件添加了一个事件处理程序,当NewState == Disconnected时,我触发了模态本身的BeginConnect。这很好用。在回调中,我有EndConnect调用。但是 - AVModality状态继续保持“正在连接”状态,并且永远不会解析为连接状态。在UI上 - 它显示音频按钮,但全部变灰(与正常连接时一样)。我不确定如何完成连接?
以下是一段代码:
if (merge)
{
myHandler = delegate (object sender1, ModalityStateChangedEventArgs e1)
{
AVModality avModality = (AVModality)sender1;
Globals.ThisAddIn.confConvo = avModality.Conversation;
if (e1.NewState == ModalityState.Connected)
{
DialNumberInSkype(meetingInfo);
avModality.ModalityStateChanged -= myHandler;
}
if (e1.NewState == ModalityState.Disconnected)
{
object[] asyncState = { avModality, "CONNECT" };
avModality.BeginConnect((ar) =>
{
avModality.EndConnect(ar);
DialNumberInSkype(meetingInfo);
}, asyncState);
avModality.ModalityStateChanged -= myHandler;
}
};
}
修改强> 出于某种原因,我现在无法添加评论......
我尝试按照您的建议设置端点。但是,我得到一个ArgumentException错误“值不在预期范围内。”所以我尝试将CreateContactEndpoint中的uri值硬编码为“sip:my_login@domain.com”(当然除了实际值) - 并且得到了相同的ArgumentException错误。我在此之前添加了一个断点,并且能够看到avModality.Endpoint的值 - 并且它实际上是在整个时间设置给我的...当我尝试调用BeginConnect时它不为空或未设置。
答案 1 :(得分:0)
当调用JoinConference()时,即使没有显式调用BeginConnect(),也会连接音频模态。
当显示询问音频设备选择的提示时(当在Skype中设置加入选项之前询问时)会话属性ConferenceEscalationProgress将具有值AwaitingJoinDialogResponse。
设置会话属性ConferenceJoinDialogCompleted为true将启动模态连接,即使提示未关闭。
<强>被修改强>
如果选择了不加入音频,则模态将被断开,此时您正在尝试调用BeginConnect()。尝试在调用BeginConnect()之前设置模态端点。
conversation.Modalities[ModalityTypes.AudioVideo].Endpoint = lyncClient.Self.Contact.CreateContactEndpoint(lyncClient.Self.Contact.Uri);