私はクライアント(ラズベリーパイ)からラップトップでホストされているサーバーにライブビデオフレームを送信しようとしています。これらのデバイスは両方とも同じネットワークに接続されています。ラップトップ上のOpenCVとRaspberry Piのソケットを使用してビデオ送信TCP
Server.py
import socket
import sys
import cv2
import pickle
import numpy as np
import struct
HOST = '192.168.1.3'
PORT = 8083
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
s.bind((HOST, PORT))
print 'Socket bind complete'
s.listen(10)
print 'Socket now listening'
conn, addr = s.accept()
data = ""
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)
print frame.size
# cv2.imshow('frame', frame)
# cv2.waitKey(10)
Client.py
import cv2
import numpy as np
import socket
import sys
import pickle
import struct
cap = cv2.VideoCapture(0)
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('192.168.1.3', 8081))
while True:
ret,frame = cap.read()
data = pickle.dumps(frame)
clientsocket.sendall(struct.pack("L", len(data)) + data)
私のサーバーは、任意のデータを受信していません。しかし、このクライアントとサーバーを同じデバイス(ラップトップのサーバーやクライアントなど)で実行すると、正常に動作しています。
ラズベリーからラップトップにデータを送信できます(エコーアプリケーションでテスト済み)。
誰もがこれを手伝ってくれますか?
UDPの代わりにビデオストリーミングのためにTCPを使用している理由を理解できません。このような用途に使用することを意図しています。 – Humoyun