您的位置:首页 > 移动开发 > Android开发

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

2015-09-25 11:51 791 查看
原文链接:http://blog.csdn.net/zgyulongfei/article/details/7750707

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

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

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

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

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

接收udp传送的音频码流:

[java] view
plaincopy

while (isServerRunning()) {  

    try {  

        DatagramPacket pack = new DatagramPacket(data, data.length);  

        udpServer.receive(pack);  

        addPacketToBuffer(new FramePacket(pack.getData(), pack.getLength()));  

    } catch (Exception e) {  

        System.out.println(e.toString());  

    }  

}  

用tcp转发收到的音频流:

[java] view
plaincopy

public void sendDataToAllClient() throws Exception {  

    if (isBufferEmpty() || clientList.size() <= 0) {  

        return;  

    }  

    boolean bufEmpty = isBufferEmpty();  

    byte[] block = takeAwayFirstFrame();  

    ArrayList<Integer> disConnectClient = new ArrayList<Integer>();  

    for (int ix = 0; ix < clientList.size(); ++ix) {  

        Client client = clientList.get(ix);  

        Socket clientSocket = client.getSocket();  

          

        if (clientSocket.isConnected()) {  

            try {  

                if (!bufEmpty) {  

                    if (block == null) {  

                        continue;  

                    }  

                    OutputStream output = clientSocket.getOutputStream();  

                    output.write(block);  

                    output.flush();  

                }  

            } catch (Exception err) {  

                disConnectClient.add(ix);  

            }  

        } else {  

            disConnectClient.add(ix);  

        }  

    }  

    for (int ix = 0; ix < disConnectClient.size(); ++ix) {  

        int index = disConnectClient.get(ix);  

        clientList.remove(index);  

    }  

    disConnectClient.clear();  

    disConnectClient = null;  

    block = null;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: