LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1529|回复: 7

如何实现两台linux电脑之间的语音传输

[复制链接]
发表于 2006-6-13 09:56:01 | 显示全部楼层 |阅读模式
请各位高手帮帮忙,现在局域网内有两台计算机,需要像qq一样直接进行语音聊天,或者像对讲机一样工作。不借助voip等现有的东西,让两台电脑直接进行语音传输,请问这个程序怎么设计啊?刚学linux没几天,导师就要让我做这个东东,很头疼,请各位高手帮忙!小弟不胜感激!
发表于 2006-6-13 12:39:29 | 显示全部楼层
最简单的实现:
从声卡读取数据->发送 ------>接收->写入到声卡
回复 支持 反对

使用道具 举报

发表于 2006-6-17 14:38:36 | 显示全部楼层
我觉得到Freshmeat下载一个语音聊天工具,回去研究一下比较实在
回复 支持 反对

使用道具 举报

发表于 2006-6-17 14:43:48 | 显示全部楼层
skype就很好用嘛:
  1. *  net-im/skype
  2.       Latest version available: 1.2.0.18
  3.       Latest version installed: [ Not Installed ]
  4.       Size of downloaded files: 18,526 kB
  5.       Homepage:    http://www.skype.com/
  6.       Description: skype is a P2P-VoiceIP client.
  7.       License:     skype-eula
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-8-1 00:07:44 | 显示全部楼层
Post by shpchp
skype就很好用嘛:
  1. *  net-im/skype
  2.       Latest version available: 1.2.0.18
  3.       Latest version installed: [ Not Installed ]
  4.       Size of downloaded files: 18,526 kB
  5.       Homepage:    http://www.skype.com/
  6.       Description: skype is a P2P-VoiceIP client.
  7.       License:     skype-eula
复制代码

skype 在suse 能语音 ,在redhat 企业版不行,我装的tar 和r p m 的都不行
大家说说还有什么,我用m s n   KDE带的那,一登录就没了,自动关闭了好像
回复 支持 反对

使用道具 举报

发表于 2006-8-1 09:33:39 | 显示全部楼层
我觉得,一般在Linux上的语音通信,要注意的环节有下面几个:
(1)音频设备的操作:
在基于2.4内核的系统里,一般用的是oss,你可以去官方下载oss的文档看看怎么用。在基于2.6内核的系统里,一般用的是alsa,你也可以去官方下载manual。网上也有零星的个人写的笔记之类的供参考。这部分,简单点说,要做的,就是你的程序创建一个buffer,然后给oss/alsa,让它播放这个buffer里的数据,或者让它录制数据放入到你的buffer中。至于具体的编程模式去看oss/alsa文档吧。
(2)音频的编解码:
比如数据从计算机A到计算机B,那么A的oss/alsa采集完数据,放到你的buffer中后,你需要用编码器来对数据编码,然后再传向B. 而B在接收到你的数据之后,也需要用对应的解码器,将数据解码,放到B创建的buffer里面,再交给B的oss/alsa来播放。
至于编解码器,它的代码在网上有,都成标准了,自己去下吧,你看着那些函数,在上网搜搜,很快就知道怎么用了。
(3)传输和控制:
在上面(2)中提到的从A到B,可以采用RTP来进行传输,用标准RTCP或RTCP的子集来做控制,你也许可以把RTP看成是一个更好的socket,这样也许容易上手。RTP/RTCP有现成的开源代码可以用,像编解码器一样,都不用自己写。

对于基本的环节我想就上面这些吧,如果还要考虑到音频质量,那就要处理抖动,延时,乱序,丢包等问题了。

如果你老师的要求很简单,那么你只需要做上面(1)就可以了 :), (2)可以略去,不用编解码就直接传吧,(3)也略去,改为直接用socket传送吧。
回复 支持 反对

使用道具 举报

发表于 2006-8-4 00:43:09 | 显示全部楼层
Post by yifengcn
我觉得,一般在Linux上的语音通信,要注意的环节有下面几个:
(1)音频设备的操作:
在基于2.4内核的系统里,一般用的是oss,你可以去官方下载oss的文档看看怎么用。在基于2.6内核的系统里,一般用的是alsa,你也可以去官方下载manual。网上也有零星的个人写的笔记之类的供参考。这部分,简单点说,要做的,就是你的程序创建一个buffer,然后给oss/alsa,让它播放这个buffer里的数据,或者让它录制数据放入到你的buffer中。至于具体的编程模式去看oss/alsa文档吧。
(2)音频的编解码:
比如数据从计算机A到计算机B,那么A的oss/alsa采集完数据,放到你的buffer中后,你需要用编码器来对数据编码,然后再传向B. 而B在接收到你的数据之后,也需要用对应的解码器,将数据解码,放到B创建的buffer里面,再交给B的oss/alsa来播放。
至于编解码器,它的代码在网上有,都成标准了,自己去下吧,你看着那些函数,在上网搜搜,很快就知道怎么用了。
(3)传输和控制:
在上面(2)中提到的从A到B,可以采用RTP来进行传输,用标准RTCP或RTCP的子集来做控制,你也许可以把RTP看成是一个更好的socket,这样也许容易上手。RTP/RTCP有现成的开源代码可以用,像编解码器一样,都不用自己写。

对于基本的环节我想就上面这些吧,如果还要考虑到音频质量,那就要处理抖动,延时,乱序,丢包等问题了。

如果你老师的要求很简单,那么你只需要做上面(1)就可以了 :), (2)可以略去,不用编解码就直接传吧,(3)也略去,改为直接用socket传送吧。

哥们不用说这么多,我不是要编程,我想找个软件和朋友语音,学习交流
回复 支持 反对

使用道具 举报

发表于 2006-8-5 09:46:26 | 显示全部楼层
gnomemeeting, now is called ekiga.
text, audio and video. hoho.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表