zmqによる画像の転送
4500 ワード
元のデータ
cv::Mat mat
エンコーディング
vector data_encode;
cv::imencode(".jpg",mat,data_encode);
トランスファ
zmq::context_t context(1);
zmq::socket_t skt(context,ZMQ_PUB);
skt.bind("tcp://*:20000);
zmq::message_t msg(data_encode.size());
memcpy(msg.data(),data_encode.data(),data_encode.size());
skt.send(msg);
転送(実際の状況によって中継した)
zmq::context_t context(1);
zmq::socket_t socket_get(context,ZMQ_SUB);
socket_get.setsockopt(ZMQ_SUBSCRIBE,"",0);
socket_get.connect("tcp://127.0.0.1:20000");
zmq::socket_t socket_pos(context,ZMQ_PUB);
socket_pos.setsockeopt(ZMQ_CONFLATE,1);// 1, 。 。。
socket_pos.bind("tcp://*:20001");
while(true){
zmq::message_t request;
socket_get.recv(&request);
if(request.size()==0)
break;
socket_pos.send(request);
}
じゅしん
@Override
public void run(){
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.SUB);
socket.subscribe("");
socket.setConflate(true);
socket.connect("tcp://192.168.xx.xx:200001");
while(!Thread.currenThread().isInterrupted()){
byte[] msg = socket.recv(0);
UIThreadHandler.sendMessage(....);
}
socket.close();
context.term();
}
表示
private void clientMessageReceived(byte[] msgBody){
ByteArrayInputStream inputStream = new ByteArrayInputStream(msgBody);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
}