Android音訊實時傳輸與播放(二):服務端
原文連結: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;
- }
相關文章
- Android音訊實時傳輸與播放(一):寫在開頭Android音訊
- Android音訊實時傳輸與播放(三):AMR硬編碼與硬解碼Android音訊
- Android音訊實時傳輸與播放(四):原始碼下載(問題更新)Android音訊原始碼
- 網頁端實時音視訊服務架構與實踐網頁架構
- Android AudioRecord錄音 並websocket實時傳輸,AudioTrack 播放wav 音訊,Speex加密AndroidWeb音訊加密
- RTN實時音視訊傳輸網路
- php原生socket實現客戶端與服務端資料傳輸PHP客戶端服務端
- Android音訊開發之AudioTrack實時播放Android音訊
- Golang 開源流媒體音視訊網路傳輸服務-LALGolang
- android 音訊播放 SoundPoolAndroid音訊
- iOS 實時音訊採集與播放Audio Unit使用iOS音訊
- Android MediaCodec硬解碼AAC音訊檔案(實時AAC音訊幀)並播放Android音訊
- Android 客戶端與PC服務端socket通訊接收與傳送圖片(終結者)Android客戶端服務端
- Android實現Thrift服務端與客戶端Android服務端客戶端
- UDP實現音訊影片流傳輸UDP音訊
- Android音視訊之MediaPlayer音視訊播放Android
- Android實時獲得經緯度,傳送給c++服務端AndroidC++服務端
- 網易易盾音訊過濾服務再次迭代 新增音訊實時檢測音訊
- 實現服務端和客戶端的實時雙向資料傳輸-WebSocket簡單瞭解服務端客戶端Web
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- FTP檔案服務搭建與同步傳輸FTP
- 華為音訊編輯服務實時變聲,大叔音怪獸音隨意變換音訊
- spring cloud feign實現遠端呼叫服務傳輸檔案SpringCloud
- Android端實現多人音視訊聊天應用(二):多人視訊通話Android
- 移動端音訊自動播放相關音訊
- Qt實現基於多執行緒的檔案傳輸(服務端,客戶端)QT執行緒服務端客戶端
- Angular2-專案實戰(續)-與服務端通訊Angular服務端
- 視音訊播放音訊
- Android如何壓縮圖片上傳服務端Android服務端
- 雲音樂服務端應用啟動時間下降40%實踐分享服務端
- Asp.Net音訊檔案上傳和播放ASP.NET音訊
- 影片App如何使用無線傳輸服務獲得更好的播放體驗APP
- 《愛立信觀察》:通訊將告別傳統語音服務
- 客戶端與服務端Socket通訊原理詳解客戶端服務端
- 移動端audio音訊播放相容方案薦音訊
- Android 音視訊開發 - 使用AudioTrack播放音訊Android音訊
- 【Android開發VR實戰】二.播放360°全景視訊AndroidVR
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