UCMA录音应用

时间:2017-09-07 15:02:44

标签: c# lync skype-for-business ucma

我已经安装了一个MSPL脚本来将INVITE音频消息重定向到UCMA sip地址

我目前正在为Skype for Business编写UCMA应用程序:

  1. 接听来电
  2. 接听电话
  3. 创建电话会议
  4. 将受信任的参与者添加到会议中
  5. 在受信任参与者音频流上创建录制实例以记录对话
  6. 我需要做的最后一件事是将To caller URI添加到电话会议中。 我尝试使用本文中的代码示例邀请新参与者加入会议,但我得到一个例外,说明会话中没有AvailableMediaTypes。

        public static async void InviteToConference(string destinationUri)
        {
            //Create a new conversation for the application endpoint.
            _toConversation = new Conversation(_server.ApplicationEndPoint);
    
            var conferenceInviteSettings = new ConferenceInvitationSettings();
            conferenceInviteSettings.ConferenceUri = _conferenceUri;
            ConferenceInvitation invitation = new ConferenceInvitation(_toConversation, conferenceInviteSettings);
    
            try
            {
                await invitation.DeliverAsync(destinationUri);
            }
            catch (InvalidOperationException)
            {
                // Conversation was terminated while trying to add participant.
            }
        }
    

    有人可以告诉我在添加/邀请参与者参加电话会议时需要做些什么吗?

    如果有人可以告诉我如何在不需要创建会议的情况下录制Skype for Business电话会更好,因为会议无法转发。

1 个答案:

答案 0 :(得分:1)

您的代码看起来像是旧方式(UCMA 3)。你试过this

e.g。

McuDialOutOptions mcuDialOutOptions = new McuDialOutOptions();
mcuDialOutOptions.ParticipantUri = "sip:alice@contoso.com";
mcuDialOutOptions.ParticipantDisplayName = "Alice";
mcuDialOutOptions.PreferredLanguage = CultureInfo.GetCultureInfo("en-us");
conversation.ConferenceSession.AudioVideoMcuSession.BeginDialOut("tel:+14255551234", mcuDialOutOptions, dialOutCallback, state);

使用这种方法记录非常具体和低流量应该没问题,但是当你开始扩展它时,你就会遇到各种各样的问题。

关于如何在没有会议的情况下这样做:

使用提供的Microsoft API无法完全实现。

您需要做的是为以下部分实施,购买或使用开源库:

  • 嗅探网络数据包
  • 解码RTP / SRTP流
  • 解码呼叫者之间使用的音频和/或视频编解码器
  • 将流编码为您想要的格式并保存在某处

要访问SRTP流加密设置并确定所使用的音频/视频编解码器的动态有效负载类型,您还需要知道主叫方之间提供和应答的SDP。您还需要访问SIP流量以确定呼叫方知道谁呼叫谁。这可能比它看起来要麻烦得多......

要获取SIP / SDP信息,我知道有两个选项:

  • Skype / Lync Server SDK(MSPL / Server Application)可以查看大部分SIP流量。这就是我用来实现录制解决方案的原因。
  • Skype/Lync SDN SDK - 我还没有使用过此API,但它似乎可以访问SDP,因此它可以正常运行。

如果你把所有这些问题都付诸实施,那么下一个问题就是你只能记录" (基本上"嗅")你能看到什么。如果您无法看到RTP / SRTP流量,则无法录制通话。

因此,您需要在网络中可以看到要录制的流量的区域中使用录制软件的嗅探器部分。例如,如果您希望记录所有PSTN呼叫,则可以在Skype中介服务器之外设置网络跨接端口。

如果你想记录所有的电话,那就更难了。你很可能需要:

  • 强制所有媒体流量通过一个已知位置(如边缘服务器)并将嗅探器放在该网络上。
  • 在网络的战略区域拥有大量嗅探器,以捕获大多数RTP / SRTP流量。

上述解决方案的问题是:

  • 一旦负载开始增加,强制通过一个点的所有流量可能会导致性能问题(就像您将在会议设置中看到的那样)。同样通过这一点强制外部(边缘服务器用户)和/或联合呼叫可能会导致问题。考虑边缘服务器用户对边缘服务器用户的调用,其中媒体流量甚至可能根本不进入您的网络,而是仅存在于互联网上。强制流量进入您的网络可能会导致性能问题。
  • 当不强制通过一个点的所有流量时,您可能永远不会看到所有Skype用户来skype用户呼叫,具体取决于您的网络设置。边缘服务器skype用户之间的通话更是一个问题,因为媒体流量甚至可能根本无法进入您的网络。

最重要的是存储管理的一般问题(一段时间后录制将开始占用大量磁盘空间)和呼叫录制管理(例如,搜索特定呼叫)以及围绕这些录制的用户安全性处理。我确定我错过了很多,但这些都是基础知识。

如果录制不是核心组件,您可以购买支持Lync / Skype的第三方通话录音解决方案。