中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python怎么實現一個遠程視頻監控程序

發布時間:2021-06-17 15:50:46 來源:億速云 閱讀:217 作者:Leah 欄目:開發技術

使用Python怎么實現一個遠程視頻監控程序,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

服務器端代碼如下:

# -*- coding: UTF-8 -*-
import socket
import time
import traceback
from VideoCapture import Device
import threading
# 全局變量
is_sending = False
cli_address = ('', 0)
# 主機地址和端口
host = ''
port = 10218
# 初始化UDP socket
ser_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ser_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ser_socket.bind((host, port))
# 接收線程類,用于接收客戶端發送的消息
class UdpReceiver(threading.Thread):
 def __init__(self):
  threading.Thread.__init__(self)
  self.thread_stop = False
 def run(self):
  while not self.thread_stop:
   # 聲明全局變量,接收消息后更改
   global cli_address 
   global is_sending
   try:
    message, address = ser_socket.recvfrom(2048)
   except:
    traceback.print_exc()
    continue
  #  print message,cli_address
   cli_address = address
   if message == 'startCam':
    print 'start camera',
    is_sending = True
    ser_socket.sendto('startRcv', cli_address)    
   if message == 'quitCam':
    is_sending = False
    print 'quit camera',
 def stop(self):
  self.thread_stop = True
# 創建接收線程
receiveThread = UdpReceiver()
receiveThread.setDaemon(True)   # 該選項設置后使得主線程退出后子線程同時退出
receiveThread.start()
# 初始化攝像頭
cam = Device()
cam.setResolution(320,240)
# 主線程循環,發送視頻數據
while 1:
 if is_sending:  
  img = cam.getImage().resize((160,120))
  data = img.tostring()
  ser_socket.sendto(data, cli_address) 
  time.sleep(0.05)
 else:
  time.sleep(1)
receiveThread.stop()
ser_socket.close()

服務器啟動一個子線程,來監聽客戶端發送的消息。當有消息時,將is_sending改為True,則服務器向該客戶端發送視頻數據。具體信息可以看代碼注釋。

客戶端代碼如下:

# -*- coding: UTF-8 -*-
import socket, time
import pygame
from pygame.locals import *
from sys import exit
# 服務器地址,初始化socket
ser_address = ('localhost', 10218)
cli_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 設置超時
cli_socket.settimeout(5)
# 向服務器發送消息,并判斷接收時是否超時,若超時則重發
while 1:
 cli_socket.sendto('startCam', ser_address)
 try:
  message, address = cli_socket.recvfrom(2048)
  if message == 'startRcv':
   print message
   break
 except socket.timeout:
  continue
# 此句無用。。防止窗口初始化后等待數據
cli_socket.recvfrom(65536)
# 初始化視頻窗口
pygame.init()
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption('Web Camera')
pygame.display.flip()
# 設置時間,可以用來控制幀率
clock = pygame.time.Clock()
# 主循環,顯示視頻信息
while 1:
 try:
  data, address = cli_socket.recvfrom(65536)
 except socket.timeout:
  continue
 camshot = pygame.image.frombuffer(data, (160,120), 'RGB')
 camshot = pygame.transform.scale(camshot, (640, 480))
 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   cli_socket.sendto('quitCam', ser_address)
   cli_socket.close()
   pygame.quit()
   exit()
 screen.blit(camshot, (0,0))
 pygame.display.update() 
 clock.tick(20)

看完上述內容,你們掌握使用Python怎么實現一個遠程視頻監控程序的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 年辖:市辖区| 商南县| 民勤县| 买车| 霍林郭勒市| 宜春市| 宁国市| 和顺县| 仲巴县| 忻州市| 威海市| 轮台县| 交城县| 梅州市| 丽江市| 阿拉善右旗| 平南县| 涟源市| 嵩明县| 施甸县| 六枝特区| 廊坊市| 辽阳县| 昆山市| 新民市| 收藏| 容城县| 丽江市| 金溪县| 南皮县| 灵川县| 苏尼特左旗| 临城县| 利川市| 峡江县| 应用必备| 遂宁市| 稷山县| 绥阳县| 磴口县|