import subprocess import ConfigParser from pexpect import pxssh STREAMER_IP = '10.0.0.161' VIDEO_TIMEOUT = 1260 class RemoteStreamer(object): def __init__(self): self.ssh_connection_timeout = VIDEO_TIMEOUT self.stream_box = pxssh.pxssh(timeout=self.ssh_connection_timeout, options={"StrictHostKeyChecking": "no"}) self.connect_ssh() self.get_current_box_ip() def connect_ssh(self): self.stream_box.login(server=STREAMER_IP, username='videostitch', ssh_key='/data/videostitch/.ssh/streamer.key') def get_current_box_ip(self): cmd =['ip', 'route', 'get', '1'] raw = subprocess.Popen(cmd, stdout=subprocess.PIPE) ip_route_output = raw.communicate() self.box_address = ip_route_output[0].split(' \n', 2)[0].split( ' ', -1)[-1] def start_inputs(self, start_inputs_script_path): self.stream_box.sendline('{} {}'.format(start_inputs_script_path, self.box_address)) self.stream_box.waitnoecho() def stop_inputs(self, stop_inputs_script_path): self.stream_box.sendline('{} {}'.format(stop_inputs_script_path, self.box_address)) self.stream_box.waitnoecho() def logout(self, force=True): self.stream_box.waitnoecho() self.stream_box.close(force) class RemotePi(object): def __init__(self, raspberry_config_path): self.ssh_connection_timeout = VIDEO_TIMEOUT self.stream_box = pxssh.pxssh(timeout=self.ssh_connection_timeout, options={"StrictHostKeyChecking": "no"}) self.settings = ConfigParser.ConfigParser() self.settings.read(raspberry_config_path) self.connect_ssh() def connect_ssh(self): self.stream_box.login(server=self.settings.get('pi', 'ip'), username=self.settings.get('pi', 'user'), ssh_key='/data/videostitch/.ssh/id_rsa') def play_audio(self): audio_path = self.settings.get('pi','audio_path') self.stream_box.sendline('aplay {}'.format(audio_path)) self.stream_box.waitnoecho() def stop_audio(self): self.stream_box.sendline('pkill -9 -f aplay') self.stream_box.waitnoecho() def logout(self, force=True): self.stream_box.waitnoecho() self.stream_box.close(force)