系统由一台播放器(服务器)和多台接收器(客户端)构成一个wifi直连的群组,服务器是群主(GO),客户端是组员(GC)。使用Wifi直连(p2p)构造一对多的系统是很方便实现的。
系统构成请参见图:wifi_p2p_一对多数据流程

上图只画出了音频数据的流程,对于服务器与客户端的文字信息交互没有表示,这部分内容看一下代码就明白了。
为了确保服务器作为群主(GO)角色出现在群组中,服务器启动时立即主动创立群组。
客户端启动后通过搜索功能发现服务器,并与之建立连接,客户端可以有多个。
通信系统采用NIO实现非阻塞的socket通信,一来有较好性能,二来避免了多用户复杂线程处理。
NIO系统的处理要点
NIO不同于传统的阻塞式socket通信方式,无法使用功能强大的ObjectOutputStream和ObjectInputStream,将对象以数据流方式发送或接收。
因此必须自己实现传输数据的打包和解包。
本系统传输的数据有两类,文字数据和音频数据。文字数据用于向对方发送消息,音频数据以PCM形式传送声音。
客户端向服务器发送的只有文字数据,直接使用charset.decode解码获得String。
为了便于NIO传输,服务器发出的两种数据都使用如下相同格式的数据包:
- 包类型 1个字节,用以区分文字数据和音频数据。
- 包长度 4个字节,用一个整数表示数据包的长度。
- 数据包,长度不等的文字数据或音频数据。
解决NIO的粘包拆包问题
粘包拆包问题的发生是NIO数据收发缓冲机制造成的,如果数

本文详细介绍了使用WiFi直连(P2P)构建的一对多音频播放系统,系统由服务器和多个客户端组成,服务器作为群主,客户端通过搜索连接。通信采用NIO实现非阻塞socket,解决粘包拆包问题。数据包包含包类型、长度和数据,音频数据以PCM形式传输。服务器端包含ConnectIntentService、DecoderCallback等模块,客户端通过ConnectRunnable接收和发送信息。系统还涉及到了WifiP2P的事件监听和处理。主要技术包括NIO、SocketChannel、SynchronousQueue等。

1139

被折叠的 条评论
为什么被折叠?



