我正在尝试使用c#构建一个简单的VoIP应用程序,所以我发现Ozeki SDK
是一种简单的方法,但当我尝试使用SIPAccount
类注册SIP帐户时来自Ozeki SDK
和我的本地IP
,它始终失败,这是代码
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
答案 0 :(得分:2)
您是否同时打开UDP和TCP端口5060? (标准SIP端口) 您可以从开发机器注册普通的SIP软电话吗?
从您的错误消息中,您听起来有防火墙问题,而不是代码问题。
查看您的代码,我会检查您输入的所有端口:5,000到10,000。
答案 1 :(得分:2)
在SDK的网站上研究了您的代码和SIP注册说明之后,我认为这一行会产生问题:
var domainHost = SoftPhoneFactory.GetLocalIP().ToString();
为了能够进行通信,我们需要将我们的软电话注册到PBX。 为此,该示例使用Register方法。我们需要创建一个 此注册的电话线,需要SIP帐户和NAT 遍历方法。
(资料来源:How to register to a PBX using SIP Account?)
因此,此代码段的目的是定义将注册到某个PBX的SIP帐户。因此,domainHost应该是您要注册的PBX的IP地址。 (并且domainPort应该是此PBX的端口号。)
答案 2 :(得分:0)
错误:NatType:UDPBlocked
SDK代码:
<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代码所示,
检查您遇到问题的防火墙和端口