2011-10-14 51 views
4

我想开始编写一个简单的Voip应用程序,它可以帮助我与我的一位朋友交谈。像Skyp一样。用C编写一个简单的voip应用程序

我搜索到互联网,发现类似this

它看起来不错一些有用的链接。你说的话 ?

哦,我忘了说,我在想用C写这个应用程序。你的意见是什么?对于这项工作,你更喜欢其他语言吗?是不错的选择?

另外,如果有人曾经尝试这样的事情,请告诉我你的经验。 如何启动,如果有一个很好的教程,使用什么语言和任何其他有用的信息。

谢谢你的时间。

+1

我认为我们心中的问题是:为什么不使用Skype或任何其他各种语音聊天软件?你的朋友是否真的想等你来编写软件并修复任何错误,然后你们可以一起谈话?安装软件只需几分钟。编写这个应用程序最少需要几个小时,可能更多的是因为你必须阅读文档,编写代码,测试它等。 – birryree

+2

第一个问题,我实际上在这里笑了。 – Anders

+0

我正在和Skype朋友聊天。但我只想学习这项技术的一些基本的东西,这就是为什么我想写这个应用程序。只是为了学习基础知识。有什么问题 ? – user547363

回答

8

好的,写一个简单的VOIP程序作为学习经验当然是一个很好的理由。

首先,您应该选择合适的音频编解码器并学习如何使用它。我建议SPEEX

其次,您需要决定如何通过网络发送编码数据。一个简单的TCP套接字可以工作,至少有正确的选项(我在这里特别想到TCP_NODELAY),但大多数VOIP应用似乎使用UDP来直接传输数据包,交换可靠性以提高效率。所以你应该学习如何设置和使用UDP套接字。

当然,您还需要学习如何阅读和播放音频。这些细节将取决于您使用的语言和平台。

一旦你掌握了所有这些,它应该是非常简单的。从麦克风读取音频,对其进行编码,通过网络发送出去,从网络读取传入数据,解码,播放。 当然,你同时做了几个这样的事情—如果你的程序在等待可能或不可能到来的输入数据时停止发送你的语音,这是不好的。

处理此问题的一种方法可能是将程序分成两个线程:一个用于收听和传输,另一个用于接收和播放。另一种解决方案是使用非阻塞I/O和事件驱动的编程来处理来自多个源的数据。此选项的一个可能的优点是它可以更容易地实现电话会议,您可以在其中发送和接收来自多个人的音频。

当然,我从来没有尝试过这个,所以我真的只是猜测在这里。