【发布时间】:2015-07-05 05:21:00
【问题描述】:
我在 Nexus 6 上使用适用于 Android 的 camera2 api 拍照。从我的代码到达 onImageAvailable() 的末尾到再次调用它几乎不需要任何时间。
但是,通过 tcp/ip 发送我的图片大约需要 700 毫秒。
private ImageReader.OnImageAvailableListener mOnImageAvailableListener =
new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader)
{
Image image = mImageReader.acquireLatestImage();
if(image.getPlanes().length == 0)
return;
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
if(buffer == null)
return;
byte[] pictureBytes = new byte[buffer.remaining()];
buffer.get(pictureBytes);
mOutputStream.write((String.valueOf(pictureBytes.length) + "....").getBytes());
// FROM HERE
mOutputStream.write(pictureBytes);
// TO HERE TAKES ~700ms
mOutputStream.flush();
}
我的连接是在另一个线程中创建的,正如 android 要求的那样,使用以下代码:
ServerSocket serverSocket = new ServerSocket(#);
Socket clientSocket = serverSocket.accept();
OutputStream outputStream = clientSocket.getOutputStream();
注意:主线程中的mOutputStream等于outputStream。我将 outputStream 传递给主线程。
我尝试过使用 BufferedOutputStream,但实际上速度较慢。
我的手机和它所连接的设备之间的链接速度是 130Mbps。对于小于 2MB 的图片,我应该能够每秒发送至少 8 张图片。
如何减少 700 毫秒的时间?谢谢!
【问题讨论】:
-
压缩图片会有帮助
-
“图像小于 2MB”——这是一张相当低分辨率的照片。您确定吗?另外,当您检查您编写的服务器时,您对读入的字节做了什么?您的 700 毫秒可能会阻止服务器读取字节。
标签: java android tcp ip android-camera