def getScenes(self):
     ret = self.ws.call(requests.GetCurrentScene())
     #print("current scene : ",ret.getName())
     ret = self.ws.call(requests.GetSceneList())
     self.data = ret.datain
     self.scenes = self.data["scenes"]
     self.keyScenes = getKeyScenes(self.scenes)
     return
Exemple #2
0
def main():
    ws = obsws(host, port, password)
    ws.connect()

    ret = ws.call(requests.GetCurrentScene())
    print("current scene : ", ret.getName())
    sources = ret.getSources()
    print("current sources : ", sources)
    for source in sources:
        properties = ws.call(requests.GetSceneItemProperties(source["name"]))
        print("properties : ", properties.datain)
        s1 = PROPERTIES(properties.datain)

    w = WINDOW_EASER(1280, 720)
    w.setWindow("f1")
    w.setWindow("f2")
    w.setKeyFrame("f1", 10 * 2, [0, 0, 1, 1])
    w.setKeyFrame("f2", 10 * 2, [1, 0, 1, 1])
    w.setKeyFrame("f1", 20 * 2, [0.1, 0.1, 0.4, 0.4])
    w.setKeyFrame("f2", 20 * 2, [0.9, 0.5, 0.4, 0.4])
    w.setKeyFrame("f1", 30 * 2, [0.1, 0.1, 0.4, 0.4])
    w.setKeyFrame("f2", 30 * 2, [0.9, 0.5, 0.4, 0.4])
    w.setKeyFrame("f1", 40 * 2, [0.5, 0.1, 0.4, 0.4])
    w.setKeyFrame("f2", 40 * 2, [0.5, 0.5, 0.4, 0.4])
    w.setKeyFrame("f1", 50 * 2, [0.5, 0.1, 0.4, 0.4])
    w.setKeyFrame("f2", 50 * 2, [0.5, 0.5, 0.4, 0.4])
    w.setKeyFrame("f1", 80 * 2, [0, 0, 1, 1])
    w.setKeyFrame("f2", 80 * 2, [1, 0, 1, 1])
    w.setupKeyFrame()
    while 1:
        for i in range(80 * 2):
            #print "=====================",i
            ret = w.update()
            #frame = w.draw()
            for source in sources:
                scale = s1.getScale(ret[source["name"]][3])
                if "f2" == source["name"]:
                    data = requests.SetSceneItemTransform(
                        source["name"], -scale, scale, 0).data()
                else:
                    data = requests.SetSceneItemTransform(
                        source["name"], scale, scale, 0).data()
                data["message-id"] = 100
                ws.ws.send(json.dumps(data))
                time.sleep(0.01)

                data = requests.SetSceneItemPosition(
                    source["name"], ret[source["name"]][0],
                    ret[source["name"]][1]).data()
                data["message-id"] = 100
                ws.ws.send(json.dumps(data))
                time.sleep(0.01)

            #cv2.imshow("window",frame)
            #cv2.waitKey(1)
        w.initKeyFrame()

    ws.disconnect()
Exemple #3
0
 def update_mute_status(self, sources=None):
     if sources is None:
         sources = self.client.call(requests.GetCurrentScene()).getSources()
     webcam_found = False
     for source in sources:
         if source['name'] in ['Webcam', 'Overlay: Webcam']:
             webcam_found = True
             self._send_osc('/cam', 1.0 if source['render'] else 0.0)
     if not webcam_found:
         self._send_osc('/cam', 0.0)
Exemple #4
0
    def SalvarEstadoActual(self):
        """Salta estado inicial de OBS para StreamDeck."""
        DataEscenaActual = self.OBS.call(requests.GetCurrentScene()).datain
        EstadoActual = self.OBS.call(requests.GetStreamingStatus()).datain
        SalvarValor("data/obs.json", "obs_conectar", self.Conectado)
        SalvarValor("data/obs.json", "obs_escena", DataEscenaActual["name"])
        SalvarValor("data/obs.json", "obs_grabar", EstadoActual["recording"])
        SalvarValor("data/obs.json", "obs_envivo", EstadoActual["streaming"])

        self.SalvarFuente()
