Androidモバイルからサーバーにビデオ/画像を送信し、処理されたビデオ/画像を受信したい。(たとえば、画像を送信し、この画像をバイナリ画像、グレースケール、またはサイズ変更などとして受信します)それを行うための最良かつ最も簡単な方法は何ですか?Http?ソケット?XML?そしてそれをどのように行うのですか?
ストリームで実行しようとしましたが(Android LogCatで共有ライブラリがエラーを検出しませんでした)、実行方法も管理できませんでした。
前もって感謝します
Androidモバイルからサーバーにビデオ/画像を送信し、処理されたビデオ/画像を受信したい。(たとえば、画像を送信し、この画像をバイナリ画像、グレースケール、またはサイズ変更などとして受信します)それを行うための最良かつ最も簡単な方法は何ですか?Http?ソケット?XML?そしてそれをどのように行うのですか?
ストリームで実行しようとしましたが(Android LogCatで共有ライブラリがエラーを検出しませんでした)、実行方法も管理できませんでした。
前もって感謝します
まず、質問の特定の部分に答える前に、いくつかの一般的なアドバイスを示します。
デバイスでささいなことをしてみてください。画像にマスクを配置したり、画像を回転/サイズ変更したりするだけで、非常に簡単で、デバイス上で実行できます。このように、ユーザーは何もアップロードする必要がなく(そして待つ必要もありません)、サーバーの負荷はそれほど高くありません。
ビデオや写真は大きくなる可能性があります。これを考慮に入れてください。頭に浮かぶアイデアは、ユーザーは画像/ビデオを1回だけアップロードする必要がありますが、最終結果をダウンロードする前に複数の操作を実行できる必要があるということです。そうしないと、待ち時間が長くなり、トラフィックが多くなります。
ユーザーに伝えましょう!自分のサーバーに(おそらく個人的な)写真/ビデオのアップロードを実際に開始する場合は、取得できる最大限のセキュリティを使用していることを確認し(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.
}
このコードは、ここでスローされる可能性のある例外があるという事実を却下します。それらを適切な方法で処理する必要があります。
考慮すべき点は、ユーザーがモバイルインターネット接続からコンテンツをアップロードする可能性があることです。これは傍受される可能性があります(たとえば、トンネルを通過する場合)。この場合、再開できるようにアップ/ダウンロードを実装する必要があります。