From 73a4d5ab12efc6035a5c44625e1e772fd6c23ffc Mon Sep 17 00:00:00 2001 From: "kjellander@webrtc.org" Date: Wed, 8 May 2013 09:20:41 +0000 Subject: [PATCH] Add script to ensure virtual webcam is running. This script will check that a webcam is running and start it if it's not currently running. It's tailored to the way our buildbots are currently configured. TEST=local execution on Windows, Mac and Linux. BUG=none R=phoglund@webrtc.org Review URL: https://webrtc-codereview.appspot.com/1406005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3981 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../test/buildbot/ensure_webcam_is_running.py | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 webrtc/test/buildbot/ensure_webcam_is_running.py diff --git a/webrtc/test/buildbot/ensure_webcam_is_running.py b/webrtc/test/buildbot/ensure_webcam_is_running.py new file mode 100755 index 0000000000..45ca7cfe40 --- /dev/null +++ b/webrtc/test/buildbot/ensure_webcam_is_running.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +"""Checks if a virtual webcam is running and starts it if not. + +Returns a non-zero return code if the webcam could not be started. + +Prerequisites: +* Python must have the psutil package installed. +* Windows: a scheduled task named 'ManyCam' must exist and be configured to + launch ManyCam preconfigured to auto-play the test clip. +* Mac: ManyCam must be installed in the default location and be preconfigured + to auto-play the test clip. +* Linux: The v4l2loopback must be loaded to the kernel already (with the + devices=2 argument) and the v4l2_file_player application must be compiled and + put in the location specified below. +""" + +import psutil +import subprocess +import sys + + +WEBCAM_WIN = ['schtasks', '/run', '/tn', 'ManyCam'] +WEBCAM_MAC = ['open', '/Applications/ManyCam/ManyCam.app'] +WEBCAM_LINUX = ( + '$HOME/fake-webcam-driver/linux/v4l2_file_player/v4l2_file_player ' + '$HOME/webrtc_video_quality/reference_video.yuv 640 480 /dev/video1 &') + + +def IsWebCamRunning(): + if sys.platform == 'win32': + process_name = 'ManyCam.exe' + elif sys.platform.startswith('darwin'): + process_name = 'ManyCam' + elif sys.platform.startswith('linux'): + process_name = 'v4l2_file_player' + else: + raise Exception('Unsupported platform: %s' % sys.platform) + for p in psutil.get_process_list(): + if process_name == p.name: + print 'Found a running virtual webcam (%s with PID %s)' % (p.name, p.pid) + return True + return False + + +def Main(): + if IsWebCamRunning(): + return 0 + + try: + if sys.platform == 'win32': + subprocess.check_call(WEBCAM_WIN) + elif sys.platform.startswith('darwin'): + subprocess.check_call(WEBCAM_MAC) + elif sys.platform.startswith('linux'): + subprocess.check_call(WEBCAM_LINUX, shell=True) + + print 'Successfully launched virtual webcam.' + return 0 + + except Exception as e: + print 'Failed to launch virtual webcam: %s' % e + + +if __name__ == '__main__': + sys.exit(Main())