def follow_alert(name):
    print("New follower:", name)
    ws.connect()
    current_scene = ws.call(requests.GetCurrentScene()).getName()
    if current_scene == "game scene":
        ws.call(requests.SetCurrentScene("abonnement"))
        minylpg.follower_alert(name)
        ws.call(requests.SetCurrentScene(current_scene))
    else:
        minylpg.follower_alert(name)
    ws.disconnect()
Exemple #6
0
def main():
    ws = obsws(host, port, password)
    ws.connect()

    PNFactoryX = perlin.PerlinNoiseFactory(1)
    PNFactoryY = perlin.PerlinNoiseFactory(1)

    ret = ws.call(requests.GetCurrentScene())
    print("current scene : ", ret.getName())
    sources = ret.getSources()
    print("current sources : ", sources)
    for source in sources:
        properties = ws.call(requests.GetSceneItemProperties(source["name"]))
        print("properties : ", properties.datain)
        s1 = PROPERTIES(properties.datain)

    w = WINDOW_EASER(1280, 720)
    w.setWindow("f1")
    w.setKeyFrame("f1", 10 * 2, [-0.05, -0.05, 1.1, 1.1])
    w.setKeyFrame("f1", 20 * 2, [-0.05, -0.05, 1.1, 1.1])
    w.setKeyFrame("f1", 40 * 2, [-0.2, -0.2, 1.4, 1.4])
    w.setKeyFrame("f1", 50 * 2, [-0.2, -0.2, 1.4, 1.4])
    w.setKeyFrame("f1", 70 * 2, [-0.05, -0.05, 1.1, 1.1])
    w.setKeyFrame("f1", 80 * 2, [-0.05, -0.05, 1.1, 1.1])
    w.setupKeyFrame()
    while 1:
        for i in range(80 * 2):
            #print "=====================",i
            ret = w.update()
            #frame = w.draw()
            for source in sources:
                scale = s1.getScale(ret["f1"][3])
                data = requests.SetSceneItemTransform(source["name"], scale,
                                                      scale, 0).data()
                data["message-id"] = 100
                ws.ws.send(json.dumps(data))

                data = requests.SetSceneItemPosition(
                    source["name"],
                    ret["f1"][0] + PNFactoryX(i / 30.0) * 20 - 20,
                    ret["f1"][1] + PNFactoryY(i / 30.0) * 20 - 20).data()
                data["message-id"] = 100
                ws.ws.send(json.dumps(data))
                time.sleep(0.02)

            #cv2.imshow("window",frame)
            #cv2.waitKey(1)
        w.initKeyFrame()

    ws.disconnect()
def requestCurrentSceneName():
    global currentSceneName, lastCommunicationTime
    message = ""
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(2)
    print("Requesting current scene name - ", end="")
    try:
        message = ws.call(requests.GetCurrentScene())
        currentSceneName = getSceneName(message)
        print("Response: " + currentSceneName)
        logging.debug("Current scene name: " + currentSceneName)
        lastCommunicationTime = time.time()
    except:
        print("NO RESPONSE!")
        logging.debug("NO RESPONSE to current scene name request!")
    signal.signal(signal.SIGALRM, signal.SIG_IGN)
    signal.alarm(0)
    def updateScene(self, sceneName, sceneId, speed=20):
        self.speed = speed
        currentScene = self.ws.call(requests.GetCurrentScene())
        currentSceneName = currentScene.getName()
        self.currentSceneName = currentSceneName
        currentSceneData = currentScene.datain
        print(currentSceneName)
        if currentSceneName in self.keyScenes and sceneName == currentSceneName:
            destSceneName = getSceneName(currentSceneName, sceneId)
            destScene = getSceneFromName(self.scenes, destSceneName)
            #print(destScene)
            if destScene is not None:
                self.setDest(currentSceneData, destScene, speed)

            #self.updateToEnd()

        return
