我的Android应用程序上的VOIP

我的Android应用程序上的VOIP,android,sockets,networking,voip,Android,Sockets,Networking,Voip,我想问一些关于我的安卓按键通话应用程序开发的问题。 最近,我一直在为Android开发一键通应用程序。我使用DatagramSocket通过本地无线网络(W-LAN)以数据包的形式发送和接收语音。我使用对等网络,所以没有服务器 我对代码没有问题,但我不了解VoIP的基本原理,所以我想问一些问题,希望有人能给我简单的答案:) 1.我的一键通应用程序被认为是基于VOIP的吗 2.有几种VOIP协议,如SIP、H.323等。如果我的PTT应用程序被认为是基于VOIP的,并且我使用套接字数据包(UDP,

我想问一些关于我的安卓按键通话应用程序开发的问题。 最近,我一直在为Android开发一键通应用程序。我使用DatagramSocket通过本地无线网络(W-LAN)以数据包的形式发送和接收语音。我使用对等网络,所以没有服务器

我对代码没有问题,但我不了解VoIP的基本原理,所以我想问一些问题,希望有人能给我简单的答案:)

1.我的一键通应用程序被认为是基于VOIP的吗

2.有几种VOIP协议,如SIP、H.323等。如果我的PTT应用程序被认为是基于VOIP的,并且我使用套接字数据包(UDP,我是对的吗?)来交换语音,那么我使用的VOIP协议是什么?它被认为是RTP协议吗

我想了解我的PTT应用背后的理论,我了解我的java代码,但我没有适当的VOIP知识。 我试图在谷歌上找到一些信息,但我仍然不明白我的PTT应用程序和VOIP技术之间的关系。 谢谢你,我是新来的,对不起我的英语

I.“VoIP”是一个非常宽泛的术语,但是,如果您的应用程序通过IP网络传输语音,它肯定是VoIP,尽管它可能使用完全专有的协议(例如Skype)

二,。VoIP协议栈基本上分为两个元层:1)信令层和2)媒体传输层。每个层依次由多个自己的层组成(例如,对于SIP:会话层、对话层、事务层和传输层)。信令协议的示例是H.323、SIP、MGCP。最标准的媒体传输是RTP。你可以使用自己的交通工具;RTP应用特定的限制(如AVP配置文件),但与各种库和其他实现兼容

有一些协议对信令和媒体使用相同的套接字和相同的传输类型;广泛使用的一种是。大多数其他插座将信号和介质分开,因此插座是分开的,并且可能具有不同的类型。符合标准的SIP实现应在UDP和TCP上运行,并在大请求时切换到TCP(默认情况下大于等于1300字节);还建议使用SCTP。对于所有传输,协议实现细节(如重传策略和请求超时)以不同的方式指定,但使用任何正确的L4协议都没有主要问题

媒体传输(在RTP或同等协议下)则完全是另一回事。在这里,以浮动延迟为代价传输所有数据的典型TCP方式对我们来说真是令人讨厌。TCP适用于批量通信类,如文件传输或数据库交互。在人与人之间的互动交流中,我们更喜欢噪音和零星的声音损失,而不是声音紧张。因此,TCP在这里是一个非常糟糕的选择,应该使用同步传输类,UDP是一个很好的默认选择。SCTP也可用作媒体传输,但具有有限的重传选项(并非所有堆栈都支持它)。(有人试图使用TCP穿透NAT点,但这一切都是绝望之举。)

如果应用程序假定一次向多个收件人发送语音消息(即一种广播或多播),则会拒绝使用面向连接的媒体传输,实际上只保留UDP。这也需要在信号级别进行适当的协商

三、 语音编解码器的选择是非常特定于平台的,我不使用Android原生的。在“大”VoIP中,有许可集和自由集,交叉点很小(AFAIR、G.711和GSM)。尽管如此,还是有一些好的编解码器(例如)可以适应广泛的需求,包括部分数据包丢失