1. 局域网视频监控
- socket 实现
- 测试可在同一台电脑运行
- 条件:处在同一局域网,并知道被监控端的 ip
- 观看监控视频时同步保存视频到本地
服务端
:等待接受视频信号
import socket
import cv2
import struct
import numpy
import threading
import time
class Camera_Connect_Object(object):
def __init__(self, TargetIP=('', 6666)): #端口可以自己选
self.TargetIP = TargetIP
self.resolution = (640, 480)
self.img_fps = 25
now_time = str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))
fourcc = cv2.VideoWriter_fourcc(*'XVID')
avi_name = now_time
self.out = cv2.VideoWriter(avi_name+ '.avi' ,fourcc, 25.0, (640,480))
self.Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.Server.bind(self.TargetIP)
self.Server.listen(5)
def RT_Image(self):
self.client, self.addr = self.Server.accept()
self.name = self.addr[0] + " Camera"
print(self.name)
while True:
# time.sleep(0.3) # sleep for 0.3 seconds
tempdata = self.client.recv(8)
if len(tempdata) == 0:
print("+1")
continue
info = struct.unpack('lhh', tempdata)
buf_size = int(info[0])
if buf_size:
try:
self.buf = b""
self.temp_buf = self.buf
while buf_size:
self.temp_buf = self.client.recv(buf_size)
buf_size -= len(self.temp_buf)
self.buf += self.temp_buf
data = numpy.frombuffer(self.buf, dtype='uint8')
self.image = cv2.imdecode(data, 1)
print(self.image.shape)
self.out.write(self.image)
cv2.imshow(self.name, self.image)
except Exception as e:
print(e.args)
pass
finally:
if cv2.waitKey(10) == 27:
self.client.close()
self.out.release()
cv2.destroyAllWindows()
break
def Get_data(self):
showThread = threading.Thread(target=self.RT_Image)
showThread.start()
showThread.join()
if __name__ == '__main__':
camera = Camera_Connect_Object()
camera.Get_data()
客户端
:向服务端发送视频信号
import socket
import struct
import time
import cv2
import numpy
class Config(object):
def __init__(self):
self.TargetIP = ('192.168.xx.xxx', 6666) #填自己电脑的ip