我开发了允许通过网络传播视频流的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