From 1c6670c9b01a01277fbe627a2d6ef2f78543f636 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 10 May 2020 21:03:38 -0700 Subject: [PATCH] Create new category and add `MediaPlayPause` request --- CMakeLists.txt | 1 + src/WSRequestHandler.cpp | 5 +++- src/WSRequestHandler.h | 2 ++ src/WSRequestHandler_MediaControl.cpp | 35 +++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/WSRequestHandler_MediaControl.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5648a963..c7e34a88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ set(obs-websocket_SOURCES src/WSRequestHandler_StudioMode.cpp src/WSRequestHandler_Transitions.cpp src/WSRequestHandler_Outputs.cpp + src/WSRequestHandler_MediaControl.cpp src/WSEvents.cpp src/Config.cpp src/Utils.cpp diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index f2ae6c47..1325a73b 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -143,7 +143,10 @@ const QHash WSRequestHandler::messageMap { { "ListOutputs", &WSRequestHandler::ListOutputs }, { "GetOutputInfo", &WSRequestHandler::GetOutputInfo }, { "StartOutput", &WSRequestHandler::StartOutput }, - { "StopOutput", &WSRequestHandler::StopOutput } + { "StopOutput", &WSRequestHandler::StopOutput }, + + { "MediaPlayPause", &WSRequestHandler::MediaPlayPause } + }; const QSet WSRequestHandler::authNotRequired { diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index d17384ee..deef55bb 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -162,4 +162,6 @@ class WSRequestHandler { RpcResponse GetOutputInfo(const RpcRequest&); RpcResponse StartOutput(const RpcRequest&); RpcResponse StopOutput(const RpcRequest&); + + RpcResponse MediaPlayPause(const RpcRequest&); }; diff --git a/src/WSRequestHandler_MediaControl.cpp b/src/WSRequestHandler_MediaControl.cpp new file mode 100644 index 00000000..e72fe197 --- /dev/null +++ b/src/WSRequestHandler_MediaControl.cpp @@ -0,0 +1,35 @@ +#include "Utils.h" + +#include "WSRequestHandler.h" + +/** +* Pause or play a media source. Supports ffmpeg and vlc media sources (as of OBS v25.0.8) +* +* @param {String} `sourceName` Source name. +* @param {boolean} `playPause` Whether to pause or play the source. `false` for play, `true` for pause. +* +* @api requests +* @name MediaPlayPause +* @category media control +* @since 4.8.0 +*/ +RpcResponse WSRequestHandler::MediaPlayPause(const RpcRequest& request) { + if ((!request.hasField("sourceName")) || (!request.hasField("playPause"))) { + return request.failed("missing request parameters"); + } + + QString sourceName = obs_data_get_string(request.parameters(), "sourceName"); + bool playPause = obs_data_get_bool(request.parameters(), "playPause"); + if (sourceName.isEmpty()) { + return request.failed("invalid request parameters"); + } + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + return request.failed("specified source doesn't exist"); + } + + obs_source_media_play_pause(source, playPause); + return request.success(); + +}