【问题标题】:UCMA recording appUCMA 录音应用
【发布时间】:2017-09-07 15:02:43
【问题描述】:

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

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

  1. 接听来电
  2. 接听电话
  3. 创建电话会议
  4. 将受信任的参与者添加到会议中
  5. 在受信任的参与者音频流上创建一个录制实例以录制对话

我需要做的最后一件事是将 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 通话而无需创建会议,那就更好了,因为会议无法转发。

【问题讨论】:

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


    【解决方案1】:

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

    例如

    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 服务器 SDK(MSPL/服务器应用程序)查看大部分 SIP 流量。这是我用来实现录音解决方案的方法。
    • Skype/Lync SDN SDK - 我没有使用过这个 API,但它似乎可以访问 SDP,所以它应该可以工作。

    如果你把所有这些东西都准备好,那么下一个问题是你只能“记录”(基本上是“嗅探”)你能看到的东西。如果看不到 RTP/SRTP 流量,则无法记录通话。

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

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

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

    以上解决方案存在的问题是:

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

    除此之外,还有存储管理(一段时间后录音会开始占用大量磁盘空间)和通话录音管理(例如搜索特定通话)和围绕这些录音的用户安全性的一般问题来处理。我确定我错过了很多,但这些都是基础知识。

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

    【讨论】:

    • 感谢您的回复。我将尝试您在答案中输入的代码,并继续使用会议进行录制。我遇到的另一个问题是 MSPL 脚本。似乎在 UCMA 应用程序中收到呼叫时,当 UCMA 应用程序呼叫第二个呼叫腿时,再次调用 MSPL。有没有办法在对第二个呼叫段进行呼叫时停止 MSPL 呼叫 UCMA 应用程序?
    • 最简单的方法是标记您的 UCMA 调用,以便您可以在 MSPL 脚本中过滤它们。因此,只需在 UCMA 应用程序中添加您自己的自定义标头,然后在 MSPL 脚本中搜索该标头即可。
    • 酷。谢谢你:)
    • 我在 UCMA 应用程序的 McuDialOutOptions 对象的 Headers 集合中添加了一个自定义标题。我给它起了一个名字“IgnoreCall”和一个值“true”。但是如何在 MSPL 脚本中检查此标头。我尝试像这样使用 GetHeaderValues 方法。 foreach(GetHeaderValues 中的标头(“IgnoreCall”))。但它不起作用。如果标头存在,您能告诉我如何检查 MSPL 脚本吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多