10

我正在尝试使用 c# 构建一个简单的 VoIP 应用程序,所以我发现这Ozeki SDK是一种简单的方法,但是当我尝试使用我本地的SIPAccount类注册 SIP 帐户时,它总是失败,这就是代码Ozeki SDKIP

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ozeki.VoIP;
using Ozeki.VoIP.SDK;

namespace SIP_R
{
    class Program
    {
        private static ISoftPhone softphone;   // softphone object
        private static IPhoneLine phoneLine;   // phoneline object

        private static void Main(string[] args)
        {
            // Create a softphone object with RTP port range 5000-10000
            softphone = SoftPhoneFactory.CreateSoftPhone(5000, 10000);

            // SIP account registration data, (supplied by your VoIP service provider)
            var registrationRequired = true;
            var userName = "1000";
            var displayName = "1000";
            var authenticationId = "1000";
            var registerPassword = "1000";
            var domainHost = SoftPhoneFactory.GetLocalIP().ToString();
            var domainPort = 9000;

            var account = new SIPAccount(registrationRequired, displayName, userName, authenticationId, registerPassword, domainHost, domainPort);

            // Send SIP regitration request
            RegisterAccount(account);

            // Prevents the termination of the application
            Console.ReadLine();
        }

        static void RegisterAccount(SIPAccount account)
        {
            try
            {
                phoneLine = softphone.CreatePhoneLine(account);
                phoneLine.RegistrationStateChanged += sipAccount_RegStateChanged;
                softphone.RegisterPhoneLine(phoneLine);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error during SIP registration: " + ex);
            }
        }

        static void sipAccount_RegStateChanged(object sender, RegistrationStateChangedArgs e)
        {
            if (e.State == RegState.Error || e.State == RegState.NotRegistered)
                Console.WriteLine("Registration failed!");

            if (e.State == RegState.RegistrationSucceeded)
                Console.WriteLine("Registration succeeded - Online!");
        }
    }
}

所以请任何关于做什么的帮助提前非常感谢任何帮助..

尝试使用 Ozeki SDK 和本地 IP 进行软电话呼叫时,会出现错误NatType:UDPBlocked

4

3 回答 3

2

在研究了您的代码和 SDK 网站上的 SIP 注册说明后,我认为这行会产生问题:

var domainHost = SoftPhoneFactory.GetLocalIP().ToString();

为了能够进行通信,我们需要将我们的软电话注册到 PBX。为此,该示例使用了 Register 方法。我们需要为此注册创建一条电话线,它需要一个 SIP 帐户和一个 NAT Traversal 方法。

(来源:如何使用 SIP 帐户注册到 PBX?

所以这个代码片段的目的是定义一个将注册到某个 PBX 的 SIP 帐户。因此,domainHost 应该是您希望注册到的 PBX 的 IP 地址。(并且 domainPort 应该是这个 PBX 的端口号。)

于 2015-04-28T11:51:41.230 回答
2

您是否同时打开了 UDP 和 TCP 端口 5060?(标准的 SIP 端口)你能从你的开发机器上注册一个普通的 SIP 软电话吗?

从您的错误消息看来,您遇到了防火墙问题,而不是代码问题。

查看您的代码,我会检查您输入的所有端口:5,000 到 10,000。

于 2015-04-20T16:40:44.437 回答
0

错误 :NatType:UDPBlocked

开发工具包代码:

 <member name="F:Ozeki.Network.Nat.NatType.UdpBlocked">
      <summary>
            Firewall that blocks UDP.
            </summary>
      <remarks>
            Probably no internet connection available or firewall issue.
            </remarks>
    </member>

可能没有可用的互联网连接或防火墙问题。

尝试启用高级出站 NAT,更改默认出站规则以启用静态端口。重新启动适配器。

正如 SDK 代码所示,

检查您已解决问题的防火墙和端口

于 2015-04-25T10:19:39.210 回答