Android音频实时传输与播放(二):服务端

来源:互联网 发布:淘宝 app 版本 编辑:程序博客网 时间:2024/05/17 08:25

原文链接:http://blog.csdn.net/zgyulongfei/article/details/7750707

我偷懒就用java写了个简单的服务器,大家明白原理就好。

服务端共开放两个端口,一个udp上行端口用来接收amr音频流,另一个tcp下行端口用来发送amr音频流。

我这里写的服务端实现了组播的功能,即一个人在录音,可以同时让很多人同时听到。

简而言之,服务端做的唯一一件事情就是转发音频流,囧rz。。。


在这里,我只贴出一部分代码,后面我会上传资源供大家下载。


接收udp传送的音频码流:

[java] view plaincopy
  1. while (isServerRunning()) {  
  2.     try {  
  3.         DatagramPacket pack = new DatagramPacket(data, data.length);  
  4.         udpServer.receive(pack);  
  5.         addPacketToBuffer(new FramePacket(pack.getData(), pack.getLength()));  
  6.     } catch (Exception e) {  
  7.         System.out.println(e.toString());  
  8.     }  
  9. }  

用tcp转发收到的音频流:

[java] view plaincopy
  1. public void sendDataToAllClient() throws Exception {  
  2.     if (isBufferEmpty() || clientList.size() <= 0) {  
  3.         return;  
  4.     }  
  5.     boolean bufEmpty = isBufferEmpty();  
  6.     byte[] block = takeAwayFirstFrame();  
  7.     ArrayList<Integer> disConnectClient = new ArrayList<Integer>();  
  8.     for (int ix = 0; ix < clientList.size(); ++ix) {  
  9.         Client client = clientList.get(ix);  
  10.         Socket clientSocket = client.getSocket();  
  11.           
  12.         if (clientSocket.isConnected()) {  
  13.             try {  
  14.                 if (!bufEmpty) {  
  15.                     if (block == null) {  
  16.                         continue;  
  17.                     }  
  18.                     OutputStream output = clientSocket.getOutputStream();  
  19.                     output.write(block);  
  20.                     output.flush();  
  21.                 }  
  22.             } catch (Exception err) {  
  23.                 disConnectClient.add(ix);  
  24.             }  
  25.         } else {  
  26.             disConnectClient.add(ix);  
  27.         }  
  28.     }  
  29.     for (int ix = 0; ix < disConnectClient.size(); ++ix) {  
  30.         int index = disConnectClient.get(ix);  
  31.         clientList.remove(index);  
  32.     }  
  33.     disConnectClient.clear();  
  34.     disConnectClient = null;  
  35.     block = null;  
  36. }  
0 0
原创粉丝点击