⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vreceive.py

📁 reduced python source for embedded apps
💻 PY
字号:
#! /usr/bin/env python# Receive live video UDP packets.# Usage: Vreceive [port]import sysimport structfrom socket import *			# syscalls and support functionsfrom SOCKET import *			# <sys/socket.h>from IN import *			# <netinet/in.h>import selectimport structimport gl, GL, DEVICEsys.path.append('/ufs/guido/src/video')import LiveVideoOutimport regsubimport getoptfrom senddefs import *# Print usage message and exit(2).def usage(msg):	print msg	print 'usage: Vreceive [-m mcastgrp] [-p port] [-c type]'	print '-m mcastgrp: multicast group (default ' + `DEFMCAST` + ')'	print '-p port    : port (default ' + `DEFPORT` + ')'	print '-c type    : signal type: rgb8, grey or mono (default rgb8)'	sys.exit(2)# Main program: parse options and main loop.def main():	sys.stdout = sys.stderr	group = DEFMCAST	port = DEFPORT	width = DEFWIDTH	height = DEFHEIGHT	vtype = 'rgb8'	try:		opts, args = getopt.getopt(sys.argv[1:], 'm:p:c:')	except getopt.error, msg:		usage(msg)	try:		for opt, optarg in opts:			if opt == '-p':				port = string.atoi(optarg)			if opt == '-m':				group = gethostbyname(optarg)			if opt == '-c':				vtype = optarg	except string.atoi_error, msg:		usage('bad integer: ' + msg)	s = opensocket(group, port)	gl.foreground()	gl.prefsize(width, height)	wid = gl.winopen('Vreceive')	gl.winconstraints()	gl.qdevice(DEVICE.ESCKEY)	gl.qdevice(DEVICE.WINSHUT)	gl.qdevice(DEVICE.WINQUIT)	lvo = LiveVideoOut.LiveVideoOut(wid, width, height, vtype)	ifdlist = [gl.qgetfd(), s.fileno()]	ofdlist = []	xfdlist = []	timeout = 1.0	selectargs = (ifdlist, ofdlist, xfdlist, timeout)	while 1:		if gl.qtest():			dev, val = gl.qread()			if dev in (DEVICE.ESCKEY, \				DEVICE.WINSHUT, DEVICE.WINQUIT):				break			if dev == DEVICE.REDRAW:				lvo.reshapewindow()		elif s.avail():			data = s.recv(16*1024)			pos, w, h = struct.unpack('hhh', data[:6])			if (w, h) <> (width, height):				x, y =  gl.getorigin()				y = y + height - h				gl.winposition(x, x+w-1, y, y+h-1)				width, height = w, h				lvo.resizevideo(width, height)			lvo.putnextpacket(pos, data[6:])		else:			x = select.select(selectargs)	lvo.close()# Subroutine to create and properly initialize the receiving socketdef opensocket(group, port):	# Create the socket	s = socket(AF_INET, SOCK_DGRAM)	# Allow multiple copies of this program on one machine	s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed)	# Bind the port to it	s.bind('', port)	# Look up the group once	group = gethostbyname(group)	# Construct binary group address	group_bytes = eval(regsub.gsub('\.', ',', group))	grpaddr = 0	for byte in group_bytes: grpaddr = (grpaddr << 8) | byte	# Construct struct mreq from grpaddr and ifaddr	ifaddr = INADDR_ANY	mreq = struct.pack('ll', grpaddr, ifaddr)	# Add group membership	s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)	return smain()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -