2017-09-04 5 views
0

파이썬을 사용하여 라즈베리 파이에서 내 컴퓨터로 비디오 피드를 스트리밍하려고합니다. 따라서 소켓을 서버에 연결해야합니다. 이 코드 실행 내 컴퓨터에서OSError : [WinError 10049]이 오류를 어떻게 해결할 수 있습니까?

(RPI에서 192.168.0.6:8081에서 직접 스트리밍 비디오 이것들을 실행하기 전에) :

Traceback (most recent call last): 

File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 43, in <module> 
    VideoStreamingTest() 

File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 11, in __init__ 
    self.server_socket.bind(('192.168.0.6', 8081)) 

OSError: [WinError 10049] The requested address is not valid in its context 

: 컴파일하는 동안

import numpy as np 
import cv2 
import socket 


class VideoStreamingTest(object): 

    def __init__(self): 
     self.server_socket = socket.socket() 
     self.server_socket.bind(('192.168.0.6', 8081)) 
     self.server_socket.listen(0) 
     self.connection, self.client_address = self.server_socket.accept() 
     self.connection = self.connection.makefile('rb') 
     self.streaming() 

def streaming(self): 
    try: 
     print ("Connection from: ", self.client_address) 
     print ("Streaming...") 
     print ("Press 'q' to exit") 

     stream_bytes = ' ' 
     while True: 
      stream_bytes += self.connection.read(1024) 
      first = stream_bytes.find('\xff\xd8') 
      last = stream_bytes.find('\xff\xd9') 
      if first != -1 and last != -1: 
       jpg = stream_bytes[first:last + 2] 
       stream_bytes = stream_bytes[last + 2:] 
       #image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_GRAYSCALE) 
       image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_UNCHANGED) 
       cv2.imshow('image', image) 

       if cv2.waitKey(1) & 0xFF == ord('q'): 
        break 
    finally: 
     self.connection.close() 
     self.server_socket.close() 

if __name__ == '__main__': 
    VideoStreamingTest() 

그것을이 오류가 발생합니다 편집 : 이것은 또한주고있다

Traceback (most recent call last): 
    File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 47, in 
<module> 
    VideoStreamingTest() 
    File "C:/Users/tiger/Desktop/take_the_stream_from_pi.py", line 17, in 
__init__ 
self.connection = self.socket.create_connection(('192.168.0.6', 8081)) 
AttributeError: 'socket' object has no attribute 'create_connection' 

그래서 다시 보았습니다. connect_ex와 create_connection를 배치하고 여전히하는 오류를주고있다 .. :(

class VideoStreamingTest(object): 
    def __init__(self): 

    #self.server_socket = socket.socket() 
    #self.server_socket.bind(('192.168.0.6', 8081)) 
    #self.server_socket.listen(0) 

    #self.connection, self.client_address = self.server_socket.accept() 
    #self.connection = self.connection.makefile('rb') 
    #self.streaming() 
    self.socket = socket.socket() 
    self.connection = self.socket.create_connection(('192.168.0.6', 8081)) 
    #self.socket.connect(('192.168.0.6', 8081)) 
    self.streaming() 

def streaming(self): 

    try: 
     #print ("Connection from: ", self.client_address) 
     print ("Streaming...") 
     print ("Press 'q' to exit") 

     stream_bytes = ' ' 
     while True: 
      stream_bytes += self.connection.read(1024) 
      first = stream_bytes.find('\xff\xd8') 
      last = stream_bytes.find('\xff\xd9') 
      if first != -1 and last != -1: 
       jpg = stream_bytes[first:last + 2] 
       stream_bytes = stream_bytes[last + 2:] 
       #image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_GRAYSCALE) 
       image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.CV_LOAD_IMAGE_UNCHANGED) 
       cv2.imshow('image', image) 

       if cv2.waitKey(1) & 0xFF == ord('q'): 
        break 
    finally: 
     self.connection.close() 
     self.socket.close() 

if __name__ == '__main__': 
    VideoStreamingTest() 
+1

'192.168.0.6'가 올바른 원격 IP 주소입니다? 'socket.bind()'에는 로컬 호스트에 할당 된 주소가 필요합니다. – birryree

+0

나중에 해당 라즈베리 파이의 IP 주소 –

답변

0

을 당신은 주소 즉, 서버를 제공 장치의 IP 주소로 소켓의 bind 명령에 IP 주소를 변경해야 자신의 PC 중. 여기에 게시 한 코드는 원하는 것을 수행하지 않습니다. 새로운 server을 만들고 서버에 연결할 수있는 클라이언트로 작동하지 않습니다!

이 라인

self.server_socket.bind(('192.168.0.6', 8081)) 
self.server_socket.listen(0) 

self.socket.connect(('192.168.0.6', 8081)) 

편집으로 대체되어야한다 : 더 높은 API 수준에서 작동으로 어쩌면의 create_connection 기능을 사용하는 것이 좋습니다. 그래서이 초기화 방법으로 종료됩니다 :

def __init__(self): 
    self.socket = socket.socket() 
    self.connection, _ = self.socket.create_connection(('192.168.0.6', 8081)) 
    self.streaming() 

당신이 다음이 줄을 제거해야하는 streaming 방법도 :

print ("Connection from: ", self.client_address) 
+0

바로 시도해 볼게요, 제대로 작동하는지 알려 드리겠습니다! 많은 감사합니다! –

+0

@MohdSalman 도움이된다면 제 응답을 표기하고 질문의 대답으로 표시하십시오. – FlashTek

+0

오류 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "C : /Users/tiger/Desktop/take_the_stream_from_pi.py" VideoStreamingTest에서, 라인 (44),() 파일 "C :/사용자/호랑이/데스크탑 /take_the_stream_from_pi.py "줄 13, __init__ self.socket.connect ((''192.168.0.6 ', 8081) AttributeError :'VideoStreamingTest '객체에'socket '속성이 없습니다. –