目录

  • 1. 局域网视频监控
  • 2. 与云服务器远程通信
  • 3. 云服务器中转实现远程监控


1. 局域网视频监控

  • socket 实现
  • 测试可在同一台电脑运行
  • 条件:处在同一局域网,并知道被监控端的 ip
  • 观看监控视频时同步保存视频到本地


服务端 :等待接受视频信号

import socket
import cv2
import struct
import numpy
import threading
import timeclass Camera_Connect_Object(object):def __init__(self, TargetIP=('', 6666)): #端口可以自己选self.TargetIP = TargetIPself.resolution = (640, 480)self.img_fps = 25now_time = str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))fourcc = cv2.VideoWriter_fourcc(*'XVID')avi_name = now_timeself.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 secondstempdata = self.client.recv(8)if len(tempdata) == 0:print("+1")continueinfo = struct.unpack('lhh', tempdata)buf_size = int(info[0])if buf_size:try:self.buf = b""self.temp_buf = self.bufwhile buf_size:self.temp_buf = self.client.recv(buf_size)buf_size -= len(self.temp_buf)self.buf += self.temp_bufdata = 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)passfinally:if cv2.waitKey(10) == 27:self.client.close()self.out.release()cv2.destroyAllWindows()breakdef 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 numpyclass Config(object):def __init__(self):self.TargetIP = ('192.168.xx.xxx', 6666) #填自己电脑的ipself.resolution = (640, 480)  # 分辨率self.img_fps = 25  # each second send picturesself.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server.connect(self.TargetIP)self.img = ''self.img_data = ''def RT_Image(self):camera = cv2.VideoCapture(0)img_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.img_fps]while True:time.sleep(0.1)  # sleep for 0.1 seconds_, self.img = camera.read()self.img = cv2.resize(self.img, self.resolution)_, img_encode = cv2.imencode('.jpg', self.img, img_param)img_code = numpy.array(img_encode)self.img_data = img_code.tostring()  # bytes datatry:packet = struct.pack(b'lhh', len(self.img_data), self.resolution[0],self.resolution[1])self.server.send(packet)self.server.send(self.img_data)except Exception as e:print(e.args)camera.release()returnif __name__ == '__main__':config = Config()config.RT_Image()


2. 与云服务器远程通信

  • socket 实现
  • 服务端在云服务器运行,等待客户端连接
  • 通信过程,客户端发送信息至云端,云端将接收到的信息返回到客户端,并加上系统本地时间


服务端 :接受客户端的消息并回复

import socket
import time# 创建一个tcp/ip协议的套接字
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host = "172.17.xx.xx" #填写云服务器的私网 ip
port = 8888 #记得要先开放端口
buffer_size = 1024
address = (host, port)
# 开始绑定地址
tcpSocket.bind(address)
tcpSocket.listen(5)while True:print("服务器等待被连接中。。。。。")clientSock, client_addr = tcpSocket.accept()print("已经连接到客户端,连接地址:{0}".format(client_addr))try:while True:data = clientSock.recv(buffer_size)print("接收到客户端的数据为:{0}".format(str(data, encoding="utf8")))if data.upper() == "EXIT":breaknow_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())clientSock.send(bytes("时间:{0},接受的内容为:{1}".format(now_time, str(data, encoding="utf8")), encoding="utf8"))except Exception as e:print(e)finally:clientSock.close()tcpSocket.close()


客户端 :向服务器发送数据,也可接收服务器返回的数据

import socket
import time# 创建一个tcp/ip协议的套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host = "39.97.xx.xx" #填写自己的公网 ip
port = 8888 #与服务端的端口一致
buffer_size = 1024
address = (host, port)
# 开始连接服务器地址
clientSocket.connect(address)if clientSocket is None:print("无法连接当前的服务器!\n")
else:print("已经连接服务器---> oK\n")while True:data = input("(q 退出)发送数据到服务器:")if data== "q":clientSocket.send(bytes("EXIT", encoding="utf8"))# 关闭当前的客户端clientSocket.close()breakclientSocket.send(bytes(data, encoding="utf8"))# 接收服务器发送的数据data = clientSocket.recv(buffer_size)# 打印接收的数据print("服务器返回:{0}\n".format(str(data, encoding="utf8")))


3. 云服务器中转实现远程监控

  • 先在云服务器运行服务端,等待被连接
  • 云服务器可以接收被监控方客户端的视频信号,并保存为 avi 格式存放在云服务器上
  • 云服务器同样可以接收用户客户端的请求,将实时的视频信号转发给用户
  • 用户在远程观看视频的同时,视频也将被保存到本地
  • 顺序是这样的:服务端等待、相机连接到服务器并发送一帧画面、服务器接收一帧画面并保存为 avi 格式、用户连接到服务器查看正在传输的数据并保存视频到本地