Exemple #9
0
    def run(self, event: obs.ObsEvent) -> None:
        if isinstance(event, ObsConnected):
            scene = self.obsws.call(requests.GetCurrentScene())
            try:
                sources = scene.getSources()
            except KeyError:
                sources = []
            for s in sources:
                if s['name'] in self.mutable_scene_items:
                    self.mutable_items_visible[s['name']] = s['render']
            # Any item not in the current scene, we'll consider not visible.
            for i in self.mutable_scene_items:
                self.mutable_items_visible.setdefault(i, False)

            mute_status = self.obsws.call(requests.GetMute(self.mic_source))
            self.muted = mute_status.getMuted()

            logger.info(
                f'Starting: {self.muted}, {self.mutable_items_visible}')
            return

        if isinstance(event, obs.ObsDisconnected):
            self.cancel_timer()
            return

        event = cast(ObsMessage, event)
        msg = event.obs_message
        if isinstance(msg, events.SourceMuteStateChanged):
            self.muted = msg.getMuted()
            if self.accidentally_muted():
                self.start_timer()
            else:
                self.cancel_timer()
                self.has_announced = False
        elif isinstance(msg, events.SceneItemVisibilityChanged):
            self.mutable_items_visible[
                msg.getItemName()] = msg.getItemVisible()
            if self.accidentally_muted():
                self.start_timer()
            else:
                self.cancel_timer()
        elif isinstance(msg, events.StreamStopping):
            self.cancel_timer()
Exemple #10
0
    def HiloFuenteArchivo(self):
        DataEscenaActual = self.OBS.call(requests.GetCurrentScene()).datain
        Refrescar = False
        for Fuente in DataEscenaActual["sources"]:
            NombreFuente = Fuente["name"]
            EstadoFuente = ObtenerValor("data/obs_fuente.json", NombreFuente, Depurar=False)
            EstadoFuenteActual = self.OBS.call(requests.GetSceneItemProperties(NombreFuente)).datain
            if "visible" in EstadoFuenteActual:
                EstadoFuenteActual = EstadoFuenteActual["visible"]
                if EstadoFuente is not None:
                    if EstadoFuente != EstadoFuenteActual:
                        self.CambiarFuente(Fuente=NombreFuente)
                        Refrescar = True
                else:
                    SalvarValor("data/obs_fuente.json", NombreFuente, EstadoFuenteActual)
                    Refrescar = True
            self.SalvarFiltroFuente(NombreFuente)

        if Refrescar:
            self.actualizarDeck()
Exemple #11
0
def switch(bh, msg, scene):
    """Switch OBS scenes"""
    print(scene)
    # Help text
    help = '\n'.join([
        'available scenes: ' + ' '.join('`' + x + '`'
                                        for x in sorted(SCENES.keys())),
        'switch with `switch $NAME`',
    ])
    if not scene or scene not in SCENES:
        return help

    ws.connect()
    # Set the scene
    ws.call(requests.SetCurrentScene(SCENES[scene]))
    # Get current scene and verify it is as expected
    ret = ws.call(requests.GetCurrentScene())
    ws.disconnect()
    # React if it works
    if ret.getName() == SCENES[scene]:
        bh.react(msg, 'check_mark')
Exemple #12
0
 def current_scene(self):
     scene = self.ws.call(requests.GetCurrentScene()).getName()
     return scene
Exemple #13
0
def handle(socket, scene: beatoraja.Scene):
    name = config.OBS_SCENES.get(scene, None)
    if name is None or socket.call(obsrequests.GetCurrentScene()).getName() == name:
        return
    socket.call(obsrequests.SetCurrentScene(name))
 def current_scene(self):
     logging.debug(f"OBS property: current_scene.")
     return self.ws_call(requests.GetCurrentScene()).getName()
