Lync 2013 SDK - 加入会议&当"加入来自"的会议音频时连接AVModality。设置为"不加入音频"

时间:2016-08-24 23:56:22

标签: audio lync skype-for-business lync-client-sdk conference

我是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:)

感谢您的帮助!

2 个答案:

答案 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);