从局域网监控到广域网实时监控的实现

该博客介绍了如何使用 socket 实现从局域网视频监控到通过云服务器进行远程监控的转变。首先,在局域网内通过 socket 进行视频信号的同步保存。接着,通过云服务器作为中转,实现实时视频信号的远程通信和存储。最后,详细阐述了云服务器如何接收并转发被监控端的视频信号,同时将视频保存在云端和用户本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值