package com.basic.security.utils.socket;
|
|
import android.os.SystemClock;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.model.OfficeDevice;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.SocketUtil;
|
|
import java.net.ServerSocket;
|
import java.net.Socket;
|
import java.util.LinkedList;
|
import java.util.Map;
|
|
public class SnapshotYuvSocketServer {
|
public static boolean serverStarted = false;
|
|
public static void startYuvSocketServer() {
|
if (serverStarted) {
|
return;
|
}
|
BaseApplication.getApplication().executorService.execute(() -> {
|
ServerSocket server = null;
|
try {
|
server = new ServerSocket(Constants.snapshotServerPort);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
while (true) {
|
try {
|
if (server == null) {
|
break;
|
}
|
serverStarted = true;
|
Socket client = server.accept();
|
SnapshotYuvAcceptedClient snapshotYuvAcceptedClient = new SnapshotYuvAcceptedClient(client);
|
snapshotYuvAcceptedClient.start();
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
SystemClock.sleep(3000);
|
}
|
}
|
});
|
|
}
|
|
public static class SnapshotYuvAcceptedClient extends Thread {
|
|
private static final int MAX_BUFFER = 2;
|
private static LinkedList<byte[]> mRgbCameraQueue = new LinkedList<byte[]>();
|
Socket mSocket;
|
|
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);
|
Map authMap = socketUtil.readMap();
|
socketUtil.deviceId = (String) authMap.get(OfficeDevice.deviceId);
|
if (socketUtil.writeBitmapHeader()) {
|
socketUtil.writeOneBitmap(getImageBuffer());
|
}
|
while (!Thread.currentThread().isInterrupted()) {
|
SystemClock.sleep(1000);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
socketUtil.close();
|
}
|
}
|
|
}
|
|
}
|