import urllib2 import subprocess ServerAddr = '192.168.1.100' UserName = 'admin' Password = 'admin' AudioUrl = 'http://' + ServerAddr + '/cgi/audio/audio.cgi' VideoUrl = 'http://' + ServerAddr + '/cgi/mjpg/mjpeg.cgi' VideoCmd = 'mplayer -demuxer lavf -' AudioCmd = 'mplayer -rawaudio channels=1:rate=8000:bitrate=128 -demuxer rawaudio -' # Passing the username and password with the URL doesn't seem to work passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, ServerName, UserName, Password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) def playStream(url, cmdLine, strip=0): print 'Opening ' + url stream = urllib2.urlopen(url) goodData = True p = subprocess.Popen(cmdLine, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while goodData: boundaryStr = stream.readline() if boundaryStr != '--myboundary\r\n': print 'Bad boundary: ' + boundaryStr break lengthStr = stream.readline() if not lengthStr.startswith('Content-Length: '): print 'Bad length: ' + lengthStr break length = int(lengthStr.strip().split()[1]) emptyStr = stream.readline() print 'Good frame, length %d' % length rawData = stream.read(length) if len(rawData) == length: try: p.stdin.write(rawData[strip:]) except IOError: break else: print 'Bad read length: %d' % len(rawData) break p.stdin.close() print p.stdout.read() p.stdout.close() p.wait() videoCmd = 'mplayer -demuxer lavf http://%s:%s@%s/cgi/mjpg/mjpeg.cgi?foo.mjpg' % (UserName, Password, ServerAddr) p = subprocess.Popen(videoCmd, shell=True) #playStream(VideoUrl, VideoCmd) playStream(AudioUrl, AudioCmd, 24)