JavaでAndroidアプリを作成しています。Socket通信を使ってプレビュー画像をリアルタイムで送信したいです。
Socket.getOutputStream()
でOutputStreamを取得しOutputStream.write(byte[] data)
で書き込みを行っているのですが、送信速度を上げたいです。
Android端末からUSB接続したPCへの送信に約1.25Mbpsかかっているのですが、より速い方法は無いのでしょうか。
Java初心者ですが、何か情報がございましたら教えて下さい。
また、ストリームとしてOutputStream
とBufferedOutputStream
の2つを試したのですが速度はあまり変わりませんでした。
以下、コード内で関係ありそうな部分を抜粋しております。
コード抜粋
java
1 2 private Camera mCamera = null; 3 private byte[] mFrameBuffer; 4 OutputStream outputStream; 5 BufferedOutputStream bfOutputStream; 6 7 //サーバースレッド 8 public void run() { 9 try { 10 listener = new ServerSocket(); 11 listener.setReuseAddress(true); 12 listener.bind(new InetSocketAddress(8079)); 13 clientSocket = listener.accept(); 14 15 outputStream = clientSocket.getOutputStream(); 16 //bfOutputStream = new BufferedOutputStream(outputStream); 17 18 Camera.Parameters params = mCamera.getParameters(); 19 params.setPreviewSize(Width, Height); 20 mCamera.setParameters(params); 21 int size = Width * Height * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8; 22 mFrameBuffer = new byte[size]; 23 mCamera.addCallbackBuffer(mFrameBuffer); 24 mCamera.setPreviewCallbackWithBuffer(previewCallback); 25 mCamera.startPreview(); 26 27 } catch (Exception e) { 28 e.printStackTrace(); 29 } 30 } 31 32 private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback(){ 33 @Override 34 public void onPreviewFrame(byte[] data, Camera camera) { 35 Send(data); 36 mCamera.addCallbackBuffer(mFrameBuffer); 37 } 38 } 39 40 // データ送信 41 private void Send(final byte[] array) { 42 senderHandler.post(new Runnable() { 43 @Override 44 public void run() { 45 try { 46 outputStream.write(array); 47 //bfOutputStream.write(array); 48 } catch (IOException ex) { 49 ex.printStackTrace(); 50 } 51 } 52 }); 53 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/15 09:37
2018/10/16 23:19
2018/10/18 09:38