Programming/Python
TCP/IP 소켓통신 비디오 프레임[Python]
KayEsQuo
2021. 1. 3. 12:35
지난 글에 이어서 이번에는 영상 속 프레임을 보내보는것에 대해 코드를 작성했고, 사용방법은 다음과 같다.
# Server.py
import pickle
import socket
import struct
import cv2
HOST = 'localhost'
PORT = 8089
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('소켓 생성')
s.bind((HOST, PORT))
s.listen(10)
conn, addr = s.accept()
data = b''
payload_size = struct.calcsize("L")
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)
# 창으로 나타내기
cv2.imshow('frame', frame)
cv2.waitKey(1)
# client.py
import cv2
import numpy as np
import socket
import sys
import pickle
import struct
# 비디오 경로 읽어오기
cap=cv2.VideoCapture("")
clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
clientsocket.connect(('localhost',8089))
while True:
ret,frame=cap.read()
# 프레임 직렬화하여 전송준비
data = pickle.dumps(frame)
# 메시지 길이 측정
message_size = struct.pack("L", len(data))
# 데이터 전송
clientsocket.sendall(message_size + data)