我開發了允許通過網絡傳播視頻流的Android應用程序的第一部分。目前,我以非常直接的方式發送視頻,如下所示:通過Android的套接字發送緩衝數據
Socket socket = new Socket(InetAddress.getByName(hostname), port);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
recorder.setOutputFile(pfd.getFileDescriptor());
但不幸的是,它不是很流暢。我想在通過套接字發送數據流之前緩衝數據流。我嘗試的一種方法是使用Android API for recording media將文件流寫入文件中,並使用另一個線程將文件流式傳輸到計算機上的服務器上。
所以我的問題是:我怎麼能通過一個套接字發送一個仍在寫入的文件? 作爲BufferedInputStream還沒有閱讀阻塞的方法,我試圖做這樣的事情之一,但沒有任何成功
while (inputStream.available() >= BUFFER_SIZE) {
inputStream.read(buffer);
outputStream.write(buffer);
}
outputStream.flush();
但是,當我做了,如果網絡比數據流速度,我得到迅速走出循環。
有沒有一個'好'的方法來做到這一點?我雖然在做積極的等待,但這不是一個好的解決方案,特別是對於手機。另一種方法是做這樣的事情:
while (true) {
while (inputStream.available() < BUFFER_SIZE) {
wait(TIME);
}
inputStream.read(buffer);
outputStream.write(buffer);
}
outputStream.flush();
但它聽起來對我來說很骯髒......有沒有光滑的解決方案?
好吧菲爾,感謝您的解決方案!我實現了它,它似乎很好地工作:) – Rob 2011-04-09 09:12:38