Doo*_*oon 4 java sockets android image-processing
我想将视频/图像从 Android 手机发送到服务器并接收处理后的视频/图像。(例如,我发送图像并以二进制图像或灰度或调整大小等形式接收该图像)伙计们,最好和最简单的方法是什么?http?插座?XML?以及如何做呢?
我试图通过流来完成它(在 android LogCat 上找不到共享库错误),但我也无法管理如何做到这一点。
提前致谢
首先,在回答您问题的具体部分之前,这里有一些一般性建议:
尝试在设备上做一些琐碎的事情。只需在图像上放置遮罩或旋转/调整图像大小就非常简单,并且可以在设备上执行。这样,用户不需要上传任何内容(并等待),并且您的服务器的负载也不会那么重。
视频和图片可以变大。考虑到这一点。我想到的一个想法是,用户应该只上传图像/视频一次,但应该能够在下载最终结果之前执行多次操作。否则,您将面临漫长的等待时间和高流量。
告诉你的用户!如果您真的开始将(可能是个人的)图片/视频上传到您自己的服务器,请确保您使用可以获得的最大安全性(SSL 应该是必须具备的),并告诉您的用户您将把他们的内容上传到你的服务器。此外,您应该给他们拒绝的选择,否则,您可能会面临诉讼。
现在,到它的技术部分:
向服务器上传文件/从服务器下载文件的工作流程几乎总是相同的:
Socket
FileInputStream
)byte
读取数组中的二进制数据块在您的服务器上,您可以以相反的方式执行此操作,从 InputStream 读取内容,将内容写入FileOutputStream
.
下面是一个小例子,展示了它的外观:
Socket server = new Socket("192.168.178.32", 1337);
OutputStream outputStream = server.getOutputStream();
FileInputStream in = null;
try {
in = new FileInputStream("/some/path/to/gras.jpeg");
// Write to the stream:
byte[] buffer = new byte[1024]; // 1KB buffer size
int length = 0;
while ( (length = in.read(buffer, 0, buffer.length)) != -1 ){
outputStream.write(buffer, 0, length);
}
outputStream.flush();
} finally {
if (in != null) in.close();
socket.close(); // Will close the outputStream, too.
}
Run Code Online (Sandbox Code Playgroud)
这段代码忽略了这里可能抛出异常的事实。您需要以适当的方式处理这些问题。
您应该考虑到的是,用户可能会从移动互联网连接上传其内容,这可能会被拦截(例如在穿过隧道时)。在这种情况下,您需要实现可恢复的上传/下载。