首页 > 解决方案 > 如何将实时数据传输到 ec2 实例?

问题描述

整个过程可以描述为以下步骤 -

  1. 将图像帧发送到 EC2 实例
  2. 工艺框架
  3. 发回给客户

我用socket编程,暴露了一个端口,向它传输数据。这种方法很慢,平均需要0.7秒发送一帧,1.2秒从服务器传输到客户端。下面是我使用的代码片段:

客户端:读取一个帧,传输到服务器,然后,接收处理后的帧并显示它

  ret,frame = cap.read()
  data = pickle.dumps(frame) # Serialising data
  message_size = struct.pack("L", len(data))
  clientsocket.sendall(message_size + data) #Sending frame

  
  #Receiving frame
  while len(recv_data) < payload_size:
    recv_data += clientsocket.recv(8192)

  packed_msg_size = recv_data[:payload_size]
  recv_data            = recv_data[payload_size:]
  msg_size        = struct.unpack("L", packed_msg_size)[0]

  while len(recv_data) < msg_size:
    recv_data += clientsocket.recv(8192)


  frame_data = recv_data[:msg_size]
  new_frame = pickle.loads(frame_data)
  recv_data       = recv_data[msg_size:]

  #Displaying received data
  cv2.namedWindow("output", cv2.WINDOW_NORMAL)     
  cv2.imshow("output", new_frame)
  

服务器:接收帧,处理它,将处理后的帧发送回客户端

while True:

  while len(data) < payload_size:
    data += conn.recv(4096)

  packed_msg_size = data[:payload_size]
  data            = data[payload_size:]
  msg_size        = struct.unpack("L", packed_msg_size)[0]

  while len(data) < msg_size:
    data += conn.recv(4096)


  frame_data = data[:msg_size]
  data       = data[msg_size:]

  frame      = pickle.loads(frame_data)
  #Processing frame


  new_frame      = pickle.dumps(frame)
  #Data received
  message_size = struct.pack("L",len(new_frame))
  #Sending data back
  conn.sendall(message_size + new_frame)

这种方法速度很慢,需要实时传输数据。

标签: pythonamazon-web-servicessocketsamazon-ec2real-time

解决方案


推荐阅读