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

📄 dsend.py

📁 reduced python source for embedded apps
💻 PY
字号:
#! /usr/bin/env python# Send live video UDP packets.# Usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-w width]#              [host] ..import sysimport timeimport structimport stringimport mathfrom socket import *from SOCKET import *import gl, GL, DEVICEsys.path.append('/ufs/guido/src/video')import DisplayVideoInimport LiveVideoOutimport SVimport getoptfrom IN import *from senddefs import *def usage(msg):	print msg	print 'usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-c type] [-m]',	print '[-w width] [host] ...'	print '-b        : broadcast on local net'	print '-h height : window height (default ' + `DEFHEIGHT` + ')'	print '-p port   : port to use (default ' + `DEFPORT` + ')'	print '-t ttl    : time-to-live (multicast only; default 1)'	print '-s size   : max packet size (default ' + `DEFPKTMAX` + ')'	print '-S size   : use this packet size/window size'	print '-w width  : window width (default ' + `DEFWIDTH` + ')'	print '-v        : print packet rate'	print '-x xpos   : set x position'	print '-y ypos   : set y position'	print '[host] ...: host(s) to send to (default multicast to ' + \		DEFMCAST + ')'	sys.exit(2)def main():	sys.stdout = sys.stderr	hosts = []	port = DEFPORT	ttl = -1	pktmax = DEFPKTMAX	width = DEFWIDTH	height = DEFHEIGHT	vtype = 'rgb'	verbose = 0	xpos = ypos = 0	try:		opts, args = getopt.getopt(sys.argv[1:], 'bh:p:s:S:t:w:vx:y:')	except getopt.error, msg:		usage(msg)	try:		for opt, optarg in opts:			if opt == '-p':				port = string.atoi(optarg)			if opt == '-b':				host = '<broadcast>'			if opt == '-t':				ttl = string.atoi(optarg)			if opt == '-S':				pktmax = string.atoi(optarg)				vidmax = SV.PAL_XMAX*SV.PAL_YMAX				if vidmax <= pktmax:					width = SV.PAL_XMAX					height = SV.PAL_YMAX					pktmax = vidmax				else:					factor = float(vidmax)/float(pktmax)					factor = math.sqrt(factor)					width = int(SV.PAL_XMAX/factor)-7					height = int(SV.PAL_YMAX/factor)-5					print 'video:',width,'x',height,					print 'pktsize',width*height,'..',					print pktmax			if opt == '-s':				pktmax = string.atoi(optarg)			if opt == '-w':				width = string.atoi(optarg)			if opt == '-h':				height = string.atoi(optarg)			if opt == '-c':				vtype = optarg			if opt == '-v':				verbose = 1			if opt == '-x':				xpos = string.atoi(optarg)			if opt == '-y':				ypos = string.atoi(optarg)	except string.atoi_error, msg:		usage('bad integer: ' + msg)	for host in args:		hosts.append(gethostbyname(host))	if not hosts:		hosts.append(gethostbyname(DEFMCAST))	gl.foreground()	gl.prefsize(width, height)	gl.stepunit(8, 6)	wid = gl.winopen('Vsend')	gl.keepaspect(width, height)	gl.stepunit(8, 6)	gl.maxsize(SV.PAL_XMAX, SV.PAL_YMAX)	gl.winconstraints()	gl.qdevice(DEVICE.ESCKEY)	gl.qdevice(DEVICE.WINSHUT)	gl.qdevice(DEVICE.WINQUIT)	gl.qdevice(DEVICE.WINFREEZE)	gl.qdevice(DEVICE.WINTHAW)	width, height = gl.getsize()	lvo = LiveVideoOut.LiveVideoOut(wid, width, height, vtype)	lvi = DisplayVideoIn.DisplayVideoIn(pktmax, width, height, vtype)	if xpos or ypos:		lvi.positionvideo(xpos, ypos)	s = socket(AF_INET, SOCK_DGRAM)	s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)	if ttl >= 0:		s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, chr(ttl))	frozen = 0	lasttime = int(time.time())	nframe = 0	while 1:		if gl.qtest():			dev, val = gl.qread()			if dev in (DEVICE.ESCKEY, \				DEVICE.WINSHUT, DEVICE.WINQUIT):				break			if dev == DEVICE.WINFREEZE:				frozen = 1			if dev == DEVICE.WINTHAW:				frozen = 0			if dev == DEVICE.REDRAW:				w, h = gl.getsize()				x, y = gl.getorigin()				if (w, h) <> (width, height):					width, height = w, h					lvi.resizevideo(width, height)					lvo.resizevideo(width, height)		rv = lvi.getnextpacket()		if not rv:			time.sleep(0.010)			continue		pos, data = rv		print pos, len(data) # DBG		if not frozen:			lvo.putnextpacket(pos, data)		hdr = struct.pack('hhh', pos, width, height)		for host in hosts:			try:				# print len(hdr+data) # DBG				s.sendto(hdr + data, (host, port))			except error, msg: # really socket.error				if msg[0] <> 121: # no buffer space available					raise error, msg # re-raise it				print 'Warning:', msg[1]		if pos == 0 and verbose:			nframe = nframe+1			if int(time.time()) <> lasttime:				print nframe / (time.time()-lasttime), 'fps'				nframe = 0				lasttime = int(time.time())	lvi.close()	lvo.close()main()

⌨️ 快捷键说明

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