客户端 1 :向服务器发送数据,经压缩的图像

import socket
import struct
import time
import cv2
import numpyclass Config(object):def __init__(self):self.TargetIP = ('39.97.xx.xx', 8888) #使用云服务器公网 ipself.resolution = (640, 480)  # 分辨率self.img_fps = 70  # each second send picturesself.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server.connect(self.TargetIP)print('采集者已连接服务器!')def RT_Image(self):camera = cv2.VideoCapture(0)img_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.img_fps]ret, frame = camera.read()while ret:time.sleep(0.1)  # sleep for 0.1 secondsret, frame = camera.read()frame = cv2.resize(frame, self.resolution)_, img_encode = cv2.imencode('.jpg', frame, img_param)img_code = numpy.array(img_encode)self.img_data = img_code.tostring()  # bytes datatry:buf_size = len(self.img_data)if buf_size>0 and buf_size<500000:packet = struct.pack(b'i',buf_size)self.server.send(packet)self.server.send(self.img_data)except Exception as e:print(e.args)camera.release()returnif __name__ == '__main__':config = Config()config.RT_Image()


客户端 2 :从服务器读取实时数据并解析,保存视频到本地

import socket
import struct
import time
import cv2
import numpy
import threading
import sysclass FromServer(object):def __init__(self):self.TargetIP = ('39.97.xx.xx', 9999) #公网 ip 端口不要与客户端 1 的重复了self.clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.clientSocket.connect(self.TargetIP)self.resolution = (640, 480)self.img_fps = 70def RT_Image(self):video_name = bytes.decode(struct.unpack('14s', (self.clientSocket.recv(14)))[0])fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(video_name+ '.avi' ,fourcc, 35.0, (640,480))try:while True:tempdata = self.clientSocket.recv(4)if cv2.waitKey(10) == 27:self.clientSocket.close()out.release()sys.exit()breakif len(tempdata) == 4:info = struct.unpack('i', tempdata)buf_size = int(info[0])if buf_size>0 and buf_size<500000:try:buf = b""temp_buf = bufwhile buf_size:temp_buf = self.clientSocket.recv(buf_size)buf_size -= len(temp_buf)buf += temp_bufdata = numpy.frombuffer(buf, dtype='uint8')self.image = cv2.imdecode(data, 1)out.write(self.image)cv2.imshow(video_name, self.image)except Exception as e:print(e)passelse:buf_size = 0except Exception as e:self.clientSocket.close()out.release()def Get_data(self):showThread = threading.Thread(target=self.RT_Image)showThread.start()showThread.join()if __name__ == '__main__':data = FromServer()data.Get_data()


服务端 :中转视频信号并保存数据在云端

import socket
import cv2
import struct
import numpy
import threading
import timeclass Transstation(object):def __init__(self, cam_ip, user_ip):self.cam_ip = cam_ipself.cam_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.cam_Server.bind(self.cam_ip)self.cam_Server.listen(5)print('服务器接收工作准备初始化完成!')self.user_ip = user_ipself.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.tcpSocket.bind(self.user_ip)self.tcpSocket.listen(5)print('服务器发送工作准备初始化完成!')self.now_time = ''self.resolution = (640, 480)self.img_fps = 70def receiveVideoThread(self):     print("等待相机中。。。。。")clientSock, client_addr = self.cam_Server.accept()print("已经连接到相机,连接地址:{0}".format(client_addr))self.now_time = str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(self.now_time+ '.avi' ,fourcc, 35.0, (640,480))print('正在保存视频 %s.avi'%self.now_time)flag = 1while True:tempdata = clientSock.recv(4)if cv2.waitKey(10) == 27:clientSock.close()out.release()breakif len(tempdata) == 4:info = struct.unpack('i', tempdata)buf_size = int(info[0])if buf_size>0 and buf_size<500000:try:buf = b""temp_buf = bufwhile buf_size:temp_buf = clientSock.recv(buf_size)buf_size -= len(temp_buf)buf += temp_bufdata = numpy.frombuffer(buf, dtype='uint8')img = cv2.imdecode(data, 1)self.image = imgout.write(img)except Exception as e:print(e.args)passdef sendVideoThread(self):print("等待用户中。。。。。")clientSock, client_addr = self.tcpSocket.accept()print("已经连接到用户,地址:{0}".format(client_addr))img_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.img_fps]s_name = struct.pack(b'14s',str.encode(self.now_time))clientSock.send(s_name)while True:if cv2.waitKey(10) == 27:clientSock.close()break_, img_encode = cv2.imencode('.jpg', self.image, img_param)img_code = numpy.array(img_encode)img_data = img_code.tostring()try:packet = struct.pack(b'i',len(img_data))clientSock.send(packet)clientSock.send(img_data)except Exception as e:passdef start_work(self):camThread = threading.Thread(target=self.receiveVideoThread)usrThread = threading.Thread(target=self.sendVideoThread)camThread.start()usrThread.start()camThread.join()usrThread.join()if __name__ == '__main__':cam_ip = ('172.17.xx', 8888) #私网 ipusr_ip = ('172.17.xx', 9999)#私网 ipserver = Transstation(cam_ip,usr_ip)server.start_work()