cam_num_str = cam_num_str_base.upper() + set_cam_num(
)  #Read the GPIO inputs to set the cam num - 3 bits, Num_Sel1 is LSB,   Set to upper case so that it's case insensitive
if debug_level >= 1: print("Cam Num: ", cam_num_str)
try:
    while 1:
        addr = find_open_socket()
        if addr != "":
            ws = obsws(addr, port, password)
            ws.register(on_event)
            ws.register(on_prog_switch,
                        events.SwitchScenes)  #Event for Scene going to Program
            ws.register(on_prev_switch, events.PreviewSceneChanged
                        )  #Event for Scene selected in Preview
            ws.connect()
            message = ws.call(
                requests.GetCurrentScene()
            )  #Get the Name of the Scene currently in Program (chk connection and set initial Prog LED state)
            sn = str(message)[str(message).find("name"):]
            sn = sn[:sn.find(",")]
            usn = sn.upper()
            connected = True
            if debug_level >= 1:
                print("Connected!  Current Scene in Program: ", sn)
            ipAddressHistory = open(
                "obsAddr.log",
                "w")  #Store the connected IP address in the log file
            ipAddressHistory.write(addr)
            ipAddressHistory.close()
            if usn.find(
                    cam_num_str
            ) > -1:  #Set initial Program LED states  (since changes are based on events) - No way to determine current Preview scene?
Exemple #16
0
def current_scene(ws, args):
    response = ws.call(requests.GetCurrentScene())
    print(response.getName())
def get_scenes():
    global current_scene
    current_scene = ws.call(requests.GetCurrentScene()).getName()
    current_scene = str(current_scene)
Exemple #18
0
start = time.time()
os.chdir(sys.path[0])
print("os.getcwd", os.getcwd())
sys.path.append('../')
logging.basicConfig(level=logging.ERROR)
from obswebsocket import obsws, requests, events
ws = obsws(host, port, password)
ws.connect()


def sendpacket(packet):
    ws.send(packet)


try:
    scene_to_screenshot = ws.call(requests.GetCurrentScene()).getName()
    scene_to_screenshot = str(scene_to_screenshot)

    if freeze_scene != scene_to_screenshot:
        packet01 = {
            "request-type": "TakeSourceScreenshot",
            "sourceName": scene_to_screenshot,
            "width": 1280,
            "height": 720,
            "saveToFilePath": file_path
        }
        packet02 = {
            "request-type": "SetCurrentScene",
            "scene-name": freeze_scene
        }
        sendpacket(packet01)
