Android音频实时传输与播放(二):服务端
来源:互联网 发布:淘宝 app 版本 编辑:程序博客网 时间:2024/05/17 08:25
原文链接:http://blog.csdn.net/zgyulongfei/article/details/7750707
我偷懒就用java写了个简单的服务器,大家明白原理就好。
服务端共开放两个端口,一个udp上行端口用来接收amr音频流,另一个tcp下行端口用来发送amr音频流。
我这里写的服务端实现了组播的功能,即一个人在录音,可以同时让很多人同时听到。
简而言之,服务端做的唯一一件事情就是转发音频流,囧rz。。。
在这里,我只贴出一部分代码,后面我会上传资源供大家下载。
接收udp传送的音频码流:
- 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转发收到的音频流:
- 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;
- }
0 0
- Android音频实时传输与播放(二):服务端
- Android音频实时传输与播放(二):服务端
- Android音频实时传输与播放(二):服务端
- Android音频实时传输与播放(一):写在开头
- Android音频实时传输与播放(一):写在开头
- Android音频实时传输与播放(一):写在开头
- Android音频实时传输与播放(一)
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- Android音频实时传输与播放(四):源码下载(问题更新)
- Android音频实时传输与播放(四):源码下载(问题更新)
- Android音频实时传输与播放(四):源码下载(问题更新)
- Android音频实时传输与播放:AMR硬编码与硬解码 .
- Android音频实时传输与播放:AMR硬编码与硬解码
- solr模糊查询
- ubuntu环境下安装MyEclipse 10.6
- dyld: Library not loaded: @rpath/libswiftCore.dylib
- NSString / NSData / char* 类型之间的转换
- 01_spark1.3_RDD的开发
- Android音频实时传输与播放(二):服务端
- caffe源码解析 — net.cpp
- Spring中配置Quartz的misfireInstruction
- SolrCloud中一台server宕机情况下,依然能够正常查询
- QUartz2D 画简单图形
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- 如何在Mac OS X上安装 Ruby运行环境
- Android音频实时传输与播放(四):源码下载(问题更新)
- sql语句分为三类(DML,DDL,DCL)-介绍