如果你通过UCMA程序和别人在同一个会话里同时使用了IM和语音,说不定有时候会遇见以下异常:
Microsoft.Rtc.Signaling.OperationFailureException: Application must register for ConversationChanged event when a call is moved to a derived conversation.
尤其是当你想要在只有IM或者应用共享的会话里增加语音选项时异常总会发生,远端会重定向语音给一个PSTN通话。也许是因为对方没有耳麦设备,或者是使用了无线设备导致通话质量太差,也可能他根本不能进行语音聊天。
这里发生的就是会话里的语音通话被通过Mediation服务器路由给了PSTN,而不是目标用户。这样语音呼叫就被从原始会话里剥离出来到了一个新的,称为derived conversation的会话里,并且这个会话有独立的ID。你可以看一下这时候的原始Conversation对象,是没有AudioVideoCall的,或者你可能看见多了一个PSTN与会者。你没有办法控制这个语音通话。基本上,UCMA为了保护你会要求你绑定一个事件Call.ConversationChanged。
如果当derived conversation被创建时你希望收到通知,可以像这样订阅ConversationChanged事件:
avCall.ConversationChanged += new EventHandler<ConversationChangedEventArgs>(OnAvCallConversationChanged);
我希望它能把详细信息输出到控制台,所以我这样:
void OnAvCallConversationChanged(object sender, ConversationChangedEventArgs e) { Console.WriteLine("Call moved to derived conversation! Old ID: {0}. New ID: {1}. Reason: {2}.", e.PreviousConversation.Id, e.NewConversation.Id, e.Reason); }
这样异常就被控制了。
更多推荐
(翻译)derived conversation相关概念
发布评论