def main(scr):
    # Setup curses
    curses.noecho()
    curses.cbreak()
    scr.nodelay(True)
    while scr.getch() != curses.ERR:
        pass

    screen_width = 0
    screen_height = 0
    win = None
    curses_logger = None

    def handle_resize():
        nonlocal curses_logger
        nonlocal screen_width, screen_height
        nonlocal win
        nonlocal curses_logger

        screen_height, screen_width = scr.getmaxyx()
        win = curses.newwin(screen_height, screen_width, 0, 0)
        win.scrollok(True)
        win.idlok(True)
        win.leaveok(True)

        root_logger = logging.getLogger()
        if curses_logger != None:
            root_logger.removeHandler(curses_logger)
        curses_logger = CursesLoggingHandler(win)
        curses_logger.setFormatter(
            logging.Formatter(
                '%(asctime)-8s|%(name)-12s|%(levelname)-6s|%(message)-s',
                '%H:%M:%S'))
        root_logger.addHandler(curses_logger)

    handle_resize()

    selected_computer = 1
    streaming_computers = []

    task_queue = queue.Queue()

    def handle_switch_scenes(message):
        def handler():
            nonlocal selected_computer, streaming_computers, ws
            streaming_computers = get_currently_streaming_computers(ws)

            logger.info('Currently streaming computers: %r' %
                        streaming_computers)

            if selected_computer in streaming_computers:
                selected_computer = -1

        task_queue.put(handler)

    # Read user data
    remote_computers = []
    with open('users.csv', 'r') as user_file:
        user_reader = csv.reader(user_file)
        # Skip header
        next(user_reader, None)
        for user_line in user_reader:
            host, user = user_line
            remote_computers.append(RemoteComputer(host, user))

    command = [
        'ssh', '-o', 'UserKnownHostsFile=/dev/null', '-o',
        'StrictHostKeyChecking=no', '{user}@{host}', 'bash', '-s', '--',
        '{user}', 'udp://{master_host}:{local_port}'
    ]
    with open('remote-script.sh', 'r') as script_file:
        script = bytearray(script_file.read(), 'utf-8')
    remote_manager = RemoteComputerManager(remote_computers, command, script)

    ws = obsws("127.0.0.1", 4444, "")
    ws.register(on_event)
    ws.register(handle_switch_scenes, events.SwitchScenes)
    ws.connect()

    # Initialize currently selected scenes
    handle_switch_scenes(ws.call(requests.GetCurrentScene()))
    # TODO: Handle SceneItemAdded
    # TODO: Handle recursive scenes

    try:
        while True:
            while True:
                try:
                    task = task_queue.get_nowait()
                    task()
                except queue.Empty:
                    # No more tasks to handle
                    break

            key = scr.getch()
            if key == curses.KEY_RESIZE:
                handle_resize()
            if ord('0') <= key <= ord('9'):
                new_selection = key - ord('0')
                while new_selection < 1:
                    new_selection += 10
                if new_selection in streaming_computers:
                    logger.warning(
                        'Cannot change the source of currently streaming computer'
                    )
                    selected_computer = 0
                else:
                    logger.info('Selected computer: %d' % new_selection)
                    selected_computer = new_selection
            # TODO: A more intuitive way to connect to remote computers
            else:
                char = key - ord('A')
                if char >= 26:
                    char = key - ord('a')
                if 0 <= char < len(remote_computers):
                    if selected_computer == 0:
                        logger.warning('No computer selected')
                    else:
                        remote_machine = char
                        logger.info('Starting streaming %d to preview %d',
                                    remote_machine, selected_computer)
                        remote_manager.connect(selected_computer,
                                               remote_machine)

            #ws.call(requests.SetPreviewScene(random.choice(scenes)['name']))
            #time.sleep(.5)
            #ws.call(requests.TransitionToProgram('fade'))
            #time.sleep(.5)
    except KeyboardInterrupt:
        pass

    ws.disconnect()
Exemple #20
0
 def GetCurrentScene(self):
     try:
         return self.ws.call(requests.GetCurrentScene()).__dict__["datain"]
     except Exception as e:
         print(e)
Exemple #21
0
 def get(self, scene_name):
     scene = ws.call(requests.GetCurrentScene())
     name = scene.getName()
     if name != scene_name:
         ws.call(requests.SetCurrentScene(scene_name))
Exemple #22
0
import numpy as np
from obswebsocket import obsws, requests

#document
# https://github.com/Elektordi/obs-websocket-py/blob/master/obswebsocket/requests.py
#original document
# https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md

host = "localhost"
port = 4444
password = "******"

ws = obsws(host, port, password)
ws.connect()

ret = ws.call(requests.GetCurrentScene())
print("current scene : ", ret.getName())
sources = ret.getSources()
print("current sources : ", sources)
for source in sources:
    properties = ws.call(requests.GetSceneItemProperties(source["name"]))
    print("properties : ", properties.datain)

t0 = time.time()
for i in range(50):
    for source in sources:
        properties = ws.call(
            requests.SetSceneItemPosition(source["name"],
                                          np.sin(i / 20.0) * 100 + 100, 0))
t1 = time.time()
 def current_scene(self):
     """
     Get the current Scene.
     :return: Str. Scene name
     """
     return self.socket.call(requests.GetCurrentScene()).datain['name']