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

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

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

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

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

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


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


接收udp传送的音频码流:

[java]  view plain copy
  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 plain copy
  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值