package com.basic.security.utils.socket; import android.os.SystemClock; import com.basic.security.utils.Constants; import com.basic.security.utils.SocketUtil; import java.net.ServerSocket; import java.net.Socket; import java.util.LinkedList; public class SnapshotYuvSocketServer { public static class SnapshotYuvAcceptedClient extends Thread { Socket mSocket; private static final int MAX_BUFFER = 2; private static LinkedList mRgbCameraQueue = new LinkedList(); public SnapshotYuvAcceptedClient(Socket client) { mSocket = client; } public static void addCameraData(byte[] data) { synchronized (mRgbCameraQueue) { if (mRgbCameraQueue.size() == MAX_BUFFER) { mRgbCameraQueue.poll(); } mRgbCameraQueue.add(data); } } public byte[] getImageBuffer() { byte[] mLastFrame = null; synchronized (mRgbCameraQueue) { if (mRgbCameraQueue.size() > 0) { mLastFrame = mRgbCameraQueue.poll(); } } return mLastFrame; } @Override public void run() { SocketUtil socketUtil = new SocketUtil(); try { socketUtil.setSocket(mSocket); if (socketUtil.writeBitmapHeader() ) { socketUtil.writeOneBitmap(getImageBuffer()); } while (!Thread.currentThread().isInterrupted()) { SystemClock.sleep(1000); } } catch (Exception e) { e.printStackTrace(); } finally { socketUtil.close(); } } } public static void startYuvSocketServer() { new Thread(){ @Override public void run() { ServerSocket server = null; try { server = new ServerSocket(Constants.snapshotServerPort); } catch (Exception e) { e.printStackTrace(); } while (true) { try { if (server == null) { break; } Socket client = server.accept(); SnapshotYuvAcceptedClient snapshotYuvAcceptedClient = new SnapshotYuvAcceptedClient(client); snapshotYuvAcceptedClient.start(); } catch (Exception e) { e.printStackTrace(); } finally { SystemClock.sleep(3000); } } } }.start(); } }