Android ilbc 语音对话示范(五)接收端处理此系列文章拖了N久,有好多人发邮件来询问我第五次的文章为什么没
Android ilbc 语音对话示范(五)接收端处理
此系列文章拖了N久,有好多人发邮件来询问我第五次的文章为什么没有写,其实非常抱歉,本人学生一个,暑假一直
去公司实习,最近又忙着各种招聘找工作,没有时间好好写,现在抽空把最后一篇补上,水平有限,如过有不对的,请
各位指正~
前四篇文章分别介绍了 “代码结构”,“程序流程”,以及”发送方的处理”,现在就把接收方的处理流程做个介绍;

如上图所示,接收方的操作有三个类:AudioDecoder(负责解码),AudioPlayer(负责播放解码后的音频),
AudioReceiver(负责从服务器接收音频数据包),这三个类的流程在第三篇中有详细的介绍。
1.AudioReceiver代码:
AudioReceiver使用UDP方式从服务端接收音频数据,其过程比较简单,直接上代码:
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;public class AudioServer implements Runnable {DatagramSocket socket;DatagramPacket packet;// 从客户端接收到的UDP包DatagramPacket sendPkt;// 转发给另一个客户端的UDP包byte[] pktBuffer = new byte[1024];int bufferSize = 1024;boolean isRunning = false;int myport = 5656;// ///////////String clientIpStr = "192.168.1.104";InetAddress clientIp;int clientPort = 5757;public AudioServer() {try {clientIp = InetAddress.getByName(clientIpStr);} catch (UnknownHostException e1) {e1.printStackTrace();}try {socket = new DatagramSocket(myport);packet = new DatagramPacket(pktBuffer, bufferSize);} catch (SocketException e) {e.printStackTrace();}System.out.println("服务器初始化完成");}public void startServer() {this.isRunning = true;new Thread(this).start();}public void run() {try {while (isRunning) {socket.receive(packet);sendPkt = new DatagramPacket(packet.getData(),packet.getLength(), packet.getAddress(), clientPort);socket.send(sendPkt);try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}}} catch (IOException e) {}}// mainpublic static void main(String[] args) {new AudioServer().startServer();}}5.结语:
Android使用 ILBC 进行语音通话的大致过程就讲述完了,此系列只是做一个ILBC 使用原理的介绍,距离真正的语音
通话还有很多工作要做,缺点还是很多的:
1. 文章中介绍的只是单方通话,如果要做成双方互相通话或者一对多的通话,就需要增加更多的流程处理,其服务端
也要做很多工作;
2. 实时性:本程序在局域网中使用时,实时性还是较高的,但是再广域网中,效果可能会有所下降,除此之外,本
程序还缺少时间戳的处理,如果网络状况不理想,或者数据延迟,就会导致语音播放前后混乱;
3. 服务器很弱:真正的流媒体服务器,需要很强的功能,来对数据进行处理,我是为了方便,就写了一个简单的,
最近打算移植live555,用来做专门的流媒体服务器,用RTP协议对数据进行封装,这样效果应该会好很多。