从局域网监控到广域网实时监控的实现相关推荐

  1. 城市智慧路灯综合管理平台、图监控、灯箱实时监控、策略管理、故障报警、灯具管理、数据统计、故障分析、开关灯记录分析、区域管理、分组管理、DIV+CSS布局设计、HTML/Bootstrp/jQuery

    源码类别: 后台模板     文件大小: 21.5 MB    源码内容:城市智慧路灯综合管理平台后台模板 前端技术: HTML/CSS/Bootstrap/jQuery    模板语言: 简体中文  ...

  2. 服务器实时状态检测源码,开源运维监控框架Netdata——实时监控系统性能

    开源运维监控框架Netdata--实时监控系统性能 开源运维监控框架Netdata--实时监控系统性能 作为一个Linux的SA,很有必要掌握一个专门的系统监控工具,以便能随时了解系统资源的占用情况. ...

  3. python 监控网页_python实时监控网页

    PHP 从语言层面上讲几乎是一无是处,具体实现的质量也乏善可陈,但它胜在最要命的部署上:没有任何其他语言有像 PHP 一样适合大规模部署的方式.基本上装好 Apache/mod_php 之后,PHP ...

  4. 服务器监控页面html_Nmon实时监控并生成HTML监控报告

    之前的文章介绍了服务端监控工具:Nmon使用方法,最近在github找到了一个nmon自动监控并生成HTML格式报告的工具:easyNmon,使用体验蛮不错的,这里介绍下它的安装及使用方法. 一.关于 ...

  5. mysql监控sql_如何实时监控mysql中的SQL语句的执行情况

    展开全部 慢查询的话可以开启慢查询日志,生产环境可以开启. 1.启用慢查询日志记录 (建议生产环境开启) vim /etc/mysql/mariadb.conf.d/50-server.cnf 或者3 ...

  6. python监控网页_python实时监控网页

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控

    6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...

  8. 有哪些舆情监控方法,舆情监控工作机制?

    一.舆情监控方法 1,组建新闻报道社会舆论舆情监控队伍 在言论高度自由的网络时代,人人都是自媒体,人人皆可表达意见.透过成立一队人才队伍的新闻报道社会舆论舆情监控各队能协助民营企业及时发现高度关注网络 ...

  9. 树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控

    树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(四)-实时监控 ...

最新文章

  1. leetcode--最长回文子串--python
  2. 单据自动转换并审核的方法示例
  3. 自律到极致-人生才精致:第13期
  4. rhel7安装vnc出现error: Failed dependencies:
  5. 电脑屏幕保护怎么取消_STEP考试安排再更新!今年到底要怎么考试?
  6. 实现Datagrid分页
  7. centos7盘符 linux_linux_centos7_扩展磁盘空间
  8. [Node.js] 模块化 -- path路径模块
  9. hssfcell判断文本类型_ICML 2020 | 显式引入对分类标签的描述,如何提高文本分类的效果?...
  10. 第四周笔记 c++ Boolan
  11. Horizo​​ntal Pod Autoscaler (HPA) 根据资源横向扩展
  12. 【 Codeforces Round #395 (Div. 2) E】Timofey and remoduling【数学思维题 —— 等差/等比数列】
  13. C语言基础知识目录大纲
  14. 批量 材质 调整_超实用的3dmax技巧,教你如何批量处理材质
  15. Java虚拟机类加载器及双亲委派机制
  16. newifimini出厂固件_newifi 新路由 mini用哪个Pandora固件
  17. 小程序防抖功能以及wx:for的使用
  18. Java基础 EL表达式
  19. 一瑞士法郎是多少人民币
  20. Mac 安装 双系统 体验极差的好几天

热门文章

  1. 素数c分解语言程序,深入分析C语言分解质因数的实现方法
  2. 最火的iOS开源项目
  3. Android视频边播放边缓存的代理策略之——AndroidVideoCache
  4. org.dom4j 解析XML
  5. Qt安装时No suitable kits found解决办法
  6. 爬虫实战-用beautifulsoup提取丁香园论坛的回复内容
  7. js微信禁用右上角的分享按钮,,和vue中微信页面禁用右上角的分享按钮的问题
  8. python pexpect 详解
  9. 神州泰岳确认将获飞信合约 称续签只是时间问题
  10. Learning to Summarize from Human Feedback