2016-04-08 15 views
5

İstemcimden (Raspberry Pi) dizüstü bilgisayarda barındırılan bir sunucuya canlı video karesi göndermeye çalışıyorum. Her iki cihaz da aynı ağa bağlanır.Raspberry Pi'de OpenCV ve soketleri kullanarak TCP üzerinden Video Gönderme

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 dizüstü

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) 

My Sunucu, hiçbir veri almıyor. Ancak bu istemci ve sunucuyu aynı cihazlarda çalıştırdığımda (ör. Sunucudaki sunucu ve istemci), düzgün çalışıyor.

Ahudududan dizüstü bilgisayara veri gönderebiliyorum (yankı uygulaması için test edilmiştir).

Bu konuda bana yardımcı olan var mı?

+2

Neden bu tür bir kullanım için tasarlanmış UDP yerine video akışı için TCP kullanıyorsunuz anlamıyorum – Humoyun

cevap

1

benim anlayışıma göre, istemci ve sunucu için aynı bağlantı noktalarını kullanmalıdır, ancak iki farklı olanları, 8083 ve 8081.

Güvenlik duvarı bağlantı noktası için açılmış kullanıldığını kontrol ettiniz kullanıyorsunuz?

+0

Bağlantı numaralarını aynı olsa bile, yine de aynı sorun. Ve tüm güvenlik duvarı kuralları o bağlantı noktasındaki bağlantılara izin verir. – Shinchan

+0

Ana makinenizin gerçek IP'sinin (ipconfig tarafından elde edildiği gibi) programınızda kullandığınız ile aynı olduğunu kontrol ettiniz mi? Bir ping her iki yönde de çalışır mı? – tfv

+0

sorunu alıyorum "payload_size" sunucuda çok büyük bir değer alıyor (7898745431321384897974964) ve bu nedenle program sonsuz bir döngüde. – Shinchan

1

Analiz saatlerinin ardından, server.py ve client.py'nin neden çalışmadığı (güvenlik duvarı devre dışı bırakıldıktan sonra bile), sunucu.py kodunda bir hata oluştu: "word bir dize olmamalıdır". Bu nedenle, word = "" (bir dizedir) word = b '' olarak değiştirilmelidir (bunlar bir baytı temsil eden iki tek tırnak).

+0

Tüm kodu paylaşabilir misiniz? server.py kodunda "word =" göremiyorum – TaeWoo

İlgili konular