语音部分使用的UDP通讯,收费部分使用TCP。语音采样后必须进行压缩(采样得到是PCM编码数据),否则数据量太大,带宽不够,我用的是A率(当时这个压缩弄了好长时间)。
这是我当时分析时写的聊天建立与终止的主要过程。
客户端:
A、根据在线用户发出聊天请求
a、进行打洞,并向服务器回送同意,并开启语音收发
b、拒绝,向服务器回送拒绝
C、收到同意打洞或拒绝
a、如果是同意,在本地开启语音收发
b、如果拒绝,在本地显示该信息
D、发出聊天请求,在本地关闭语音收发
E、收到聊天终止命令,在本地关闭语音收发
服务端:
A、收到聊天请求,向另一客户端发出打洞命令:
取出目标客户端的用户名和源IP和UDP端口,存入“打洞命令”共公变量中
B、收到同意打洞或拒绝,将其转发
C、服务端的“在线控制”线程循环读取“打洞命令”共公变量,如果是自己的打洞命令则将该命令传入客户端。
是这样的用socket 传输都是通过数据流来传送的,你只要把音频文件按2进制文件读入发送到接收端,再由接收端作相应处理(不要求严谨的话直接把数据文件更改为为相应扩展名即可) 您可以详细学习一下数据流欢迎分享,转载请注明来源:内存溢出
评论列表(0条)