Android ilbc 语音对话示范(三)程序流程

来源:互联网 发布:如何讲好中国故事知乎 编辑:程序博客网 时间:2024/05/18 01:58
2012072111550089.png 

图解:
1. 发送端有三个主要的类:AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责 将编码后的数据发送出去); 这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务, AudioRecorder采集音频后,添加到AudioEncoder 的音频数据的List中,而AudioEncoder 的编码线程不断从List头部取出数据,调用 ilbc 的底层\函数进行编码,编码后的数据则又添加到下一级的AudioSender的 List中,AudioSender又不断从头部取出数据,然后发送出去;

2. 使用Android 系统自带的 AudioRecord 这个类来实现音频数据的采集,注意要在AndroidManifest.xml文件中加上权限android.permission.RECORD_AUDIO ,使用 AudioRecord 时,一定要配置好一些音频参数,比如采样频率, 采样格式等,具体将在后续代码中详细写出;采集方法是 AudioRecord 中的  read(samples, 0, bufferSize) ;

3. AudioEncoder 对数据编码一次后,交付给AudioSender 让其发送到服务器,发送方采用 UDP 协议,采集一次数据 长度为960B,编码后长度为100B ,所以一个 UDP 包就非常小,既节省带宽,又减少丢包率;

4. 接收端有三个主要的类:AudioReciever(负责接收UDP 包),AudioDecoder(负责解码音频),AudioPlayer(负责音频播放),大致流程 在上图中已经详细给出,这里不做说明了,只不过就是 发送方流程的逆序。播放音频使用的是Android中的AudioTrack 这个类,使用write(byte[] data , int sampleOffset ,int sampleLength)  方法能够直接播放音频数据流;

5. 发送方有三个线程,接受方也有三个线程,一一对应,下一篇正式开始贴代码 ;

原文:http://www.cnblogs.com/swordbearer/archive/2012/07/21/2602151.html