As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




9年前关闭。




我想开始编写一个简单的Voip应用程序,这将帮助我与我的一个 friend 交谈。像Skyp。

我搜索了互联网,发现了一些有用的链接,例如this

看起来不错。你说的话 ?

哦,我忘了说我正在考虑用C语言编写此应用。您对此有何看法?您喜欢其他语言吗?是个好选择吗?

另外,如果有人尝试过这种方法,请告诉我您的经验。
如何启动,如果有一个好的教程,使用什么语言以及其他有用的信息。

谢谢你的时间。

最佳答案

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

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

其次,您需要确定如何通过网络发送编码数据。一个简单的TCP套接字至少可以在正确的选项上起作用(我在这里特别考虑TCP_NODELAY),但是大多数VOIP应用程序似乎都使用UDP直接传输数据包,从而牺牲了可靠性来提高效率。因此,您应该学习如何设置和使用UDP套接字。

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

一旦掌握了所有这些知识,就应该很简单。从麦克风读取音频,对其进行编码,通过网络将其发送,从网络读取传入的数据,进行解码,播放。
当然,您同时执行了几项操作-如果程序在等待可能到达或未到达的传入数据时停止发出声音,这是不好的。

一种解决方法是将程序分为两个线程:一个用于监听和传输,另一个用于接收和回放。另一种解决方案是使用非阻塞I/O和事件驱动的编程来处理来自多个源的数据。此选项的一个可能优点是,它可能使您可以轻松实现电话 session ,在该电话 session 中您可以从多个人发送和接收音频。

当然,我从来没有亲自尝试过,所以我只是在猜测。

10-06 10:29
查看更多