mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Compare commits
49 Commits
5.2.3
...
experiment
Author | SHA1 | Date | |
---|---|---|---|
896bacf550 | |||
81b307e5ad | |||
52733ddce7 | |||
444caeb1d7 | |||
f03e82c3f8 | |||
bbdc5bc823 | |||
9ecc9532e8 | |||
0189c3a3f5 | |||
f48fcc06ec | |||
f43ef8e2da | |||
7a1c71bb96 | |||
cf285b3761 | |||
ede66a68cb | |||
e8089a5bbf | |||
07537a33fa | |||
efeae8d640 | |||
4ff109b62b | |||
42da47f81d | |||
a889799655 | |||
f52f47ec5d | |||
08767ae5a7 | |||
16bf61aab6 | |||
e9c0eee9e4 | |||
f4a3de575c | |||
2bfa1b4c64 | |||
0e611f579b | |||
ec2cdc8475 | |||
3cd8163945 | |||
132d4bafdd | |||
d991e21f29 | |||
a74468e07e | |||
55b3f88db9 | |||
ba7839bb69 | |||
417725801c | |||
93713c438e | |||
6db08f960e | |||
6434c42155 | |||
ac00465565 | |||
2606f262e6 | |||
2caecf6c01 | |||
19170fe6d9 | |||
1fc7900b1c | |||
53d7596160 | |||
886738547a | |||
c11874eb17 | |||
a0ffe16e91 | |||
e3d0751385 | |||
d5185417ec | |||
f7637250f1 |
22
.github/workflows/crowdin_upload.yml
vendored
Normal file
22
.github/workflows/crowdin_upload.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
name: Upload Language Files 🌐
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- "**/en-US.ini"
|
||||||
|
jobs:
|
||||||
|
upload-language-files:
|
||||||
|
name: Upload Language Files 🌐
|
||||||
|
if: github.repository_owner == 'obsproject'
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 100
|
||||||
|
- name: Upload US English Language Files 🇺🇸
|
||||||
|
uses: obsproject/obs-crowdin-sync/upload@30b5446e3b5eb19595aa68a81ddf896a857302cf
|
||||||
|
env:
|
||||||
|
CROWDIN_PAT: ${{ secrets.CROWDIN_SYNC_CROWDIN_PAT }}
|
||||||
|
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
|
||||||
|
SUBMODULE_NAME: obs-websocket
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "deps/qr"]
|
|
||||||
path = deps/qr
|
|
||||||
url = https://github.com/nayuki/QR-Code-generator.git
|
|
||||||
|
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16...3.25)
|
|||||||
|
|
||||||
legacy_check()
|
legacy_check()
|
||||||
|
|
||||||
set(obs-websocket_VERSION 5.2.3)
|
set(obs-websocket_VERSION 5.3.5)
|
||||||
set(OBS_WEBSOCKET_RPC_VERSION 1)
|
set(OBS_WEBSOCKET_RPC_VERSION 1)
|
||||||
|
|
||||||
option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON)
|
option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON)
|
||||||
@ -11,17 +11,17 @@ if(NOT ENABLE_WEBSOCKET)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Submodule deps check
|
|
||||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/deps/qr/cpp/QrCode.hpp")
|
|
||||||
message(FATAL_ERROR "obs-websocket submodule deps not available.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Find Qt
|
# Find Qt
|
||||||
find_qt(COMPONENTS Core Widgets Svg Network)
|
find_package(Qt6 REQUIRED Core Widgets Svg Network)
|
||||||
|
|
||||||
# Find nlohmann JSON
|
# Find nlohmann JSON
|
||||||
find_package(nlohmann_json 3 REQUIRED)
|
find_package(nlohmann_json 3 REQUIRED)
|
||||||
|
|
||||||
|
# Find qrcodegencpp
|
||||||
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
||||||
|
find_package(qrcodegencpp REQUIRED)
|
||||||
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
|
||||||
|
|
||||||
# Find WebSocket++
|
# Find WebSocket++
|
||||||
find_package(Websocketpp 0.8 REQUIRED)
|
find_package(Websocketpp 0.8 REQUIRED)
|
||||||
|
|
||||||
@ -31,52 +31,53 @@ find_package(Asio 1.12.1 REQUIRED)
|
|||||||
add_library(obs-websocket MODULE)
|
add_library(obs-websocket MODULE)
|
||||||
add_library(OBS::websocket ALIAS obs-websocket)
|
add_library(OBS::websocket ALIAS obs-websocket)
|
||||||
|
|
||||||
target_sources(obs-websocket PRIVATE)
|
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE src/obs-websocket.cpp
|
PRIVATE # cmake-format: sortable
|
||||||
src/obs-websocket.h
|
lib/obs-websocket-api.h
|
||||||
src/Config.cpp
|
src/Config.cpp
|
||||||
src/Config.h
|
src/Config.h
|
||||||
lib/obs-websocket-api.h
|
|
||||||
src/forms/ConnectInfo.cpp
|
src/forms/ConnectInfo.cpp
|
||||||
src/forms/ConnectInfo.h
|
src/forms/ConnectInfo.h
|
||||||
src/forms/resources.qrc
|
src/forms/resources.qrc
|
||||||
src/forms/SettingsDialog.cpp
|
src/forms/SettingsDialog.cpp
|
||||||
src/forms/SettingsDialog.h
|
src/forms/SettingsDialog.h
|
||||||
|
src/obs-websocket.cpp
|
||||||
|
src/obs-websocket.h
|
||||||
src/WebSocketApi.cpp
|
src/WebSocketApi.cpp
|
||||||
src/WebSocketApi.h)
|
src/WebSocketApi.h)
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE src/websocketserver/WebSocketServer.cpp
|
PRIVATE # cmake-format: sortable
|
||||||
src/websocketserver/WebSocketServer_Protocol.cpp
|
|
||||||
src/websocketserver/WebSocketServer.h
|
|
||||||
src/websocketserver/rpc/WebSocketSession.cpp
|
|
||||||
src/websocketserver/rpc/WebSocketSession.h
|
src/websocketserver/rpc/WebSocketSession.h
|
||||||
src/websocketserver/types/WebSocketCloseCode.h
|
src/websocketserver/types/WebSocketCloseCode.h
|
||||||
src/websocketserver/types/WebSocketOpCode.h)
|
src/websocketserver/types/WebSocketOpCode.h
|
||||||
|
src/websocketserver/WebSocketServer.cpp
|
||||||
|
src/websocketserver/WebSocketServer.h
|
||||||
|
src/websocketserver/WebSocketServer_Protocol.cpp)
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE src/eventhandler/EventHandler.cpp
|
PRIVATE # cmake-format: sortable
|
||||||
|
src/eventhandler/EventHandler.cpp
|
||||||
src/eventhandler/EventHandler.h
|
src/eventhandler/EventHandler.h
|
||||||
src/eventhandler/EventHandler_Config.cpp
|
src/eventhandler/EventHandler_Config.cpp
|
||||||
src/eventhandler/EventHandler_General.cpp
|
|
||||||
src/eventhandler/EventHandler_Filters.cpp
|
src/eventhandler/EventHandler_Filters.cpp
|
||||||
|
src/eventhandler/EventHandler_General.cpp
|
||||||
src/eventhandler/EventHandler_Inputs.cpp
|
src/eventhandler/EventHandler_Inputs.cpp
|
||||||
src/eventhandler/EventHandler_MediaInputs.cpp
|
src/eventhandler/EventHandler_MediaInputs.cpp
|
||||||
src/eventhandler/EventHandler_Outputs.cpp
|
src/eventhandler/EventHandler_Outputs.cpp
|
||||||
src/eventhandler/EventHandler_Scenes.cpp
|
|
||||||
src/eventhandler/EventHandler_SceneItems.cpp
|
src/eventhandler/EventHandler_SceneItems.cpp
|
||||||
|
src/eventhandler/EventHandler_Scenes.cpp
|
||||||
src/eventhandler/EventHandler_Transitions.cpp
|
src/eventhandler/EventHandler_Transitions.cpp
|
||||||
src/eventhandler/EventHandler_Ui.cpp
|
src/eventhandler/EventHandler_Ui.cpp
|
||||||
src/eventhandler/types/EventSubscription.h)
|
src/eventhandler/types/EventSubscription.h)
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE src/requesthandler/RequestBatchHandler.cpp
|
PRIVATE # cmake-format: sortable
|
||||||
|
src/requesthandler/RequestBatchHandler.cpp
|
||||||
src/requesthandler/RequestBatchHandler.h
|
src/requesthandler/RequestBatchHandler.h
|
||||||
src/requesthandler/RequestHandler.cpp
|
src/requesthandler/RequestHandler.cpp
|
||||||
src/requesthandler/RequestHandler.h
|
src/requesthandler/RequestHandler.h
|
||||||
@ -86,10 +87,10 @@ target_sources(
|
|||||||
src/requesthandler/RequestHandler_Inputs.cpp
|
src/requesthandler/RequestHandler_Inputs.cpp
|
||||||
src/requesthandler/RequestHandler_MediaInputs.cpp
|
src/requesthandler/RequestHandler_MediaInputs.cpp
|
||||||
src/requesthandler/RequestHandler_Outputs.cpp
|
src/requesthandler/RequestHandler_Outputs.cpp
|
||||||
src/requesthandler/RequestHandler_Sources.cpp
|
|
||||||
src/requesthandler/RequestHandler_Record.cpp
|
src/requesthandler/RequestHandler_Record.cpp
|
||||||
src/requesthandler/RequestHandler_Scenes.cpp
|
|
||||||
src/requesthandler/RequestHandler_SceneItems.cpp
|
src/requesthandler/RequestHandler_SceneItems.cpp
|
||||||
|
src/requesthandler/RequestHandler_Scenes.cpp
|
||||||
|
src/requesthandler/RequestHandler_Sources.cpp
|
||||||
src/requesthandler/RequestHandler_Stream.cpp
|
src/requesthandler/RequestHandler_Stream.cpp
|
||||||
src/requesthandler/RequestHandler_Transitions.cpp
|
src/requesthandler/RequestHandler_Transitions.cpp
|
||||||
src/requesthandler/RequestHandler_Ui.cpp
|
src/requesthandler/RequestHandler_Ui.cpp
|
||||||
@ -99,12 +100,13 @@ target_sources(
|
|||||||
src/requesthandler/rpc/RequestBatchRequest.h
|
src/requesthandler/rpc/RequestBatchRequest.h
|
||||||
src/requesthandler/rpc/RequestResult.cpp
|
src/requesthandler/rpc/RequestResult.cpp
|
||||||
src/requesthandler/rpc/RequestResult.h
|
src/requesthandler/rpc/RequestResult.h
|
||||||
src/requesthandler/types/RequestStatus.h
|
src/requesthandler/types/RequestBatchExecutionType.h
|
||||||
src/requesthandler/types/RequestBatchExecutionType.h)
|
src/requesthandler/types/RequestStatus.h)
|
||||||
|
|
||||||
target_sources(
|
target_sources(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE src/utils/Compat.cpp
|
PRIVATE # cmake-format: sortable
|
||||||
|
src/utils/Compat.cpp
|
||||||
src/utils/Compat.h
|
src/utils/Compat.h
|
||||||
src/utils/Crypto.cpp
|
src/utils/Crypto.cpp
|
||||||
src/utils/Crypto.h
|
src/utils/Crypto.h
|
||||||
@ -116,8 +118,8 @@ target_sources(
|
|||||||
src/utils/Obs_ArrayHelper.cpp
|
src/utils/Obs_ArrayHelper.cpp
|
||||||
src/utils/Obs_NumberHelper.cpp
|
src/utils/Obs_NumberHelper.cpp
|
||||||
src/utils/Obs_ObjectHelper.cpp
|
src/utils/Obs_ObjectHelper.cpp
|
||||||
src/utils/Obs_StringHelper.cpp
|
|
||||||
src/utils/Obs_SearchHelper.cpp
|
src/utils/Obs_SearchHelper.cpp
|
||||||
|
src/utils/Obs_StringHelper.cpp
|
||||||
src/utils/Obs_VolumeMeter.cpp
|
src/utils/Obs_VolumeMeter.cpp
|
||||||
src/utils/Obs_VolumeMeter.h
|
src/utils/Obs_VolumeMeter.h
|
||||||
src/utils/Obs_VolumeMeter_Helpers.h
|
src/utils/Obs_VolumeMeter_Helpers.h
|
||||||
@ -125,25 +127,28 @@ target_sources(
|
|||||||
src/utils/Platform.h
|
src/utils/Platform.h
|
||||||
src/utils/Utils.h)
|
src/utils/Utils.h)
|
||||||
|
|
||||||
target_sources(obs-websocket PRIVATE deps/qr/cpp/QrCode.cpp deps/qr/cpp/QrCode.hpp)
|
|
||||||
|
|
||||||
configure_file(src/plugin-macros.h.in plugin-macros.generated.h)
|
configure_file(src/plugin-macros.h.in plugin-macros.generated.h)
|
||||||
target_sources(obs-websocket PRIVATE plugin-macros.generated.h)
|
target_sources(obs-websocket PRIVATE plugin-macros.generated.h)
|
||||||
|
|
||||||
target_compile_definitions(
|
target_compile_definitions(
|
||||||
obs-websocket PRIVATE ASIO_STANDALONE $<$<BOOL:PLUGIN_TESTS>:PLUGIN_TESTS>
|
obs-websocket PRIVATE ASIO_STANDALONE $<$<BOOL:${PLUGIN_TESTS}>:PLUGIN_TESTS>
|
||||||
$<$<PLATFORM_ID:Windows>:_WEBSOCKETPP_CPP11_STL_> $<$<PLATFORM_ID:Windows>:_WIN32_WINNT=0x0603>)
|
$<$<PLATFORM_ID:Windows>:_WEBSOCKETPP_CPP11_STL_> $<$<PLATFORM_ID:Windows>:_WIN32_WINNT=0x0603>)
|
||||||
|
|
||||||
target_compile_options(
|
target_compile_options(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
PRIVATE
|
PRIVATE $<$<PLATFORM_ID:Windows>:/wd4267>
|
||||||
$<$<PLATFORM_ID:Windows>:/wd4267>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU,AppleClang,Clang>:-Wall>
|
||||||
$<$<PLATFORM_ID:Windows>:/wd4996>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU,AppleClang,Clang>:-Wno-error=float-conversion>
|
||||||
$<$<PLATFORM_ID:Darwin,Linux,FreeBSD>:-Wall>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU,AppleClang,Clang>:-Wno-error=shadow>
|
||||||
$<$<COMPILE_LANG_AND_ID:CXX,GNU,AppleClang,Clang>:-Wno-error=float-conversion;-Wno-error=shadow>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wno-error=format-overflow>
|
||||||
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wno-error=format-overflow;-Wno-error=int-conversion;-Wno-error=comment>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wno-error=int-conversion>
|
||||||
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-error=null-pointer-subtraction;-Wno-error=deprecated-declarations;-Wno-error=implicit-int-conversion;-Wno-error=shorten-64-to-32;-Wno-comma;-Wno-quoted-include-in-framework-header>
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wno-error=comment>
|
||||||
)
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-error=null-pointer-subtraction>
|
||||||
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-error=deprecated-declarations>
|
||||||
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-error=implicit-int-conversion>
|
||||||
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-error=shorten-64-to-32>
|
||||||
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-comma>
|
||||||
|
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:-Wno-quoted-include-in-framework-header>)
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
@ -155,7 +160,10 @@ target_link_libraries(
|
|||||||
Qt::Network
|
Qt::Network
|
||||||
nlohmann_json::nlohmann_json
|
nlohmann_json::nlohmann_json
|
||||||
Websocketpp::Websocketpp
|
Websocketpp::Websocketpp
|
||||||
Asio::Asio)
|
Asio::Asio
|
||||||
|
qrcodegencpp::qrcodegencpp)
|
||||||
|
|
||||||
|
target_link_options(obs-websocket PRIVATE $<$<PLATFORM_ID:Windows>:/IGNORE:4099>)
|
||||||
|
|
||||||
set_target_properties_obs(
|
set_target_properties_obs(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
|
@ -13,7 +13,7 @@ WebSocket API for OBS Studio.
|
|||||||
|
|
||||||
## Downloads
|
## Downloads
|
||||||
|
|
||||||
obs-websocket is now included by default with OBS Studio 28.0.0 and above. As such, **there should be no need to download obs-websocket if you have OBS Studio > 28.0.0.**
|
**obs-websocket is now included by default with OBS Studio 28.0.0 and above. As such, there should be no need to download obs-websocket if you have OBS Studio > 28.0.0.**
|
||||||
|
|
||||||
Binaries **for OBS Studio < 28.0.0** on Windows, MacOS, and Linux are available in the [Releases](https://github.com/obsproject/obs-websocket/releases) section.
|
Binaries **for OBS Studio < 28.0.0** on Windows, MacOS, and Linux are available in the [Releases](https://github.com/obsproject/obs-websocket/releases) section.
|
||||||
|
|
||||||
@ -65,12 +65,11 @@ We'd like to know what you're building with obs-websocket! If you do something i
|
|||||||
|
|
||||||
### Code Contributors
|
### Code Contributors
|
||||||
|
|
||||||
This project exists thanks to [all the people](graphs/contributors) who contribute. [Contribute](wiki/Contributing-Guidelines).
|
This project exists thanks to [all the people](https://github.com/obsproject/obs-websocket/graphs/contributors) who contribute. [Contribute Code](https://github.com/obsproject/obs-websocket/wiki/Contributing-Guidelines).
|
||||||
<a href="https://github.com/obsproject/obs-websocket/graphs/contributors"><img src="https://opencollective.com/obs-websocket-dev/contributors.svg?width=890&button=false" /></a>
|
|
||||||
|
|
||||||
### Financial Contributors
|
### Financial Contributors
|
||||||
|
|
||||||
Become a financial contributor and help us sustain our community. [Contribute](https://opencollective.com/obs-websocket-dev/contribute)
|
Become a financial contributor and help us sustain our community. [Contribute Financially](https://opencollective.com/obs-websocket-dev/contribute)
|
||||||
|
|
||||||
#### Individuals
|
#### Individuals
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
project(obs-websocket VERSION 5.2.3)
|
project(obs-websocket VERSION 5.3.5)
|
||||||
set(OBS_WEBSOCKET_RPC_VERSION 1)
|
set(OBS_WEBSOCKET_RPC_VERSION 1)
|
||||||
|
|
||||||
option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON)
|
option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON)
|
||||||
@ -8,11 +8,6 @@ if(NOT ENABLE_WEBSOCKET OR NOT ENABLE_UI)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Submodule deps check
|
|
||||||
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/deps/qr/cpp/QrCode.hpp)
|
|
||||||
obs_status(FATAL_ERROR "obs-websocket submodule deps not available.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Plugin tests flag
|
# Plugin tests flag
|
||||||
option(PLUGIN_TESTS "Enable plugin runtime tests" OFF)
|
option(PLUGIN_TESTS "Enable plugin runtime tests" OFF)
|
||||||
|
|
||||||
@ -22,6 +17,11 @@ find_qt(COMPONENTS Core Widgets Svg Network)
|
|||||||
# Find nlohmann JSON
|
# Find nlohmann JSON
|
||||||
find_package(nlohmann_json 3 REQUIRED)
|
find_package(nlohmann_json 3 REQUIRED)
|
||||||
|
|
||||||
|
# Find qrcodegencpp
|
||||||
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
||||||
|
find_package(qrcodegencpp REQUIRED)
|
||||||
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
|
||||||
|
|
||||||
# Find WebSocket++
|
# Find WebSocket++
|
||||||
find_package(Websocketpp 0.8 REQUIRED)
|
find_package(Websocketpp 0.8 REQUIRED)
|
||||||
|
|
||||||
@ -67,7 +67,6 @@ target_sources(
|
|||||||
src/websocketserver/WebSocketServer.cpp
|
src/websocketserver/WebSocketServer.cpp
|
||||||
src/websocketserver/WebSocketServer_Protocol.cpp
|
src/websocketserver/WebSocketServer_Protocol.cpp
|
||||||
src/websocketserver/WebSocketServer.h
|
src/websocketserver/WebSocketServer.h
|
||||||
src/websocketserver/rpc/WebSocketSession.cpp
|
|
||||||
src/websocketserver/rpc/WebSocketSession.h
|
src/websocketserver/rpc/WebSocketSession.h
|
||||||
src/websocketserver/types/WebSocketCloseCode.h
|
src/websocketserver/types/WebSocketCloseCode.h
|
||||||
src/websocketserver/types/WebSocketOpCode.h
|
src/websocketserver/types/WebSocketOpCode.h
|
||||||
@ -128,9 +127,7 @@ target_sources(
|
|||||||
src/utils/Platform.h
|
src/utils/Platform.h
|
||||||
src/utils/Compat.cpp
|
src/utils/Compat.cpp
|
||||||
src/utils/Compat.h
|
src/utils/Compat.h
|
||||||
src/utils/Utils.h
|
src/utils/Utils.h)
|
||||||
deps/qr/cpp/QrCode.cpp
|
|
||||||
deps/qr/cpp/QrCode.hpp)
|
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
@ -142,7 +139,8 @@ target_link_libraries(
|
|||||||
Qt::Network
|
Qt::Network
|
||||||
nlohmann_json::nlohmann_json
|
nlohmann_json::nlohmann_json
|
||||||
Websocketpp::Websocketpp
|
Websocketpp::Websocketpp
|
||||||
Asio::Asio)
|
Asio::Asio
|
||||||
|
qrcodegencpp::qrcodegencpp)
|
||||||
|
|
||||||
target_compile_features(obs-websocket PRIVATE cxx_std_17)
|
target_compile_features(obs-websocket PRIVATE cxx_std_17)
|
||||||
|
|
||||||
@ -159,6 +157,7 @@ endif()
|
|||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_compile_options(obs-websocket PRIVATE /wd4267 /wd4996)
|
target_compile_options(obs-websocket PRIVATE /wd4267 /wd4996)
|
||||||
|
target_link_options(obs-websocket PRIVATE "LINKER:/IGNORE:4099")
|
||||||
else()
|
else()
|
||||||
target_compile_options(
|
target_compile_options(
|
||||||
obs-websocket
|
obs-websocket
|
||||||
|
35
data/locale/af-ZA.ini
Normal file
35
data/locale/af-ZA.ini
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
OBSWebSocket.Plugin.Description="Afstandbeheer van OBS deur WebSocket"
|
||||||
|
OBSWebSocket.Settings.DialogTitle="WebSocket-bedienerinstellings"
|
||||||
|
OBSWebSocket.Settings.PluginSettingsTitle="Inpropinstellings"
|
||||||
|
OBSWebSocket.Settings.ServerEnable="Aktiveer WebSocket-diens"
|
||||||
|
OBSWebSocket.Settings.ServerSettingsTitle="Bedienerinstellings"
|
||||||
|
OBSWebSocket.Settings.Password="Bedienerwagwoord"
|
||||||
|
OBSWebSocket.Settings.GeneratePassword="Genereer wagwoord"
|
||||||
|
OBSWebSocket.Settings.ServerPort="Bedienerpoort"
|
||||||
|
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Waarskuwing: Tans regstreeks"
|
||||||
|
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Dit lyk of ’n afvoer (stroom, opname, ens.) tans aktief is."
|
||||||
|
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Is u seker u wil u verbindingsinligting laat sien?"
|
||||||
|
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Waarskuwing: potensiële beveiligingsprobleem"
|
||||||
|
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websok bewaar die bedienerwagwoord as platteks. Dit word ten sterkste aanbeveel om ’n wagwoord wat deur obs-websok geskep is te gebruik."
|
||||||
|
OBSWebSocket.Settings.Save.UserPasswordWarningInfoText="Is u seker u wil u eie wagwoord gebruik?"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="Fout: Ongeldige opstalling"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="U moet ’n wagwoord van meet as 6 karakters gebruik."
|
||||||
|
OBSWebSocket.SessionTable.Title="Gekoppelde WebSocket-sessies"
|
||||||
|
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Afstandsadres"
|
||||||
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Sessieduur"
|
||||||
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Boodskappe In/Uit"
|
||||||
|
OBSWebSocket.SessionTable.IdentifiedTitle="Geïdentifiseer"
|
||||||
|
OBSWebSocket.SessionTable.KickButtonColumnTitle="Verwyder?"
|
||||||
|
OBSWebSocket.SessionTable.KickButtonText="Verwyder"
|
||||||
|
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket-verbindingsinligting"
|
||||||
|
OBSWebSocket.ConnectInfo.CopyText="Kopieer"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerIp="Bediener-IP (beste skatting)"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPort="Bedienerpoort"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPassword="Bedienerwagwoord"
|
||||||
|
OBSWebSocket.ConnectInfo.QrTitle="Koppel QR"
|
||||||
|
OBSWebSocket.TrayNotification.Identified.Title="Nuwe WebSocket-koppeling"
|
||||||
|
OBSWebSocket.TrayNotification.Identified.Body="Kliënt %1 geïdentifiseer."
|
||||||
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket-waarmerkfout"
|
||||||
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Kliënt %1 kon nie waarmerk nie."
|
||||||
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-kliënt is ontkoppel"
|
||||||
|
OBSWebSocket.TrayNotification.Disconnected.Body="Kliënt %1 is ontkoppel."
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="فشل مصادقة We
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="فشل العميل %1 في المصادقة."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="فشل العميل %1 في المصادقة."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="تم قطع اتصال عميل WebSocket"
|
OBSWebSocket.TrayNotification.Disconnected.Title="تم قطع اتصال عميل WebSocket"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="العميل %1 قطع الاتصال."
|
OBSWebSocket.TrayNotification.Disconnected.Body="العميل %1 قطع الاتصال."
|
||||||
OBSWebSocket.Server.StartFailed.Title="فشل خادم WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="فشل تشغيل خادم WebSocket. قد يكون منفذ TCP %1 قيد الاستخدام في تطبيق آخر على هذا النظام. حاول تعيين منفذ TCP مختلف في إعدادات خادم WebSocket، أو إيقاف أي تطبيق يمكن أن يستخدم هذا المنفذ.\n رسالة الخطأ: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Ha fallat l'autenticac
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Ha fallat l'autenticació del client %1."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Ha fallat l'autenticació del client %1."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Client desconnectat del servidor WebSocket"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Client desconnectat del servidor WebSocket"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 desconnectat."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 desconnectat."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Ha fallat el servidor WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="El servidor WebSocket ha fallat en iniciar. Potser el port TCP %1 ja està en ús per altre programa del sistema. Proveu un port diferent a la configuració del servidor WebSocket, o atureu qualsevol altra aplicació que pugui utilitzar aquest port.\n Missatge d'error: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Chyba přihlášení k
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 nebyl přihlášen"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 nebyl přihlášen"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket klient se odpojil"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket klient se odpojil"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 se odpojil."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 se odpojil."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Chyba WebSocket serveru"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket server se nepodařilo spustit. TCP port %1 může být používán jinou aplikací. Zkuste nastavit jiný TCP port v nastavení WebSocket serveru nebo zavřete aplikaci, která může používat tento port.\n Chybová zpráva: %2"
|
|
||||||
|
@ -38,5 +38,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket godkendelses
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klienten %1 kunne ikke godkendes."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klienten %1 kunne ikke godkendes."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-klient frakoblet"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-klient frakoblet"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 frakoblet."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 frakoblet."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket-serverfejl"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket-serveren started ikke. TCP-port %1 bruges måske allerede på dette system af et andet program. Prøv at angive en anden TCP-port i WebSocket-serverindstillingerne, eller stop ethvert program, der kan bruge denne port.\n Fejlmeddelelse: %2"
|
|
||||||
|
@ -4,7 +4,7 @@ OBSWebSocket.Settings.PluginSettingsTitle="Plugineinstellungen"
|
|||||||
OBSWebSocket.Settings.ServerEnable="WebSocket-Server aktivieren"
|
OBSWebSocket.Settings.ServerEnable="WebSocket-Server aktivieren"
|
||||||
OBSWebSocket.Settings.AlertsEnable="Warnungen im Infobereich aktivieren"
|
OBSWebSocket.Settings.AlertsEnable="Warnungen im Infobereich aktivieren"
|
||||||
OBSWebSocket.Settings.DebugEnable="Debug-Logging aktivieren"
|
OBSWebSocket.Settings.DebugEnable="Debug-Logging aktivieren"
|
||||||
OBSWebSocket.Settings.DebugEnableHoverText="Aktiviert Debug-Logging für die aktuelle OBS-Instanz.\nVerwenden Sie „--websocket_debug“, damit die Option beim Laden aktiviert wird."
|
OBSWebSocket.Settings.DebugEnableHoverText="Aktiviert Debug-Logging für die aktuelle OBS-Instanz.\nVerwenden Sie „--websocket_debug“, damit die Option beim Starten aktiviert wird."
|
||||||
OBSWebSocket.Settings.ServerSettingsTitle="Servereinstellungen"
|
OBSWebSocket.Settings.ServerSettingsTitle="Servereinstellungen"
|
||||||
OBSWebSocket.Settings.AuthRequired="Authentifizierung aktivieren"
|
OBSWebSocket.Settings.AuthRequired="Authentifizierung aktivieren"
|
||||||
OBSWebSocket.Settings.Password="Serverpasswort"
|
OBSWebSocket.Settings.Password="Serverpasswort"
|
||||||
@ -28,7 +28,7 @@ OBSWebSocket.SessionTable.KickButtonColumnTitle="Entfernen?"
|
|||||||
OBSWebSocket.SessionTable.KickButtonText="Entfernen"
|
OBSWebSocket.SessionTable.KickButtonText="Entfernen"
|
||||||
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket-Verbindungsinformationen"
|
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket-Verbindungsinformationen"
|
||||||
OBSWebSocket.ConnectInfo.CopyText="Kopieren"
|
OBSWebSocket.ConnectInfo.CopyText="Kopieren"
|
||||||
OBSWebSocket.ConnectInfo.ServerIp="Server-IP (geschätzt)"
|
OBSWebSocket.ConnectInfo.ServerIp="Server-IP (Geschätzt)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="Serverport"
|
OBSWebSocket.ConnectInfo.ServerPort="Serverport"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="Serverpasswort"
|
OBSWebSocket.ConnectInfo.ServerPassword="Serverpasswort"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="Authentifizierung deaktiviert"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="Authentifizierung deaktiviert"
|
||||||
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket-Authentifizi
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 konnte sich nicht authentifizieren."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 konnte sich nicht authentifizieren."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-Client getrennt"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-Client getrennt"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 getrennt."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 getrennt."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket-Serverfehler"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Der WebSocket-Server konnte nicht gestartet werden, da der TCP-Port %1 möglicherweise benutzt wird. Versuchen Sie, den Port in den WebSocket-Servereinstellungen zu ändern oder Anwendungen zu schließen, die diesen verwenden könnten.\nFehler: %2"
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
OBSWebSocket.Plugin.Description="Απομακρυσμένος έλεγχος του OBS Studio μέσω WebSocket"
|
OBSWebSocket.Plugin.Description="Απομακρυσμένος έλεγχος του OBS Studio μέσω WebSocket"
|
||||||
|
OBSWebSocket.Settings.DialogTitle="Ρυθμίσεις Διακομιστή WebSocket"
|
||||||
OBSWebSocket.Settings.PluginSettingsTitle="Ρυθμίσεις Προσθέτων"
|
OBSWebSocket.Settings.PluginSettingsTitle="Ρυθμίσεις Προσθέτων"
|
||||||
OBSWebSocket.Settings.ServerEnable="Ενεργοποίηση διακομιστή WebSocket"
|
OBSWebSocket.Settings.ServerEnable="Ενεργοποίηση διακομιστή WebSocket"
|
||||||
OBSWebSocket.Settings.AlertsEnable="Ενεργοποίηση Ειδοποιήσεων στο System Tray"
|
OBSWebSocket.Settings.AlertsEnable="Ενεργοποίηση Ειδοποιήσεων στο System Tray"
|
||||||
@ -38,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Αποτυχία Τα
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Αποτυχία ταυτοποίησης του πελάτη %1."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Αποτυχία ταυτοποίησης του πελάτη %1."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Αποσυνδέθηκε ο Πελάτης του WebSocket"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Αποσυνδέθηκε ο Πελάτης του WebSocket"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Ο πελάτης %1 αποσυνδέθηκε."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Ο πελάτης %1 αποσυνδέθηκε."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Αποτυχία Διακομιστή WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Ο διακομιστής WebSocket απέτυχε να ξεκινήσει. Η θύρα %1 TCP μπορεί ήδη να χρησιμοποιείται από μια άλλη εφαρμογή σε αυτό το σύστημα. Δοκιμάστε να ορίσετε μια διαφορετική θύρα TCP στις ρυθμίσεις διακομιστή WebSocket ή να σταματήσετε οποιαδήποτε εφαρμογή που θα μπορούσε να χρησιμοποιήσει αυτή τη θύρα.\n Μήνυμα σφάλματος: %2"
|
|
||||||
|
1
data/locale/en-GB.ini
Normal file
1
data/locale/en-GB.ini
Normal file
@ -0,0 +1 @@
|
|||||||
|
#
|
@ -45,6 +45,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket Authenticati
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 failed to authenticate."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 failed to authenticate."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Client Disconnected"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Client Disconnected"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 disconnected."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 disconnected."
|
||||||
|
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket Server Failure"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="The WebSocket server failed to start. TCP port %1 may already be in use elsewhere on this system by another application. Try setting a different TCP port in the WebSocket server settings, or stop any application that could be using this port.\n Error message: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Fallo de autenticació
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="El cliente %1 no se pudo autenticar."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="El cliente %1 no se pudo autenticar."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket desconectado"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket desconectado"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desconectado."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desconectado."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Fallo del servidor WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="El servidor WebSocket no pudo iniciarse. El puerto TCP %1 puede que ya esté en uso en otro lugar de este sistema por otra aplicación. Intente configurar un puerto TCP diferente en la configuración del servidor WebSocket o detenga cualquier aplicación que pueda estar usando este puerto.\n Mensaje de error: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket autentimise
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Kliendi %1 autentimine ebaõnnestus."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Kliendi %1 autentimine ebaõnnestus."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket kliendi ühendus katkenud"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket kliendi ühendus katkenud"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Kliendi %1 ühendus katkenud."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Kliendi %1 ühendus katkenud."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket serveri tõrge"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket'i serveri käivitamine ebaõnnestus. TCP-port %1 võib olla juba mujal selles süsteemis mõne teise rakenduse poolt kasutusel. Proovige määrata WebSocket'i serveri seadetes teine TCP-port või peatada rakendus, mis võib seda porti kasutada.\n Veateade: %2"
|
|
||||||
|
@ -38,5 +38,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket Autentikazio
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 bezeroak autentifikatzen huts egin du."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 bezeroak autentifikatzen huts egin du."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Bezeroa deskonektatu da"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Bezeroa deskonektatu da"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="%1 bezeroa deskonektatu da."
|
OBSWebSocket.TrayNotification.Disconnected.Body="%1 bezeroa deskonektatu da."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket Zerbitzari hutsegitea"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket zerbitzaria ez da hasi. %1 TCP portua agian dagoeneko beste aplikazio batek erabiltzen ari du sistema honetan. Saiatu beste TCP portu bat konfiguratzen WebSocket zerbitzariaren konfigurazioan, edo portu hori erabiltzen ari den edozein aplikazio geldiarazi.\nErrore-mezua: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="خرابی تأیید
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="سرویس گیرنده %1 احراز هویت نشد."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="سرویس گیرنده %1 احراز هویت نشد."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="سرویس گیرنده سوکت وب قطع شد"
|
OBSWebSocket.TrayNotification.Disconnected.Title="سرویس گیرنده سوکت وب قطع شد"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="سرویس گیرنده %1 قطع شد."
|
OBSWebSocket.TrayNotification.Disconnected.Body="سرویس گیرنده %1 قطع شد."
|
||||||
OBSWebSocket.Server.StartFailed.Title="خرابی سرور سوکت وب"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="سرور WebSocket راهاندازی نشد. درگاه TCP % 1 ممکن است قبلاً در جای دیگری در این سیستم توسط برنامه دیگری استفاده شده باشد. یک پورت TCP دیگر را در تنظیمات سرور WebSocket تنظیم کنید، یا هر برنامهای را که میتواند از این پورت استفاده کند متوقف کنید.\n پیام خطا: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket-tunnistusvir
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Asiakas %1 todennus epäonnistui."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Asiakas %1 todennus epäonnistui."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-asiakas katkaisi yhteyden"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-asiakas katkaisi yhteyden"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Asiakas %1 on katkaistu."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Asiakas %1 on katkaistu."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket-palvelinvirhe"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket-palvelin ei käynnistynyt. TCP-portti %1 saattaa olla jo toisen sovelluksen käytössä. Yritä määrittää toinen TCP-portti WebSocket-palvelimen asetuksissa tai lopeta kaikki sovellukset, jotka saattavat käyttää tätä porttia.\nVirheilmoitus: %2"
|
|
||||||
|
@ -35,5 +35,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Nabigo sa Pagpapatunay
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Nabigo ang kliyenteng %1 na patotohanan."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Nabigo ang kliyenteng %1 na patotohanan."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Nadiskonekta ang WebSocket Client"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Nadiskonekta ang WebSocket Client"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Nadiskonekta ang kliyenteng %1."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Nadiskonekta ang kliyenteng %1."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Nabigo ng WebSocket Server"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Nabigong magsimula ang WebSocket server. Ang TCP port %1 ay maaaring ginagamit na sa ibang lugar sa system na ito ng isa pang application. Subukang magtakda ng ibang TCP port sa mga setting ng WebSocket server, o ihinto ang anumang application na maaaring gumagamit ng port na ito.\n Mensahe ng error: %2"
|
|
||||||
|
@ -16,9 +16,9 @@ OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Il semble qu'une sortie (st
|
|||||||
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Êtes-vous sûr de vouloir afficher vos informations de connexion ?"
|
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Êtes-vous sûr de vouloir afficher vos informations de connexion ?"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Avertissement : Problème potentiel de sécurité"
|
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Avertissement : Problème potentiel de sécurité"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket enregistre le mot de passe du serveur en texte brut. L'utilisation d'un mot de passe généré par obs-websocket est fortement recommandée."
|
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket enregistre le mot de passe du serveur en texte brut. L'utilisation d'un mot de passe généré par obs-websocket est fortement recommandée."
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningInfoText="Êtes-vous sûr de vouloir utiliser votre propre mot de passe ?"
|
OBSWebSocket.Settings.Save.UserPasswordWarningInfoText="Êtes-vous sûr(e) de vouloir utiliser votre propre mot de passe ?"
|
||||||
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="Erreur : Configuration invalide"
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="Erreur : Configuration invalide"
|
||||||
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="Vous devez utiliser un mot de passe d'au moins 6 caractères"
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="Vous devez utiliser un mot de passe de 6 caractères ou plus."
|
||||||
OBSWebSocket.SessionTable.Title="Sessions WebSocket connectées"
|
OBSWebSocket.SessionTable.Title="Sessions WebSocket connectées"
|
||||||
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Adresse distante"
|
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Adresse distante"
|
||||||
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Durée de session"
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Durée de session"
|
||||||
@ -30,7 +30,7 @@ OBSWebSocket.ConnectInfo.DialogTitle="Informations de connexion WebSocket"
|
|||||||
OBSWebSocket.ConnectInfo.CopyText="Copier"
|
OBSWebSocket.ConnectInfo.CopyText="Copier"
|
||||||
OBSWebSocket.ConnectInfo.ServerIp="IP du serveur (meilleure estimation)"
|
OBSWebSocket.ConnectInfo.ServerIp="IP du serveur (meilleure estimation)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="Port serveur"
|
OBSWebSocket.ConnectInfo.ServerPort="Port serveur"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="Mot de passe serveur"
|
OBSWebSocket.ConnectInfo.ServerPassword="Mot de passe du serveur"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Authentification désactivée]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Authentification désactivée]"
|
||||||
OBSWebSocket.ConnectInfo.QrTitle="QR code de connexion"
|
OBSWebSocket.ConnectInfo.QrTitle="QR code de connexion"
|
||||||
OBSWebSocket.TrayNotification.Identified.Title="Nouvelle connexion WebSocket"
|
OBSWebSocket.TrayNotification.Identified.Title="Nouvelle connexion WebSocket"
|
||||||
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Échec de l'authentifi
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Échec d'authentification du client %1."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Échec d'authentification du client %1."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket déconnecté"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket déconnecté"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 déconnecté."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 déconnecté."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Échec du serveur WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Le serveur WebSocket n'a pas pu démarrer. Le port TCP %1 est peut être déjà utilisé par une autre application ailleurs sur ce système. Essayez de définir un port TCP différent dans les paramètres du serveur WebSocket, ou arrêtez toute application qui pourrait utiliser ce port.\n Message d'erreur : %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="אימות WebSocket
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="לקוח %1 נכשל באימות"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="לקוח %1 נכשל באימות"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="לקוח WebSocket התנתק"
|
OBSWebSocket.TrayNotification.Disconnected.Title="לקוח WebSocket התנתק"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="לקוח %1 התנתק."
|
OBSWebSocket.TrayNotification.Disconnected.Body="לקוח %1 התנתק."
|
||||||
OBSWebSocket.Server.StartFailed.Title="שגיאת שרת WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="שרת ה-WebSocket נכשל בהפעלה. ייתכן שפורט TCP %1 כבר נמצא בשימוש במקום אחר במערכת זו על ידי יישום אחר. יש לנסות להגדיר פורט TCP אחר בהגדרות שרת WebSocket, או לעצור כל יישום שעשוי להשתמש בפורט זה.\nהודעת שגיאה: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket सत्य
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="क्लाइंट %1प्रमाणित करने में विफल रहा."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="क्लाइंट %1प्रमाणित करने में विफल रहा."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="वेबसॉकेट क्लाइंट डिस्कनेक्ट हो गया"
|
OBSWebSocket.TrayNotification.Disconnected.Title="वेबसॉकेट क्लाइंट डिस्कनेक्ट हो गया"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="क्लाइंट %1 डिस्कनेक्ट हो गया."
|
OBSWebSocket.TrayNotification.Disconnected.Body="क्लाइंट %1 डिस्कनेक्ट हो गया."
|
||||||
OBSWebSocket.Server.StartFailed.Title="वेबसॉकेट सर्वर विफलता"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket सर्वर प्रारंभ करने में विफल रहा. TCP पोर्ट %1 पहले से ही इस सिस्टम पर किसी अन्य एप्लिकेशन द्वारा कहीं और उपयोग में हो सकता है. वेबसॉकेट सर्वर सेटिंग्स में एक अलग TCP पोर्ट सेट करने का प्रयास करें, या इस पोर्ट का उपयोग करने वाले किसी भी एप्लिकेशन को रोकें.\n त्रुटि संदेश : %2"
|
|
||||||
|
@ -1 +1,10 @@
|
|||||||
OBSWebSocket.Settings.DialogTitle="Postavke servera WebSocket"
|
OBSWebSocket.Settings.DialogTitle="Postavke servera WebSocket"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="Pogreška: Neispravna konfiguracija"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="Lozinka mora sadržavati barem 6 znakova."
|
||||||
|
OBSWebSocket.SessionTable.Title="Spojene sesije WebSocketa"
|
||||||
|
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Udaljena adresa"
|
||||||
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Trajanje sesije"
|
||||||
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Ulaz/izlaz poruka"
|
||||||
|
OBSWebSocket.ConnectInfo.CopyText="Kopiraj"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPort="Vrata servera"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPassword="Lozinka servera"
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket hitelesíté
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="A(z) %1 kliens hitelesítése sikertelen."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="A(z) %1 kliens hitelesítése sikertelen."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="A WebSocket-kliens bontotta a kapcsolatot"
|
OBSWebSocket.TrayNotification.Disconnected.Title="A WebSocket-kliens bontotta a kapcsolatot"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="A(z) %1 kliens bontotta a kapcsolatot"
|
OBSWebSocket.TrayNotification.Disconnected.Body="A(z) %1 kliens bontotta a kapcsolatot"
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket kiszolgálóhiba"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="A WebSocket-kiszolgáló nem tudott elindulni. A(z) %1 TCP-portot lehet, hogy már egy másik alkalmazás használja. Próbáljon eltérő TCP-portot beállítani a WebSocket-kiszolgáló beállítasaiban, vagy állítson le minden olyan alkalmazást, amely ezt a portot használhatja.\n Hibaüzenet: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket վավերա
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 հաճախորդը չհաջողվեց նույնականացնել:"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 հաճախորդը չհաջողվեց նույնականացնել:"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket հաճախորդն անջատված է"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket հաճախորդն անջատված է"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="%1 հաճախորդն անջատվել է:"
|
OBSWebSocket.TrayNotification.Disconnected.Body="%1 հաճախորդն անջատվել է:"
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket սերվերի սխալ"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Չհաջողվեց գործարկել WebSockt սերվերը: Հնարավոր է, որ TCP %1 պորտն արդեն օգտագործվում է մեկ այլ հավելվածի կողմից: Փորձեք կարգավորել այլ TCP պորտ WebSocket սերվերի կարգավորումներում կամ դադարեցնել ցանկացած ծրագիր, որը կարող է օգտագործել այս պորտը:\n Սխալի հաղորդագրություն՝ %2։"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Autentikasi WebSocket
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klien %1 gagal mengautentikasi."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klien %1 gagal mengautentikasi."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Klien WebSocket Terputus"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Klien WebSocket Terputus"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klien %1 terputus."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klien %1 terputus."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Server WebSocket Gagal"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Server WebSocket gagal untuk memulai. Port TCP %1 mungkin sudah digunakan siapa pun pada sistem ini oleh aplikasi lain. Coba atur port TCP yang berbeda di pengaturan server WebSocket, atau hentikan aplikasi apapun yang bisa menggunakan port ini.\n Pesan galat: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Errore di autenticazio
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Il client %1 non è riuscito ad autenticarsi."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Il client %1 non è riuscito ad autenticarsi."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket disconnesso"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket disconnesso"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 disconnesso."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 disconnesso."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Errore del server WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Impossibile avviare il server WebSocket.\nLa porta TCP %1 potrebbe essere già usata in questo sistema da un'altra applicazione.\nProva a impostare nelle impostazioni del server WebSocket una porta TCP diversa oppure interrompi qualsiasi applicazione che potrebbe usare questa porta.\nMessaggio di errore: %2."
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket認証失敗"
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="クライアント %1 の認証に失敗しました。"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="クライアント %1 の認証に失敗しました。"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocketクライアントが切断されました"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocketクライアントが切断されました"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="クライアント %1 が切断されました。"
|
OBSWebSocket.TrayNotification.Disconnected.Body="クライアント %1 が切断されました。"
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocketサーバー障害"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocketサーバーの起動に失敗しました。TCPポート %1 はこのシステム上の他の場所で別のアプリケーションによって既に使用されている可能性があります。 WebSocketサーバーの設定で別のTCPポートを設定するか、このポートを使用している可能性のあるアプリケーションを終了してください。\n エラーメッセージ: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket-შესვ
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="კლიენტი %1 ვერ დამოწმდა."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="კლიენტი %1 ვერ დამოწმდა."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-კლიენტი გამოითიშა"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-კლიენტი გამოითიშა"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="კლიენტი %1 გამოთიშეულია."
|
OBSWebSocket.TrayNotification.Disconnected.Body="კლიენტი %1 გამოთიშეულია."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket-სერვერის ხარვეზი"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket-სერვერი ვერ ამუშავდა. TCP-პორტი %1 შეიძლება უკვე გამოიყენება სისტემაში სხვა პროგამის მიერ. მოსინჯეთ განსხვავებული TCP-პორტი WebSocket-სერვერის პარამეტრებში ან გათიშეთ ყველა პროგრამა, რომელიც ამ პორტს უნდა იყენებდეს.\n შეცდომის აღწერა: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Rastandina WebSocket t
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Rastandina rajegir %1 têk çû."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Rastandina rajegir %1 têk çû."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Girêdana rajegira WebSocket qut bû"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Girêdana rajegira WebSocket qut bû"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Girêdana rajegir %1 qut bû."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Girêdana rajegir %1 qut bû."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Rajekara WebSocket têk çû"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Destpêkirina rajekara WebSocket têk çû. Dibe ku dergeha TCP %1 jixwe ji hêla sepaneke din ve li cîhek din li ser vê pergalê were bikaranîn. Kontrol bike ku di sazkariyên rajekara WebSocket de dergehek TCP a cuda saz bikî, an jî sepanek ku dikare vê dergehê bi kar bîne rawestîne.\n Peyama çewtiyê: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket 인증 실
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="클라이언트 %1 인증 실패."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="클라이언트 %1 인증 실패."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 클라이언트 연결 해제됨"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 클라이언트 연결 해제됨"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="클라이언트 %1 연결 해제됨."
|
OBSWebSocket.TrayNotification.Disconnected.Body="클라이언트 %1 연결 해제됨."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket 서버 기동 실패"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket 서버를 시작하는 데 실패했습니다. %1 TCP 포트가 타 응용 프로그램에 의해 이 시스템에서 이미 사용 중일 수 있습니다. WebSocket 서버 설정에서 다른 TCP 포트로 변경하거나 이 포트를 사용하는 응용 프로그램을 종료하십시오.\n 오류 메시지: %2"
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
OBSWebSocket.Plugin.Description="Kawalan-jauh OBS Studio melalui WebSocket"
|
OBSWebSocket.Plugin.Description="Kawalan-jauh OBS Studio melalui WebSocket"
|
||||||
|
OBSWebSocket.Settings.DialogTitle="Tetapan Pelayan WebSocket"
|
||||||
OBSWebSocket.Settings.PluginSettingsTitle="Tetapan Pemalam"
|
OBSWebSocket.Settings.PluginSettingsTitle="Tetapan Pemalam"
|
||||||
OBSWebSocket.Settings.ServerEnable="Benarkan pelayan WebSocket"
|
OBSWebSocket.Settings.ServerEnable="Benarkan pelayan WebSocket"
|
||||||
OBSWebSocket.Settings.AlertsEnable="Benarkan Amaran Talam Sistem"
|
OBSWebSocket.Settings.AlertsEnable="Benarkan Amaran Talam Sistem"
|
||||||
@ -38,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Kegagalan Pengesahihan
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klien %1 gagal disahihkan."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klien %1 gagal disahihkan."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Klien WebSocket Terputus"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Klien WebSocket Terputus"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klien %1 terputus."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klien %1 terputus."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Kegagalan Pelayan WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Pelayan WebSocket gagal dimulakan. Port TCP %1 mungkin telah digunakan di tempat lain dalam sistem ini oleh aplikasi lain. Cuba tetapkan port TCP lain dalam tetapan pelayan WebSocket, atau hentikan mana-mana aplikasi yang guna port tersebut.\n Mesej ralat: %2"
|
|
||||||
|
@ -1,2 +1,25 @@
|
|||||||
|
OBSWebSocket.Settings.DialogTitle="WebSocket-tjenerinnstillinger"
|
||||||
|
OBSWebSocket.Settings.PluginSettingsTitle="Utvidelsesinnstillinger"
|
||||||
|
OBSWebSocket.Settings.ServerSettingsTitle="Tjenerinnstillinger"
|
||||||
|
OBSWebSocket.Settings.AuthRequired="Skru på autentisering"
|
||||||
OBSWebSocket.Settings.Password="Server Passord"
|
OBSWebSocket.Settings.Password="Server Passord"
|
||||||
OBSWebSocket.Settings.GeneratePassword="Generer Passord"
|
OBSWebSocket.Settings.GeneratePassword="Generer Passord"
|
||||||
|
OBSWebSocket.Settings.ShowConnectInfo="Vis tilkoblingsinfo"
|
||||||
|
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Advarsel: For øyeblikket på direktesending"
|
||||||
|
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Advarsel: Potensielt sikkerhetsproblem"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="Feil: Ugyldig konfigurasjon"
|
||||||
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="Du må bruke et passord på minst 6 tegn."
|
||||||
|
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Ekstern adresse"
|
||||||
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Øktens varighet"
|
||||||
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Innboks/Utboks"
|
||||||
|
OBSWebSocket.SessionTable.IdentifiedTitle="Identifisert"
|
||||||
|
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket-tilkoblingsinfo"
|
||||||
|
OBSWebSocket.ConnectInfo.CopyText="Kopier"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerIp="Tjenerens IP (beste gjetning)"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPort="Tjenerport"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerPassword="Tjenerpassord"
|
||||||
|
OBSWebSocket.ConnectInfo.QrTitle="QR-tilkobling"
|
||||||
|
OBSWebSocket.TrayNotification.Identified.Title="Ny WebSocket-tilkobling"
|
||||||
|
OBSWebSocket.TrayNotification.Identified.Body="Klient %1 er identifisert."
|
||||||
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-klient koblet fra"
|
||||||
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 koblet fra."
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket Authenticati
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Authenticatie van client %1 mislukt."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Authenticatie van client %1 mislukt."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Client losgekoppeld"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket Client losgekoppeld"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 ontkoppeld."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Client %1 ontkoppeld."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket Server fout"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="De WebSocket server kon niet worden gestart. TCP-poort %1 is mogelijk al in gebruik op dit systeem door een andere toepassing. Probeer een andere TCP-poort in te stellen in de WebSocket server-instellingen, of stop elke toepassing die deze poort zou kunnen gebruiken.\n Foutmelding: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Błąd uwierzytelniani
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 nie został uwierzytelniony."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 nie został uwierzytelniony."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Klient WebSocket odłączony"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Klient WebSocket odłączony"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 odłączony."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 odłączony."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Błąd serwera WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Nie udało się uruchomić serwera WebSocket. Port TCP %1 może być już używany w innym miejscu tego systemu przez inną aplikację. Spróbuj ustawić inny port TCP w ustawieniach serwera WebSocket lub zatrzymaj aplikację, która może korzystać z tego portu.\n Komunikat błędu: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Falha na Autenticaçã
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Cliente %1 falhou na autenticação."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Cliente %1 falhou na autenticação."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket Desconectado"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket Desconectado"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desconectado."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desconectado."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Falha no Servidor WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="O servidor de WebSocket falhou ao iniciar. A porta TCP %1 já pode estar em uso em outro lugar neste sistema por outro aplicativo. Tente definir uma porta TCP diferente nas configurações do servidor de WebSocket, ou pare qualquer aplicativo que possa estar usando essa porta.\n Mensagem de erro: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Falha na autenticaçã
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Cliente %1 falhou na autenticação."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Cliente %1 falhou na autenticação."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket desligado"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Cliente WebSocket desligado"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desligado."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Cliente %1 desligado."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Falha no servidor WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="O servidor de WebSocket falhou ao iniciar. A porta TCP %1 pode já estar em uso noutro local deste sistema por outra aplicação. Tente definir uma porta TCP diferente nas configurações do servidor de WebSocket, ou pare qualquer aplicação que possa estar a usar essa porta.\n Mensagem de erro: %2"
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
OBSWebSocket.Plugin.Description="Control de la distanță pentru OBS Studio prin WebSocket"
|
OBSWebSocket.Plugin.Description="Control de la distanță pentru OBS Studio prin WebSocket"
|
||||||
OBSWebSocket.Settings.DialogTitle="Setări ale server-ului WebSocket"
|
OBSWebSocket.Settings.DialogTitle="Setări pentru serverul WebSocket"
|
||||||
OBSWebSocket.Settings.PluginSettingsTitle="Setări pentru plugin"
|
OBSWebSocket.Settings.PluginSettingsTitle="Setări pentru plugin"
|
||||||
OBSWebSocket.Settings.ServerEnable="Activează serverul WebSocket"
|
OBSWebSocket.Settings.ServerEnable="Activează serverul WebSocket"
|
||||||
OBSWebSocket.Settings.AlertsEnable="Activează alertele din bara de sistem"
|
OBSWebSocket.Settings.AlertsEnable="Activează alertele din bara de sistem"
|
||||||
OBSWebSocket.Settings.DebugEnable="Activează jurnalizarea de depanare"
|
OBSWebSocket.Settings.DebugEnable="Activează jurnalizarea pentru depanare"
|
||||||
OBSWebSocket.Settings.DebugEnableHoverText="Activează jurnalizarea de depanare pentru instanța actuală de OBS. Nu persistă la încărcare.\nFolosește --websocket_debug pentru a activa la încărcare."
|
OBSWebSocket.Settings.DebugEnableHoverText="Activează jurnalizarea pentru depanare în cazul instanței actuale de OBS. Nu persistă la încărcare.\nFolosește --websocket_debug pentru a activa la încărcare."
|
||||||
OBSWebSocket.Settings.ServerSettingsTitle="Setări server"
|
OBSWebSocket.Settings.ServerSettingsTitle="Setări pentru server"
|
||||||
OBSWebSocket.Settings.AuthRequired="Activează autentificarea"
|
OBSWebSocket.Settings.AuthRequired="Activează autentificarea"
|
||||||
OBSWebSocket.Settings.Password="Parola serverului"
|
OBSWebSocket.Settings.Password="Parola serverului"
|
||||||
OBSWebSocket.Settings.GeneratePassword="Generează parola"
|
OBSWebSocket.Settings.GeneratePassword="Generează parola"
|
||||||
OBSWebSocket.Settings.ServerPort="Portul serverului"
|
OBSWebSocket.Settings.ServerPort="Portul serverului"
|
||||||
OBSWebSocket.Settings.ShowConnectInfo="Afișează informațiile de conectare"
|
OBSWebSocket.Settings.ShowConnectInfo="Afișează informațiile conexiunii"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Avertisment: În prezent în direct"
|
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Avertisment: În prezent în direct"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Se pare că un output (transmisiune, înregistrare etc.) este activ în prezent."
|
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Se pare că un output (transmisiune, înregistrare etc.) este activ în prezent."
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Sigur vrei să afișezi informațiile de conectare?"
|
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Sigur vrei să afișezi informațiile de conectare?"
|
||||||
@ -24,20 +24,18 @@ OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Adresă la distanță"
|
|||||||
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Durata sesiunii"
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Durata sesiunii"
|
||||||
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Mesaje de intrare/ieșire"
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Mesaje de intrare/ieșire"
|
||||||
OBSWebSocket.SessionTable.IdentifiedTitle="Identificat"
|
OBSWebSocket.SessionTable.IdentifiedTitle="Identificat"
|
||||||
OBSWebSocket.SessionTable.KickButtonColumnTitle="Înlătură?"
|
OBSWebSocket.SessionTable.KickButtonColumnTitle="Înlături?"
|
||||||
OBSWebSocket.SessionTable.KickButtonText="Înlătură"
|
OBSWebSocket.SessionTable.KickButtonText="Înlătură"
|
||||||
OBSWebSocket.ConnectInfo.DialogTitle="Informații de conectare WebSocket"
|
OBSWebSocket.ConnectInfo.DialogTitle="Informațiile conexiunii WebSocket"
|
||||||
OBSWebSocket.ConnectInfo.CopyText="Copiază"
|
OBSWebSocket.ConnectInfo.CopyText="Copiază"
|
||||||
OBSWebSocket.ConnectInfo.ServerIp="IP-ul serverului (cea mai bună presupunere)"
|
OBSWebSocket.ConnectInfo.ServerIp="IP-ul serverului (cea mai bună presupunere)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="Portul serverului"
|
OBSWebSocket.ConnectInfo.ServerPort="Portul serverului"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="Parola serverului"
|
OBSWebSocket.ConnectInfo.ServerPassword="Parola serverului"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Autentificare dezactivată]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Autentificare dezactivată]"
|
||||||
OBSWebSocket.ConnectInfo.QrTitle="Conectare QR"
|
OBSWebSocket.ConnectInfo.QrTitle="QR de conectare"
|
||||||
OBSWebSocket.TrayNotification.Identified.Title="O nouă conexiune WebSocket"
|
OBSWebSocket.TrayNotification.Identified.Title="O nouă conexiune WebSocket"
|
||||||
OBSWebSocket.TrayNotification.Identified.Body="Client %1 identificat."
|
OBSWebSocket.TrayNotification.Identified.Body="Clientul %1 identificat."
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Eroare de autentificare WebSocket"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Eroare de autentificare WebSocket"
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 nu a reușit să se autentifice."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Client %1 nu a reușit să se autentifice."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket deconectat"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Client WebSocket deconectat"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Clientul %1 s-a deconectat."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Clientul %1 s-a deconectat."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Eroare de server WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Serverul WebSocket nu a reușit să pornească. Este posibil ca portul TCP %1 să fie deja utilizat în altă parte pe acest sistem de o altă aplicație. Încearcă să setezi un alt port TCP în setările serverului WebSocket sau oprește orice aplicație care ar putea utiliza acest port.\n Mesaj de eroare: %2"
|
|
||||||
|
@ -6,13 +6,13 @@ OBSWebSocket.Settings.AlertsEnable="Включить оповещения в т
|
|||||||
OBSWebSocket.Settings.DebugEnable="Включить отладочный журнал"
|
OBSWebSocket.Settings.DebugEnable="Включить отладочный журнал"
|
||||||
OBSWebSocket.Settings.DebugEnableHoverText="Включает ведение журнала отладки для текущего экземпляра OBS. Не сохраняется при запуске.\nИспользуйте --websocket_debug для включения при запуске."
|
OBSWebSocket.Settings.DebugEnableHoverText="Включает ведение журнала отладки для текущего экземпляра OBS. Не сохраняется при запуске.\nИспользуйте --websocket_debug для включения при запуске."
|
||||||
OBSWebSocket.Settings.ServerSettingsTitle="Настройки сервера"
|
OBSWebSocket.Settings.ServerSettingsTitle="Настройки сервера"
|
||||||
OBSWebSocket.Settings.AuthRequired="Включить аутентификацию"
|
OBSWebSocket.Settings.AuthRequired="Включить вход в аккаунт"
|
||||||
OBSWebSocket.Settings.Password="Пароль сервера"
|
OBSWebSocket.Settings.Password="Пароль сервера"
|
||||||
OBSWebSocket.Settings.GeneratePassword="Сгенерировать пароль"
|
OBSWebSocket.Settings.GeneratePassword="Создать пароль"
|
||||||
OBSWebSocket.Settings.ServerPort="Порт сервера"
|
OBSWebSocket.Settings.ServerPort="Порт сервера"
|
||||||
OBSWebSocket.Settings.ShowConnectInfo="Показать сведения о подключении"
|
OBSWebSocket.Settings.ShowConnectInfo="Показать сведения о подключении"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Предупреждение: Сейчас в эфире"
|
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="Предупреждение: Сейчас в эфире"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Похоже, что вывод (поток, запись и т. д.) в настоящее время активен."
|
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="Похоже, что вывод (поток, запись и т. д.) в настоящее время уже выбран."
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Уверены, что хотите показать ваши сведения о подключении?"
|
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="Уверены, что хотите показать ваши сведения о подключении?"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Предупреждение: Потенциальная проблема безопасности"
|
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="Предупреждение: Потенциальная проблема безопасности"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket хранит пароль сервера в виде обычного текста. Настоятельно рекомендуется использовать пароль, сгенерированный obs-websock."
|
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket хранит пароль сервера в виде обычного текста. Настоятельно рекомендуется использовать пароль, сгенерированный obs-websock."
|
||||||
@ -31,13 +31,11 @@ OBSWebSocket.ConnectInfo.CopyText="Копировать"
|
|||||||
OBSWebSocket.ConnectInfo.ServerIp="IP сервера (лучшая догадка)"
|
OBSWebSocket.ConnectInfo.ServerIp="IP сервера (лучшая догадка)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="Порт сервера"
|
OBSWebSocket.ConnectInfo.ServerPort="Порт сервера"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="Пароль сервера"
|
OBSWebSocket.ConnectInfo.ServerPassword="Пароль сервера"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Авторизация отключена]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Вход отключён]"
|
||||||
OBSWebSocket.ConnectInfo.QrTitle="QR-код подключения"
|
OBSWebSocket.ConnectInfo.QrTitle="QR-код подключения"
|
||||||
OBSWebSocket.TrayNotification.Identified.Title="Новое подключение WebSocket"
|
OBSWebSocket.TrayNotification.Identified.Title="Новое подключение WebSocket"
|
||||||
OBSWebSocket.TrayNotification.Identified.Body="Клиент %1 распознан."
|
OBSWebSocket.TrayNotification.Identified.Body="Клиент %1 распознан."
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Ошибка аутентификации WebSocket"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Ошибка входа WebSocket"
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Клиент %1 не смог аутентифицироваться."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Клиент %1 не смог войти."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Клиент WebSocket отключился"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Клиент WebSocket отключился"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Клиент %1 отключился."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Клиент %1 отключился."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Ошибка сервера WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Не удалось запустить сервер WebSockt. Возможно, порт TCP %1 уже используется другим приложением. Попробуйте установить другой TCP-порт в настройках сервера WebSocket или остановите любое приложение, которое может использовать этот порт.\n Сообщение ошибки: %2"
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
OBSWebSocket.Settings.PluginSettingsTitle="පේනුවේ සැකසුම්"
|
OBSWebSocket.Settings.PluginSettingsTitle="පේනුවේ සැකසුම්"
|
||||||
|
OBSWebSocket.Settings.DebugEnable="නිදොස්කරණ සටහන් තැබීම සබල කරන්න"
|
||||||
OBSWebSocket.Settings.ServerSettingsTitle="සේවාදායකයේ සැකසුම්"
|
OBSWebSocket.Settings.ServerSettingsTitle="සේවාදායකයේ සැකසුම්"
|
||||||
OBSWebSocket.Settings.AuthRequired="සත්යාපනය සබල කරන්න"
|
OBSWebSocket.Settings.AuthRequired="සත්යාපනය සබල කරන්න"
|
||||||
OBSWebSocket.Settings.Password="සේවාදායකයේ මුරපදය"
|
OBSWebSocket.Settings.Password="සේවාදායකයේ මුරපදය"
|
||||||
@ -11,6 +12,7 @@ OBSWebSocket.SessionTable.SessionDurationColumnTitle="වාරයේ පරා
|
|||||||
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="පණිවිඩ එන/යන"
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="පණිවිඩ එන/යන"
|
||||||
OBSWebSocket.SessionTable.IdentifiedTitle="හඳුනා ගැනිණි"
|
OBSWebSocket.SessionTable.IdentifiedTitle="හඳුනා ගැනිණි"
|
||||||
OBSWebSocket.ConnectInfo.CopyText="පිටපතක්"
|
OBSWebSocket.ConnectInfo.CopyText="පිටපතක්"
|
||||||
|
OBSWebSocket.ConnectInfo.ServerIp="සේවාදායකයේ අ.ජා.කෙ. (අනුමානය)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="සේවාදායකයේ තොට"
|
OBSWebSocket.ConnectInfo.ServerPort="සේවාදායකයේ තොට"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="සේවාදායකයේ මුරපදය"
|
OBSWebSocket.ConnectInfo.ServerPassword="සේවාදායකයේ මුරපදය"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[සත්යාපනය අබලයි]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[සත්යාපනය අබලයි]"
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Zlyhanie WebSocket aut
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klientovi %1 sa nepodarilo autentifikovať."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klientovi %1 sa nepodarilo autentifikovať."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket klient odpojený"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket klient odpojený"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 odpojený."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 odpojený."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Zlyhanie WebSocket servera"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket server zlyhal pri spustení. TCP port %1 sa môže používať na inom mieste, na tomto systéme, inou aplikáciou. Skúste nastaviť iný TCP port v nastaveniach WebSocket servera, alebo zastavte iné aplikácie, ktoré by mohli používať tento port.\n Chybová správa: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Spodletelo ovetjanje W
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Odjemalec %1 ni prestal overjanja."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Odjemalec %1 ni prestal overjanja."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Odjemalec WebSocket je prekinil povezavo"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Odjemalec WebSocket je prekinil povezavo"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Odjemalec %1 ni več povezan."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Odjemalec %1 ni več povezan."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Odpoved strežnika WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Strežnik WebSocket se ni uspel zagnati. Vrata TCP %1 morda že uporablja drug program na tem sistemu. Poskusite določiti druga vrata TCP v nastavitvah strežnika WebSocket ali pa ustaviti program, ki bi lahko uporabljal želena vrata.\nSporočilo o napaki: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Autentisering av WebSo
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 misslyckades att autentiseras."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Klient %1 misslyckades att autentiseras."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-klient frånkopplades"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket-klient frånkopplades"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 frånkopplades."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Klient %1 frånkopplades."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket-serverfel"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket-servern kunde inte startaw. TCP-porten %1 kanske redan används någon annanstans på detta system av ett annat program. Prova att ange en annan TCP-port i WebSocket-serverinställningarna eller stoppa alla program som kan använda denna port.\n Felmeddelande: %2"
|
|
||||||
|
@ -29,7 +29,7 @@ OBSWebSocket.SessionTable.KickButtonText="Çıkar"
|
|||||||
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket Bağlanma Bilgileri"
|
OBSWebSocket.ConnectInfo.DialogTitle="WebSocket Bağlanma Bilgileri"
|
||||||
OBSWebSocket.ConnectInfo.CopyText="Kopyala"
|
OBSWebSocket.ConnectInfo.CopyText="Kopyala"
|
||||||
OBSWebSocket.ConnectInfo.ServerIp="Sunucu IP (En İyi Tahmin)"
|
OBSWebSocket.ConnectInfo.ServerIp="Sunucu IP (En İyi Tahmin)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="Sunucu Kapısı"
|
OBSWebSocket.ConnectInfo.ServerPort="Sunucu Portu"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="Sunucu Parolası"
|
OBSWebSocket.ConnectInfo.ServerPassword="Sunucu Parolası"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Doğrulama Devre Dışı]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[Doğrulama Devre Dışı]"
|
||||||
OBSWebSocket.ConnectInfo.QrTitle="Kare Kod ile Bağlan"
|
OBSWebSocket.ConnectInfo.QrTitle="Kare Kod ile Bağlan"
|
||||||
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket Kimlik Doğr
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 istemcisinin kimlik doğrulaması başarısız oldu."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 istemcisinin kimlik doğrulaması başarısız oldu."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket İstemcisinin Bağlantısı Kesildi"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket İstemcisinin Bağlantısı Kesildi"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="%1 istemcisinin bağlantısı kesildi."
|
OBSWebSocket.TrayNotification.Disconnected.Body="%1 istemcisinin bağlantısı kesildi."
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket Sunucu Hatası"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket sunucusu başlatılamadı. %1 TCP kapısı bu sistemde başka bir yerde başka bir uygulama tarafından zaten kullanılıyor olabilir. WebSocket sunucu ayarlarında farklı bir TCP kapısı ayarlamayı deneyin, veya bu kapıyı kullanıyor olabilecek herhangi bir uygulamayı durdurun.\n Hata mesajı: %2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Помилка авт
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Клієнт %1 не зміг автентифікуватися."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Клієнт %1 не зміг автентифікуватися."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Клієнт WebSocket від'єднаний"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Клієнт WebSocket від'єднаний"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Клієнт %1 від'єднаний."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Клієнт %1 від'єднаний."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Помилка сервера WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Не вдалося запустити сервер WebSocket. Порт TCP %1 може вже використовуватися в іншому місці цим системним інтерфейсом. Спробуйте встановити інший TCP порт в налаштуваннях WebSocket сервера або зупинити будь-які застосунки, які можуть використовувати цей порт.\n Повідомлення про помилку: %2"
|
|
||||||
|
@ -35,5 +35,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="Lỗi xác thực WebS
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Máy khách %1 không xác thực được."
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="Máy khách %1 không xác thực được."
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="Máy khách WebSocket bị ngắt kết nối"
|
OBSWebSocket.TrayNotification.Disconnected.Title="Máy khách WebSocket bị ngắt kết nối"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="Máy khách %1 bị ngắt kết nối."
|
OBSWebSocket.TrayNotification.Disconnected.Body="Máy khách %1 bị ngắt kết nối."
|
||||||
OBSWebSocket.Server.StartFailed.Title="Lỗi máy chủ WebSocket"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="Máy chủ WebSocket không khởi động được. Cổng TCP %1 có thể đã được ứng dụng khác sử dụng ở nơi khác trên hệ thống này. Hãy thử đặt một cổng TCP khác trong cài đặt máy chủ WebSocket hoặc dừng bất kỳ ứng dụng nào có thể đang sử dụng cổng này.\n Thông báo lỗi: %2"
|
|
||||||
|
@ -6,23 +6,23 @@ OBSWebSocket.Settings.AlertsEnable="开启系统托盘提醒"
|
|||||||
OBSWebSocket.Settings.DebugEnable="开启调试日志"
|
OBSWebSocket.Settings.DebugEnable="开启调试日志"
|
||||||
OBSWebSocket.Settings.DebugEnableHoverText="开启当前 OBS 实例的调试日志。下次启动时需重新设置。\n使用 --websocket_debug 在启动 OBS 时开启日志。"
|
OBSWebSocket.Settings.DebugEnableHoverText="开启当前 OBS 实例的调试日志。下次启动时需重新设置。\n使用 --websocket_debug 在启动 OBS 时开启日志。"
|
||||||
OBSWebSocket.Settings.ServerSettingsTitle="服务器设置"
|
OBSWebSocket.Settings.ServerSettingsTitle="服务器设置"
|
||||||
OBSWebSocket.Settings.AuthRequired="开启鉴权"
|
OBSWebSocket.Settings.AuthRequired="开启身份认证"
|
||||||
OBSWebSocket.Settings.Password="服务器密码"
|
OBSWebSocket.Settings.Password="服务器密码"
|
||||||
OBSWebSocket.Settings.GeneratePassword="生成密码"
|
OBSWebSocket.Settings.GeneratePassword="生成密码"
|
||||||
OBSWebSocket.Settings.ServerPort="服务器端口"
|
OBSWebSocket.Settings.ServerPort="服务器端口"
|
||||||
OBSWebSocket.Settings.ShowConnectInfo="显示连接信息"
|
OBSWebSocket.Settings.ShowConnectInfo="显示连接信息"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="警告:正在直播"
|
OBSWebSocket.Settings.ShowConnectInfoWarningTitle="警告:正在直播"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="似乎正在输出(串流、录像等)。"
|
OBSWebSocket.Settings.ShowConnectInfoWarningMessage="似乎输出(串流、录像等)正在进行。"
|
||||||
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="您确定要显示您的连接信息吗?"
|
OBSWebSocket.Settings.ShowConnectInfoWarningInfoText="您确定要显示您的连接信息吗?"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="警告:潜在安全问题"
|
OBSWebSocket.Settings.Save.UserPasswordWarningTitle="警告:潜在安全问题"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket 会以明文形式储存服务器密码。强烈建议使用 obs-websocket 生成的密码。"
|
OBSWebSocket.Settings.Save.UserPasswordWarningMessage="obs-websocket 会以明文形式储存服务器密码。强烈建议使用 obs-websocket 生成的密码。"
|
||||||
OBSWebSocket.Settings.Save.UserPasswordWarningInfoText="您确定要使用自定义密码吗?"
|
OBSWebSocket.Settings.Save.UserPasswordWarningInfoText="您确定要使用自定义密码吗?"
|
||||||
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="错误:配置无效"
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle="错误:无效的配置"
|
||||||
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="您的密码必须包含 6 个或以上的字符。"
|
OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage="您的密码必须包含 6 个或以上的字符。"
|
||||||
OBSWebSocket.SessionTable.Title="已连接的 WebSocket 会话"
|
OBSWebSocket.SessionTable.Title="已连接的 WebSocket 会话"
|
||||||
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="远程地址"
|
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="远程地址"
|
||||||
OBSWebSocket.SessionTable.SessionDurationColumnTitle="会话持续时间"
|
OBSWebSocket.SessionTable.SessionDurationColumnTitle="会话持续时间"
|
||||||
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="消息传入/出"
|
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="消息传入/传出"
|
||||||
OBSWebSocket.SessionTable.IdentifiedTitle="已识别"
|
OBSWebSocket.SessionTable.IdentifiedTitle="已识别"
|
||||||
OBSWebSocket.SessionTable.KickButtonColumnTitle="踢出?"
|
OBSWebSocket.SessionTable.KickButtonColumnTitle="踢出?"
|
||||||
OBSWebSocket.SessionTable.KickButtonText="踢出"
|
OBSWebSocket.SessionTable.KickButtonText="踢出"
|
||||||
@ -31,13 +31,11 @@ OBSWebSocket.ConnectInfo.CopyText="复制"
|
|||||||
OBSWebSocket.ConnectInfo.ServerIp="服务器 IP(最佳猜测)"
|
OBSWebSocket.ConnectInfo.ServerIp="服务器 IP(最佳猜测)"
|
||||||
OBSWebSocket.ConnectInfo.ServerPort="服务器端口"
|
OBSWebSocket.ConnectInfo.ServerPort="服务器端口"
|
||||||
OBSWebSocket.ConnectInfo.ServerPassword="服务器密码"
|
OBSWebSocket.ConnectInfo.ServerPassword="服务器密码"
|
||||||
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[鉴权已停用]"
|
OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText="[身份认证已停用]"
|
||||||
OBSWebSocket.ConnectInfo.QrTitle="连接 QR 码"
|
OBSWebSocket.ConnectInfo.QrTitle="连接 QR 码"
|
||||||
OBSWebSocket.TrayNotification.Identified.Title="新 WebSocket 连接"
|
OBSWebSocket.TrayNotification.Identified.Title="新 WebSocket 连接"
|
||||||
OBSWebSocket.TrayNotification.Identified.Body="已识别 %1 客户端。"
|
OBSWebSocket.TrayNotification.Identified.Body="客户端%1已识别 。"
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket 鉴权失败"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket 认证失败"
|
||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 客户端认证失败。"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 客户端认证失败。"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 客户端已断开"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 客户端已断开"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="%1 客户端已断开。"
|
OBSWebSocket.TrayNotification.Disconnected.Body="%1 客户端已断开。"
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket 服务器启动失败"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="WebSocket 服务器启动失败。TCP 端口 %1 可能已被其它程序占用。请尝试在 WebSocket 服务器设置中更改不同的 TCP 端口号,或者结束其它任何可能占用此端口的程序。\n错误信息:%2"
|
|
||||||
|
@ -39,5 +39,3 @@ OBSWebSocket.TrayNotification.AuthenticationFailed.Title="WebSocket 認證失敗
|
|||||||
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 用戶端無法進行認證。"
|
OBSWebSocket.TrayNotification.AuthenticationFailed.Body="%1 用戶端無法進行認證。"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 用戶端已斷線"
|
OBSWebSocket.TrayNotification.Disconnected.Title="WebSocket 用戶端已斷線"
|
||||||
OBSWebSocket.TrayNotification.Disconnected.Body="%1 用戶端已斷線。"
|
OBSWebSocket.TrayNotification.Disconnected.Body="%1 用戶端已斷線。"
|
||||||
OBSWebSocket.Server.StartFailed.Title="WebSocket 伺服器錯誤"
|
|
||||||
OBSWebSocket.Server.StartFailed.Message="無法啟動 WebSocket 伺服器。可能 TCP 連線埠 %1 已經被系統中的某個應用程式佔用。請嘗試在 WebSocket 伺服器設定更改不同的 TCP 連線埠,或停止任何可能正在使用這個連線埠的應用程式。\n錯誤訊息:%2"
|
|
||||||
|
1
deps/qr
vendored
1
deps/qr
vendored
Submodule deps/qr deleted from 8518684c0f
@ -1,5 +1,7 @@
|
|||||||
# obs-websocket documentation
|
# obs-websocket documentation
|
||||||
|
|
||||||
|
## If you're looking for the documentation page, it's [here](generated/protocol.md)
|
||||||
|
|
||||||
This is the documentation for obs-websocket. Run `build_docs.sh` to auto generate the latest docs from the `src` directory. There are 3 components to the docs generation:
|
This is the documentation for obs-websocket. Run `build_docs.sh` to auto generate the latest docs from the `src` directory. There are 3 components to the docs generation:
|
||||||
|
|
||||||
- `comments/comments.js`: Generates the `work/comments.json` file from the code comments in the src directory.
|
- `comments/comments.js`: Generates the `work/comments.json` file from the code comments in the src directory.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
# obs-websocket 5.1.0 Protocol
|
# obs-websocket 5.x.x Protocol
|
||||||
|
|
||||||
## Main Table of Contents
|
## Main Table of Contents
|
||||||
|
|
||||||
|
@ -1225,7 +1225,7 @@
|
|||||||
{
|
{
|
||||||
"description": "Gets the current directory that the record output is set to.",
|
"description": "Gets the current directory that the record output is set to.",
|
||||||
"requestType": "GetRecordDirectory",
|
"requestType": "GetRecordDirectory",
|
||||||
"complexity": 1,
|
"complexity": 2,
|
||||||
"rpcVersion": "1",
|
"rpcVersion": "1",
|
||||||
"deprecated": false,
|
"deprecated": false,
|
||||||
"initialVersion": "5.0.0",
|
"initialVersion": "5.0.0",
|
||||||
@ -1239,6 +1239,43 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"description": "Sets the current directory that the record output writes files to.",
|
||||||
|
"requestType": "SetRecordDirectory",
|
||||||
|
"complexity": 2,
|
||||||
|
"rpcVersion": "1",
|
||||||
|
"deprecated": false,
|
||||||
|
"initialVersion": "5.3.0",
|
||||||
|
"category": "config",
|
||||||
|
"requestFields": [
|
||||||
|
{
|
||||||
|
"valueName": "recordDirectory",
|
||||||
|
"valueType": "String",
|
||||||
|
"valueDescription": "Output directory",
|
||||||
|
"valueRestrictions": null,
|
||||||
|
"valueOptional": false,
|
||||||
|
"valueOptionalBehavior": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseFields": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Gets an array of all available source filter kinds.\n\nSimilar to `GetInputKindList`",
|
||||||
|
"requestType": "GetSourceFilterKindList",
|
||||||
|
"complexity": 2,
|
||||||
|
"rpcVersion": "1",
|
||||||
|
"deprecated": false,
|
||||||
|
"initialVersion": "5.4.0",
|
||||||
|
"category": "filters",
|
||||||
|
"requestFields": [],
|
||||||
|
"responseFields": [
|
||||||
|
{
|
||||||
|
"valueName": "sourceFilterKinds",
|
||||||
|
"valueType": "Array<String>",
|
||||||
|
"valueDescription": "Array of source filter kinds"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"description": "Gets an array of all of a source's filters.",
|
"description": "Gets an array of all of a source's filters.",
|
||||||
"requestType": "GetSourceFilterList",
|
"requestType": "GetSourceFilterList",
|
||||||
@ -1783,6 +1820,14 @@
|
|||||||
"valueRestrictions": null,
|
"valueRestrictions": null,
|
||||||
"valueOptional": false,
|
"valueOptional": false,
|
||||||
"valueOptionalBehavior": null
|
"valueOptionalBehavior": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"valueName": "contextName",
|
||||||
|
"valueType": "String",
|
||||||
|
"valueDescription": "Name of context of the hotkey to trigger",
|
||||||
|
"valueRestrictions": null,
|
||||||
|
"valueOptional": true,
|
||||||
|
"valueOptionalBehavior": "Unknown"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responseFields": []
|
"responseFields": []
|
||||||
@ -3097,7 +3142,13 @@
|
|||||||
"initialVersion": "5.0.0",
|
"initialVersion": "5.0.0",
|
||||||
"category": "record",
|
"category": "record",
|
||||||
"requestFields": [],
|
"requestFields": [],
|
||||||
"responseFields": []
|
"responseFields": [
|
||||||
|
{
|
||||||
|
"valueName": "outputActive",
|
||||||
|
"valueType": "Boolean",
|
||||||
|
"valueDescription": "The new active state of the output"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Starts the record output.",
|
"description": "Starts the record output.",
|
||||||
@ -3934,7 +3985,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Gets the scene transition overridden for a scene.",
|
"description": "Sets the scene transition overridden for a scene.",
|
||||||
"requestType": "SetSceneSceneTransitionOverride",
|
"requestType": "SetSceneSceneTransitionOverride",
|
||||||
"complexity": 2,
|
"complexity": 2,
|
||||||
"rpcVersion": "1",
|
"rpcVersion": "1",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!-- This file was automatically generated. Do not edit directly! -->
|
<!-- This file was automatically generated. Do not edit directly! -->
|
||||||
<!-- markdownlint-disable no-bare-urls -->
|
<!-- markdownlint-disable no-bare-urls -->
|
||||||
|
|
||||||
# obs-websocket 5.1.0 Protocol
|
# obs-websocket 5.x.x Protocol
|
||||||
|
|
||||||
## Main Table of Contents
|
## Main Table of Contents
|
||||||
|
|
||||||
@ -2543,6 +2543,7 @@ communication is desired.
|
|||||||
- [GetStreamServiceSettings](#getstreamservicesettings)
|
- [GetStreamServiceSettings](#getstreamservicesettings)
|
||||||
- [SetStreamServiceSettings](#setstreamservicesettings)
|
- [SetStreamServiceSettings](#setstreamservicesettings)
|
||||||
- [GetRecordDirectory](#getrecorddirectory)
|
- [GetRecordDirectory](#getrecorddirectory)
|
||||||
|
- [SetRecordDirectory](#setrecorddirectory)
|
||||||
- [Sources Requests](#sources-requests)
|
- [Sources Requests](#sources-requests)
|
||||||
- [GetSourceActive](#getsourceactive)
|
- [GetSourceActive](#getsourceactive)
|
||||||
- [GetSourceScreenshot](#getsourcescreenshot)
|
- [GetSourceScreenshot](#getsourcescreenshot)
|
||||||
@ -2595,6 +2596,7 @@ communication is desired.
|
|||||||
- [TriggerStudioModeTransition](#triggerstudiomodetransition)
|
- [TriggerStudioModeTransition](#triggerstudiomodetransition)
|
||||||
- [SetTBarPosition](#settbarposition)
|
- [SetTBarPosition](#settbarposition)
|
||||||
- [Filters Requests](#filters-1-requests)
|
- [Filters Requests](#filters-1-requests)
|
||||||
|
- [GetSourceFilterKindList](#getsourcefilterkindlist)
|
||||||
- [GetSourceFilterList](#getsourcefilterlist)
|
- [GetSourceFilterList](#getsourcefilterlist)
|
||||||
- [GetSourceFilterDefaultSettings](#getsourcefilterdefaultsettings)
|
- [GetSourceFilterDefaultSettings](#getsourcefilterdefaultsettings)
|
||||||
- [CreateSourceFilter](#createsourcefilter)
|
- [CreateSourceFilter](#createsourcefilter)
|
||||||
@ -2792,6 +2794,7 @@ Triggers a hotkey using its name. See `GetHotkeyList`
|
|||||||
| Name | Type | Description | Value Restrictions | ?Default Behavior |
|
| Name | Type | Description | Value Restrictions | ?Default Behavior |
|
||||||
| ---- | :---: | ----------- | :----------------: | ----------------- |
|
| ---- | :---: | ----------- | :----------------: | ----------------- |
|
||||||
| hotkeyName | String | Name of the hotkey to trigger | None | N/A |
|
| hotkeyName | String | Name of the hotkey to trigger | None | N/A |
|
||||||
|
| ?contextName | String | Name of context of the hotkey to trigger | None | Unknown |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -3120,7 +3123,7 @@ Note: Simple RTMP settings can be set with type `rtmp_custom` and the settings f
|
|||||||
|
|
||||||
Gets the current directory that the record output is set to.
|
Gets the current directory that the record output is set to.
|
||||||
|
|
||||||
- Complexity Rating: `1/5`
|
- Complexity Rating: `2/5`
|
||||||
- Latest Supported RPC Version: `1`
|
- Latest Supported RPC Version: `1`
|
||||||
- Added in v5.0.0
|
- Added in v5.0.0
|
||||||
|
|
||||||
@ -3130,6 +3133,22 @@ Gets the current directory that the record output is set to.
|
|||||||
| ---- | :---: | ----------- |
|
| ---- | :---: | ----------- |
|
||||||
| recordDirectory | String | Output directory |
|
| recordDirectory | String | Output directory |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### SetRecordDirectory
|
||||||
|
|
||||||
|
Sets the current directory that the record output writes files to.
|
||||||
|
|
||||||
|
- Complexity Rating: `2/5`
|
||||||
|
- Latest Supported RPC Version: `1`
|
||||||
|
- Added in v5.3.0
|
||||||
|
|
||||||
|
**Request Fields:**
|
||||||
|
|
||||||
|
| Name | Type | Description | Value Restrictions | ?Default Behavior |
|
||||||
|
| ---- | :---: | ----------- | :----------------: | ----------------- |
|
||||||
|
| recordDirectory | String | Output directory | None | N/A |
|
||||||
|
|
||||||
## Sources Requests
|
## Sources Requests
|
||||||
|
|
||||||
### GetSourceActive
|
### GetSourceActive
|
||||||
@ -3398,7 +3417,7 @@ Gets the scene transition overridden for a scene.
|
|||||||
|
|
||||||
### SetSceneSceneTransitionOverride
|
### SetSceneSceneTransitionOverride
|
||||||
|
|
||||||
Gets the scene transition overridden for a scene.
|
Sets the scene transition overridden for a scene.
|
||||||
|
|
||||||
- Complexity Rating: `2/5`
|
- Complexity Rating: `2/5`
|
||||||
- Latest Supported RPC Version: `1`
|
- Latest Supported RPC Version: `1`
|
||||||
@ -4074,6 +4093,24 @@ Sets the position of the TBar.
|
|||||||
|
|
||||||
## Filters Requests
|
## Filters Requests
|
||||||
|
|
||||||
|
### GetSourceFilterKindList
|
||||||
|
|
||||||
|
Gets an array of all available source filter kinds.
|
||||||
|
|
||||||
|
Similar to `GetInputKindList`
|
||||||
|
|
||||||
|
- Complexity Rating: `2/5`
|
||||||
|
- Latest Supported RPC Version: `1`
|
||||||
|
- Added in v5.4.0
|
||||||
|
|
||||||
|
**Response Fields:**
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | :---: | ----------- |
|
||||||
|
| sourceFilterKinds | Array<String> | Array of source filter kinds |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### GetSourceFilterList
|
### GetSourceFilterList
|
||||||
|
|
||||||
Gets an array of all of a source's filters.
|
Gets an array of all of a source's filters.
|
||||||
@ -5006,6 +5043,12 @@ Toggles the status of the record output.
|
|||||||
- Latest Supported RPC Version: `1`
|
- Latest Supported RPC Version: `1`
|
||||||
- Added in v5.0.0
|
- Added in v5.0.0
|
||||||
|
|
||||||
|
**Response Fields:**
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | :---: | ----------- |
|
||||||
|
| outputActive | Boolean | The new active state of the output |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### StartRecord
|
### StartRecord
|
||||||
|
@ -38,16 +38,6 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#define CMDLINE_WEBSOCKET_DEBUG "websocket_debug"
|
#define CMDLINE_WEBSOCKET_DEBUG "websocket_debug"
|
||||||
|
|
||||||
Config::Config()
|
Config::Config()
|
||||||
: PortOverridden(false),
|
|
||||||
PasswordOverridden(false),
|
|
||||||
FirstLoad(true),
|
|
||||||
ServerEnabled(false),
|
|
||||||
ServerPort(4455),
|
|
||||||
Ipv4Only(false),
|
|
||||||
DebugEnabled(false),
|
|
||||||
AlertsEnabled(false),
|
|
||||||
AuthRequired(true),
|
|
||||||
ServerPassword("")
|
|
||||||
{
|
{
|
||||||
SetDefaultsToGlobalStore();
|
SetDefaultsToGlobalStore();
|
||||||
}
|
}
|
||||||
|
20
src/Config.h
20
src/Config.h
@ -30,17 +30,17 @@ struct Config {
|
|||||||
void Load();
|
void Load();
|
||||||
void Save();
|
void Save();
|
||||||
void SetDefaultsToGlobalStore();
|
void SetDefaultsToGlobalStore();
|
||||||
config_t *GetConfigStore();
|
static config_t *GetConfigStore();
|
||||||
|
|
||||||
std::atomic<bool> PortOverridden;
|
std::atomic<bool> PortOverridden = false;
|
||||||
std::atomic<bool> PasswordOverridden;
|
std::atomic<bool> PasswordOverridden = false;
|
||||||
|
|
||||||
std::atomic<bool> FirstLoad;
|
std::atomic<bool> FirstLoad = true;
|
||||||
std::atomic<bool> ServerEnabled;
|
std::atomic<bool> ServerEnabled = false;
|
||||||
std::atomic<uint16_t> ServerPort;
|
std::atomic<uint16_t> ServerPort = 4455;
|
||||||
std::atomic<bool> Ipv4Only;
|
std::atomic<bool> Ipv4Only = false;
|
||||||
std::atomic<bool> DebugEnabled;
|
std::atomic<bool> DebugEnabled = false;
|
||||||
std::atomic<bool> AlertsEnabled;
|
std::atomic<bool> AlertsEnabled = false;
|
||||||
std::atomic<bool> AuthRequired;
|
std::atomic<bool> AuthRequired = true;
|
||||||
QString ServerPassword;
|
QString ServerPassword;
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,21 @@
|
|||||||
|
/*
|
||||||
|
obs-websocket
|
||||||
|
Copyright (C) 2020-2023 Kyle Manning <tt2468@gmail.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
#include "WebSocketApi.h"
|
#include "WebSocketApi.h"
|
||||||
#include "requesthandler/RequestHandler.h"
|
#include "requesthandler/RequestHandler.h"
|
||||||
#include "obs-websocket.h"
|
#include "obs-websocket.h"
|
||||||
|
@ -1,3 +1,21 @@
|
|||||||
|
/*
|
||||||
|
obs-websocket
|
||||||
|
Copyright (C) 2020-2023 Kyle Manning <tt2468@gmail.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -20,11 +20,6 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#include "EventHandler.h"
|
#include "EventHandler.h"
|
||||||
|
|
||||||
EventHandler::EventHandler()
|
EventHandler::EventHandler()
|
||||||
: _obsLoaded(false),
|
|
||||||
_inputVolumeMetersRef(0),
|
|
||||||
_inputActiveStateChangedRef(0),
|
|
||||||
_inputShowStateChangedRef(0),
|
|
||||||
_sceneItemTransformChangedRef(0)
|
|
||||||
{
|
{
|
||||||
blog_debug("[EventHandler::EventHandler] Setting up...");
|
blog_debug("[EventHandler::EventHandler] Setting up...");
|
||||||
|
|
||||||
@ -36,6 +31,7 @@ EventHandler::EventHandler()
|
|||||||
signal_handler_connect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this);
|
signal_handler_connect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this);
|
||||||
signal_handler_connect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
signal_handler_connect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
||||||
signal_handler_connect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this);
|
signal_handler_connect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this);
|
||||||
|
signal_handler_connect(coreSignalHandler, "source_update", SourceUpdatedMultiHandler, this);
|
||||||
} else {
|
} else {
|
||||||
blog(LOG_ERROR, "[EventHandler::EventHandler] Unable to get libobs signal handler!");
|
blog(LOG_ERROR, "[EventHandler::EventHandler] Unable to get libobs signal handler!");
|
||||||
}
|
}
|
||||||
@ -55,10 +51,25 @@ EventHandler::~EventHandler()
|
|||||||
signal_handler_disconnect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this);
|
signal_handler_disconnect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this);
|
||||||
signal_handler_disconnect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
signal_handler_disconnect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this);
|
||||||
signal_handler_disconnect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this);
|
signal_handler_disconnect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this);
|
||||||
|
signal_handler_disconnect(coreSignalHandler, "source_update", SourceUpdatedMultiHandler, this);
|
||||||
} else {
|
} else {
|
||||||
blog(LOG_ERROR, "[EventHandler::~EventHandler] Unable to get libobs signal handler!");
|
blog(LOG_ERROR, "[EventHandler::~EventHandler] Unable to get libobs signal handler!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Revoke callbacks of all inputs and scenes, in case some still have our callbacks attached
|
||||||
|
auto enumInputs = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->DisconnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_sources(enumInputs, this);
|
||||||
|
auto enumScenes = [](void *param, obs_source_t *source) {
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
eventHandler->DisconnectSourceSignals(source);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
obs_enum_scenes(enumScenes, this);
|
||||||
|
|
||||||
blog_debug("[EventHandler::~EventHandler] Finished.");
|
blog_debug("[EventHandler::~EventHandler] Finished.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,9 +78,9 @@ void EventHandler::SetBroadcastCallback(EventHandler::BroadcastCallback cb)
|
|||||||
_broadcastCallback = cb;
|
_broadcastCallback = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventHandler::SetObsLoadedCallback(EventHandler::ObsLoadedCallback cb)
|
void EventHandler::SetObsReadyCallback(EventHandler::ObsReadyCallback cb)
|
||||||
{
|
{
|
||||||
_obsLoadedCallback = cb;
|
_obsReadyCallback = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to increment refcounts for high volume event subscriptions
|
// Function to increment refcounts for high volume event subscriptions
|
||||||
@ -261,9 +272,6 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
{
|
{
|
||||||
auto eventHandler = static_cast<EventHandler *>(private_data);
|
auto eventHandler = static_cast<EventHandler *>(private_data);
|
||||||
|
|
||||||
if (!eventHandler->_obsLoaded.load() && event != OBS_FRONTEND_EVENT_FINISHED_LOADING)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
// General
|
// General
|
||||||
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
case OBS_FRONTEND_EVENT_FINISHED_LOADING:
|
||||||
@ -283,7 +291,11 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
}
|
}
|
||||||
obs_frontend_source_list_free(&transitions);
|
obs_frontend_source_list_free(&transitions);
|
||||||
}
|
}
|
||||||
|
// Before ready update to allow event to broadcast
|
||||||
eventHandler->HandleCurrentSceneCollectionChanging();
|
eventHandler->HandleCurrentSceneCollectionChanging();
|
||||||
|
eventHandler->_obsReady = false;
|
||||||
|
if (eventHandler->_obsReadyCallback)
|
||||||
|
eventHandler->_obsReadyCallback(false);
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED: {
|
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED: {
|
||||||
obs_frontend_source_list transitions = {};
|
obs_frontend_source_list transitions = {};
|
||||||
@ -294,6 +306,9 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
|
|||||||
}
|
}
|
||||||
obs_frontend_source_list_free(&transitions);
|
obs_frontend_source_list_free(&transitions);
|
||||||
}
|
}
|
||||||
|
eventHandler->_obsReady = true;
|
||||||
|
if (eventHandler->_obsReadyCallback)
|
||||||
|
eventHandler->_obsReadyCallback(true);
|
||||||
eventHandler->HandleCurrentSceneCollectionChanged();
|
eventHandler->HandleCurrentSceneCollectionChanged();
|
||||||
break;
|
break;
|
||||||
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
|
case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
|
||||||
@ -430,30 +445,6 @@ void EventHandler::FrontendFinishedLoadingMultiHandler()
|
|||||||
blog_debug(
|
blog_debug(
|
||||||
"[EventHandler::FrontendFinishedLoadingMultiHandler] OBS has finished loading. Connecting final handlers and enabling events...");
|
"[EventHandler::FrontendFinishedLoadingMultiHandler] OBS has finished loading. Connecting final handlers and enabling events...");
|
||||||
|
|
||||||
// Connect source signals and enable events only after OBS has fully loaded (to reduce extra logging).
|
|
||||||
_obsLoaded.store(true);
|
|
||||||
|
|
||||||
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::EventHandler()`
|
|
||||||
// Enumerate inputs and connect each one
|
|
||||||
{
|
|
||||||
auto enumInputs = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->ConnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_sources(enumInputs, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate scenes and connect each one
|
|
||||||
{
|
|
||||||
auto enumScenes = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->ConnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_scenes(enumScenes, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate all scene transitions and connect each one
|
// Enumerate all scene transitions and connect each one
|
||||||
{
|
{
|
||||||
obs_frontend_source_list transitions = {};
|
obs_frontend_source_list transitions = {};
|
||||||
@ -465,41 +456,23 @@ void EventHandler::FrontendFinishedLoadingMultiHandler()
|
|||||||
obs_frontend_source_list_free(&transitions);
|
obs_frontend_source_list_free(&transitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
blog_debug("[EventHandler::FrontendFinishedLoadingMultiHandler] Finished.");
|
_obsReady = true;
|
||||||
|
if (_obsReadyCallback)
|
||||||
|
_obsReadyCallback(true);
|
||||||
|
|
||||||
if (_obsLoadedCallback)
|
blog_debug("[EventHandler::FrontendFinishedLoadingMultiHandler] Finished.");
|
||||||
_obsLoadedCallback();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventHandler::FrontendExitMultiHandler()
|
void EventHandler::FrontendExitMultiHandler()
|
||||||
{
|
{
|
||||||
HandleExitStarted();
|
|
||||||
|
|
||||||
blog_debug("[EventHandler::FrontendExitMultiHandler] OBS is unloading. Disabling events...");
|
blog_debug("[EventHandler::FrontendExitMultiHandler] OBS is unloading. Disabling events...");
|
||||||
|
|
||||||
|
HandleExitStarted();
|
||||||
|
|
||||||
// Disconnect source signals and disable events when OBS starts unloading (to reduce extra logging).
|
// Disconnect source signals and disable events when OBS starts unloading (to reduce extra logging).
|
||||||
_obsLoaded.store(false);
|
_obsReady = false;
|
||||||
|
if (_obsReadyCallback)
|
||||||
// In the case that plugins become hotloadable, this will have to go back into `EventHandler::~EventHandler()`
|
_obsReadyCallback(false);
|
||||||
// Enumerate inputs and disconnect each one
|
|
||||||
{
|
|
||||||
auto enumInputs = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->DisconnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_sources(enumInputs, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate scenes and disconnect each one
|
|
||||||
{
|
|
||||||
auto enumScenes = [](void *param, obs_source_t *source) {
|
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
|
||||||
eventHandler->DisconnectSourceSignals(source);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
obs_enum_scenes(enumScenes, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate all scene transitions and disconnect each one
|
// Enumerate all scene transitions and disconnect each one
|
||||||
{
|
{
|
||||||
@ -520,10 +493,6 @@ void EventHandler::SourceCreatedMultiHandler(void *param, calldata_t *data)
|
|||||||
{
|
{
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
|
||||||
// Don't react to signals until OBS has finished loading
|
|
||||||
if (!eventHandler->_obsLoaded.load())
|
|
||||||
return;
|
|
||||||
|
|
||||||
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
||||||
if (!source)
|
if (!source)
|
||||||
return;
|
return;
|
||||||
@ -556,10 +525,6 @@ void EventHandler::SourceDestroyedMultiHandler(void *param, calldata_t *data)
|
|||||||
// Disconnect all signals from the source
|
// Disconnect all signals from the source
|
||||||
eventHandler->DisconnectSourceSignals(source);
|
eventHandler->DisconnectSourceSignals(source);
|
||||||
|
|
||||||
// Don't react to signals if OBS is unloading
|
|
||||||
if (!eventHandler->_obsLoaded.load())
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (obs_source_get_type(source)) {
|
switch (obs_source_get_type(source)) {
|
||||||
case OBS_SOURCE_TYPE_INPUT:
|
case OBS_SOURCE_TYPE_INPUT:
|
||||||
// Only emit removed if the input has not already been removed. This is the case when removing the last scene item of an input.
|
// Only emit removed if the input has not already been removed. This is the case when removing the last scene item of an input.
|
||||||
@ -582,9 +547,6 @@ void EventHandler::SourceRemovedMultiHandler(void *param, calldata_t *data)
|
|||||||
{
|
{
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
|
||||||
if (!eventHandler->_obsLoaded.load())
|
|
||||||
return;
|
|
||||||
|
|
||||||
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
||||||
if (!source)
|
if (!source)
|
||||||
return;
|
return;
|
||||||
@ -605,9 +567,6 @@ void EventHandler::SourceRenamedMultiHandler(void *param, calldata_t *data)
|
|||||||
{
|
{
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
|
||||||
if (!eventHandler->_obsLoaded.load())
|
|
||||||
return;
|
|
||||||
|
|
||||||
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
||||||
if (!source)
|
if (!source)
|
||||||
return;
|
return;
|
||||||
@ -631,6 +590,23 @@ void EventHandler::SourceRenamedMultiHandler(void *param, calldata_t *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventHandler::SourceUpdatedMultiHandler(void *param, calldata_t *data)
|
||||||
|
{
|
||||||
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
|
||||||
|
obs_source_t *source = GetCalldataPointer<obs_source_t>(data, "source");
|
||||||
|
if (!source)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (obs_source_get_type(source)) {
|
||||||
|
case OBS_SOURCE_TYPE_INPUT:
|
||||||
|
eventHandler->HandleInputSettingsChanged(source);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EventHandler::StreamOutputReconnectHandler(void *param, calldata_t *)
|
void EventHandler::StreamOutputReconnectHandler(void *param, calldata_t *)
|
||||||
{
|
{
|
||||||
auto eventHandler = static_cast<EventHandler *>(param);
|
auto eventHandler = static_cast<EventHandler *>(param);
|
||||||
|
@ -34,25 +34,26 @@ public:
|
|||||||
EventHandler();
|
EventHandler();
|
||||||
~EventHandler();
|
~EventHandler();
|
||||||
|
|
||||||
typedef std::function<void(uint64_t, std::string, json, uint8_t)> BroadcastCallback;
|
typedef std::function<void(uint64_t, std::string, json, uint8_t)>
|
||||||
|
BroadcastCallback; // uint64_t requiredIntent, std::string eventType, json eventData, uint8_t rpcVersion
|
||||||
void SetBroadcastCallback(BroadcastCallback cb);
|
void SetBroadcastCallback(BroadcastCallback cb);
|
||||||
typedef std::function<void()> ObsLoadedCallback;
|
typedef std::function<void(bool)> ObsReadyCallback; // bool ready
|
||||||
void SetObsLoadedCallback(ObsLoadedCallback cb);
|
void SetObsReadyCallback(ObsReadyCallback cb);
|
||||||
|
|
||||||
void ProcessSubscription(uint64_t eventSubscriptions);
|
void ProcessSubscription(uint64_t eventSubscriptions);
|
||||||
void ProcessUnsubscription(uint64_t eventSubscriptions);
|
void ProcessUnsubscription(uint64_t eventSubscriptions);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BroadcastCallback _broadcastCallback;
|
BroadcastCallback _broadcastCallback;
|
||||||
ObsLoadedCallback _obsLoadedCallback;
|
ObsReadyCallback _obsReadyCallback;
|
||||||
|
|
||||||
std::atomic<bool> _obsLoaded;
|
std::atomic<bool> _obsReady = false;
|
||||||
|
|
||||||
std::unique_ptr<Utils::Obs::VolumeMeter::Handler> _inputVolumeMetersHandler;
|
std::unique_ptr<Utils::Obs::VolumeMeter::Handler> _inputVolumeMetersHandler;
|
||||||
std::atomic<uint64_t> _inputVolumeMetersRef;
|
std::atomic<uint64_t> _inputVolumeMetersRef = 0;
|
||||||
std::atomic<uint64_t> _inputActiveStateChangedRef;
|
std::atomic<uint64_t> _inputActiveStateChangedRef = 0;
|
||||||
std::atomic<uint64_t> _inputShowStateChangedRef;
|
std::atomic<uint64_t> _inputShowStateChangedRef = 0;
|
||||||
std::atomic<uint64_t> _sceneItemTransformChangedRef;
|
std::atomic<uint64_t> _sceneItemTransformChangedRef = 0;
|
||||||
|
|
||||||
void ConnectSourceSignals(obs_source_t *source);
|
void ConnectSourceSignals(obs_source_t *source);
|
||||||
void DisconnectSourceSignals(obs_source_t *source);
|
void DisconnectSourceSignals(obs_source_t *source);
|
||||||
@ -68,9 +69,10 @@ private:
|
|||||||
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
|
static void SourceCreatedMultiHandler(void *param, calldata_t *data);
|
||||||
static void SourceDestroyedMultiHandler(void *param, calldata_t *data);
|
static void SourceDestroyedMultiHandler(void *param, calldata_t *data);
|
||||||
static void SourceRemovedMultiHandler(void *param, calldata_t *data);
|
static void SourceRemovedMultiHandler(void *param, calldata_t *data);
|
||||||
|
|
||||||
// Signal handler: source
|
|
||||||
static void SourceRenamedMultiHandler(void *param, calldata_t *data);
|
static void SourceRenamedMultiHandler(void *param, calldata_t *data);
|
||||||
|
static void SourceUpdatedMultiHandler(void *param, calldata_t *data);
|
||||||
|
|
||||||
|
// Signal handler: media sources
|
||||||
static void SourceMediaPauseMultiHandler(void *param, calldata_t *data);
|
static void SourceMediaPauseMultiHandler(void *param, calldata_t *data);
|
||||||
static void SourceMediaPlayMultiHandler(void *param, calldata_t *data);
|
static void SourceMediaPlayMultiHandler(void *param, calldata_t *data);
|
||||||
static void SourceMediaRestartMultiHandler(void *param, calldata_t *data);
|
static void SourceMediaRestartMultiHandler(void *param, calldata_t *data);
|
||||||
@ -105,7 +107,7 @@ private:
|
|||||||
void HandleInputCreated(obs_source_t *source);
|
void HandleInputCreated(obs_source_t *source);
|
||||||
void HandleInputRemoved(obs_source_t *source);
|
void HandleInputRemoved(obs_source_t *source);
|
||||||
void HandleInputNameChanged(obs_source_t *source, std::string oldInputName, std::string inputName);
|
void HandleInputNameChanged(obs_source_t *source, std::string oldInputName, std::string inputName);
|
||||||
void HandleInputVolumeMeters(std::vector<json> inputs); // AudioMeter::Handler callback
|
void HandleInputSettingsChanged(obs_source_t *source);
|
||||||
static void HandleInputActiveStateChanged(void *param,
|
static void HandleInputActiveStateChanged(void *param,
|
||||||
calldata_t *data); // Direct callback
|
calldata_t *data); // Direct callback
|
||||||
static void HandleInputShowStateChanged(void *param,
|
static void HandleInputShowStateChanged(void *param,
|
||||||
@ -122,6 +124,7 @@ private:
|
|||||||
calldata_t *data); // Direct callback
|
calldata_t *data); // Direct callback
|
||||||
static void HandleInputAudioMonitorTypeChanged(void *param,
|
static void HandleInputAudioMonitorTypeChanged(void *param,
|
||||||
calldata_t *data); // Direct callback
|
calldata_t *data); // Direct callback
|
||||||
|
void HandleInputVolumeMeters(std::vector<json> inputs); // AudioMeter::Handler callback
|
||||||
|
|
||||||
// Transitions
|
// Transitions
|
||||||
void HandleCurrentSceneTransitionChanged();
|
void HandleCurrentSceneTransitionChanged();
|
||||||
|
@ -93,6 +93,32 @@ void EventHandler::HandleInputNameChanged(obs_source_t *, std::string oldInputNa
|
|||||||
BroadcastEvent(EventSubscription::Inputs, "InputNameChanged", eventData);
|
BroadcastEvent(EventSubscription::Inputs, "InputNameChanged", eventData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An input's settings have changed (been updated).
|
||||||
|
*
|
||||||
|
* Note: On some inputs, changing values in the properties dialog will cause an immediate update. Pressing the "Cancel" button will revert the settings, resulting in another event being fired.
|
||||||
|
*
|
||||||
|
* @dataField inputName | String | Name of the input
|
||||||
|
* @dataField inputSettings | Object | New settings object of the input
|
||||||
|
*
|
||||||
|
* @eventType InputSettingsChanged
|
||||||
|
* @eventSubscription Inputs
|
||||||
|
* @complexity 3
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.4.0
|
||||||
|
* @api events
|
||||||
|
* @category inputs
|
||||||
|
*/
|
||||||
|
void EventHandler::HandleInputSettingsChanged(obs_source_t *source)
|
||||||
|
{
|
||||||
|
OBSDataAutoRelease inputSettings = obs_source_get_settings(source);
|
||||||
|
|
||||||
|
json eventData;
|
||||||
|
eventData["inputName"] = obs_source_get_name(source);
|
||||||
|
eventData["inputSettings"] = Utils::Json::ObsDataToJson(inputSettings);
|
||||||
|
BroadcastEvent(EventSubscription::Inputs, "InputSettingsChanged", eventData);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An input's active state has changed.
|
* An input's active state has changed.
|
||||||
*
|
*
|
||||||
|
@ -103,10 +103,7 @@ void EventHandler::HandleCurrentProgramSceneChanged()
|
|||||||
OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene();
|
OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene();
|
||||||
|
|
||||||
json eventData;
|
json eventData;
|
||||||
if (currentScene)
|
|
||||||
eventData["sceneName"] = obs_source_get_name(currentScene);
|
eventData["sceneName"] = obs_source_get_name(currentScene);
|
||||||
else
|
|
||||||
eventData["sceneName"] = nullptr;
|
|
||||||
BroadcastEvent(EventSubscription::Scenes, "CurrentProgramSceneChanged", eventData);
|
BroadcastEvent(EventSubscription::Scenes, "CurrentProgramSceneChanged", eventData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,9 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <obs-module.h>
|
#include <obs-module.h>
|
||||||
|
#include <qrcodegen.hpp>
|
||||||
|
|
||||||
#include "ConnectInfo.h"
|
#include "ConnectInfo.h"
|
||||||
#include "../../deps/qr/cpp/QrCode.hpp"
|
|
||||||
#include "../obs-websocket.h"
|
#include "../obs-websocket.h"
|
||||||
#include "../Config.h"
|
#include "../Config.h"
|
||||||
#include "../utils/Platform.h"
|
#include "../utils/Platform.h"
|
||||||
|
@ -89,7 +89,24 @@ bool obs_module_load(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void obs_module_unload()
|
#ifdef PLUGIN_TESTS
|
||||||
|
void test_register_vendor();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void obs_module_post_load(void)
|
||||||
|
{
|
||||||
|
#ifdef PLUGIN_TESTS
|
||||||
|
test_register_vendor();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Server will accept clients, but requests and events will not be served until FINISHED_LOADING occurs
|
||||||
|
if (_config->ServerEnabled) {
|
||||||
|
blog(LOG_INFO, "[obs_module_post_load] WebSocket server is enabled, starting...");
|
||||||
|
_webSocketServer->Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void obs_module_unload(void)
|
||||||
{
|
{
|
||||||
blog(LOG_INFO, "[obs_module_unload] Shutting down...");
|
blog(LOG_INFO, "[obs_module_unload] Shutting down...");
|
||||||
|
|
||||||
@ -108,8 +125,7 @@ void obs_module_unload()
|
|||||||
// Destroy the event handler
|
// Destroy the event handler
|
||||||
_eventHandler.reset();
|
_eventHandler.reset();
|
||||||
|
|
||||||
// Save and destroy the config manager
|
// Destroy the config manager
|
||||||
_config->Save();
|
|
||||||
_config.reset();
|
_config.reset();
|
||||||
|
|
||||||
// Destroy the cpu stats
|
// Destroy the cpu stats
|
||||||
@ -193,18 +209,18 @@ static void test_vendor_request_cb(obs_data_t *requestData, obs_data_t *response
|
|||||||
obs_websocket_vendor_emit_event(priv_data, "TestEvent", requestData);
|
obs_websocket_vendor_emit_event(priv_data, "TestEvent", requestData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void obs_module_post_load()
|
void test_register_vendor()
|
||||||
{
|
{
|
||||||
blog(LOG_INFO, "[obs_module_post_load] Post load started.");
|
blog(LOG_INFO, "[test_register_vendor] Registering test vendor...");
|
||||||
|
|
||||||
// Test plugin API version fetch
|
// Test plugin API version fetch
|
||||||
uint apiVersion = obs_websocket_get_api_version();
|
uint apiVersion = obs_websocket_get_api_version();
|
||||||
blog(LOG_INFO, "[obs_module_post_load] obs-websocket plugin API version: %u", apiVersion);
|
blog(LOG_INFO, "[test_register_vendor] obs-websocket plugin API version: %u", apiVersion);
|
||||||
|
|
||||||
// Test calling obs-websocket requests
|
// Test calling obs-websocket requests
|
||||||
struct obs_websocket_request_response *response = obs_websocket_call_request("GetVersion");
|
struct obs_websocket_request_response *response = obs_websocket_call_request("GetVersion");
|
||||||
if (response) {
|
if (response) {
|
||||||
blog(LOG_INFO, "[obs_module_post_load] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s",
|
blog(LOG_INFO, "[test_register_vendor] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s",
|
||||||
response->status_code, response->comment, response->response_data);
|
response->status_code, response->comment, response->response_data);
|
||||||
obs_websocket_request_response_free(response);
|
obs_websocket_request_response_free(response);
|
||||||
}
|
}
|
||||||
@ -212,17 +228,17 @@ void obs_module_post_load()
|
|||||||
// Test vendor creation
|
// Test vendor creation
|
||||||
auto vendor = obs_websocket_register_vendor("obs-websocket-test");
|
auto vendor = obs_websocket_register_vendor("obs-websocket-test");
|
||||||
if (!vendor) {
|
if (!vendor) {
|
||||||
blog(LOG_WARNING, "[obs_module_post_load] Failed to create vendor!");
|
blog(LOG_WARNING, "[test_register_vendor] Failed to create vendor!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test vendor request registration
|
// Test vendor request registration
|
||||||
if (!obs_websocket_vendor_register_request(vendor, "TestRequest", test_vendor_request_cb, vendor)) {
|
if (!obs_websocket_vendor_register_request(vendor, "TestRequest", test_vendor_request_cb, vendor)) {
|
||||||
blog(LOG_WARNING, "[obs_module_post_load] Failed to register vendor request!");
|
blog(LOG_WARNING, "[test_register_vendor] Failed to register vendor request!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
blog(LOG_INFO, "[obs_module_post_load] Post load completed.");
|
blog(LOG_INFO, "[test_register_vendor] Post load completed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -31,17 +31,13 @@ struct SerialFrameBatch {
|
|||||||
json &variables;
|
json &variables;
|
||||||
bool haltOnFailure;
|
bool haltOnFailure;
|
||||||
|
|
||||||
size_t frameCount;
|
size_t frameCount = 0;
|
||||||
size_t sleepUntilFrame;
|
size_t sleepUntilFrame = 0;
|
||||||
std::mutex conditionMutex;
|
std::mutex conditionMutex;
|
||||||
std::condition_variable condition;
|
std::condition_variable condition;
|
||||||
|
|
||||||
SerialFrameBatch(RequestHandler &requestHandler, json &variables, bool haltOnFailure)
|
SerialFrameBatch(RequestHandler &requestHandler, json &variables, bool haltOnFailure)
|
||||||
: requestHandler(requestHandler),
|
: requestHandler(requestHandler), variables(variables), haltOnFailure(haltOnFailure)
|
||||||
variables(variables),
|
|
||||||
haltOnFailure(haltOnFailure),
|
|
||||||
frameCount(0),
|
|
||||||
sleepUntilFrame(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -33,6 +33,8 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
|
|||||||
{"TriggerHotkeyByName", &RequestHandler::TriggerHotkeyByName},
|
{"TriggerHotkeyByName", &RequestHandler::TriggerHotkeyByName},
|
||||||
{"TriggerHotkeyByKeySequence", &RequestHandler::TriggerHotkeyByKeySequence},
|
{"TriggerHotkeyByKeySequence", &RequestHandler::TriggerHotkeyByKeySequence},
|
||||||
{"Sleep", &RequestHandler::Sleep},
|
{"Sleep", &RequestHandler::Sleep},
|
||||||
|
{"Compare", &RequestHandler::Compare},
|
||||||
|
{"Assert", &RequestHandler::Assert},
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
{"GetPersistentData", &RequestHandler::GetPersistentData},
|
{"GetPersistentData", &RequestHandler::GetPersistentData},
|
||||||
@ -51,6 +53,7 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
|
|||||||
{"GetStreamServiceSettings", &RequestHandler::GetStreamServiceSettings},
|
{"GetStreamServiceSettings", &RequestHandler::GetStreamServiceSettings},
|
||||||
{"SetStreamServiceSettings", &RequestHandler::SetStreamServiceSettings},
|
{"SetStreamServiceSettings", &RequestHandler::SetStreamServiceSettings},
|
||||||
{"GetRecordDirectory", &RequestHandler::GetRecordDirectory},
|
{"GetRecordDirectory", &RequestHandler::GetRecordDirectory},
|
||||||
|
{"SetRecordDirectory", &RequestHandler::SetRecordDirectory},
|
||||||
|
|
||||||
// Sources
|
// Sources
|
||||||
{"GetSourceActive", &RequestHandler::GetSourceActive},
|
{"GetSourceActive", &RequestHandler::GetSourceActive},
|
||||||
@ -110,6 +113,7 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
|
|||||||
{"SetTBarPosition", &RequestHandler::SetTBarPosition},
|
{"SetTBarPosition", &RequestHandler::SetTBarPosition},
|
||||||
|
|
||||||
// Filters
|
// Filters
|
||||||
|
{"GetSourceFilterKindList", &RequestHandler::GetSourceFilterKindList},
|
||||||
{"GetSourceFilterList", &RequestHandler::GetSourceFilterList},
|
{"GetSourceFilterList", &RequestHandler::GetSourceFilterList},
|
||||||
{"GetSourceFilterDefaultSettings", &RequestHandler::GetSourceFilterDefaultSettings},
|
{"GetSourceFilterDefaultSettings", &RequestHandler::GetSourceFilterDefaultSettings},
|
||||||
{"CreateSourceFilter", &RequestHandler::CreateSourceFilter},
|
{"CreateSourceFilter", &RequestHandler::CreateSourceFilter},
|
||||||
@ -220,9 +224,8 @@ RequestResult RequestHandler::ProcessRequest(const Request &request)
|
|||||||
std::vector<std::string> RequestHandler::GetRequestList()
|
std::vector<std::string> RequestHandler::GetRequestList()
|
||||||
{
|
{
|
||||||
std::vector<std::string> ret;
|
std::vector<std::string> ret;
|
||||||
for (auto const &[key, val] : _handlerMap) {
|
for (auto const &[key, val] : _handlerMap)
|
||||||
ret.push_back(key);
|
ret.push_back(key);
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,8 @@ private:
|
|||||||
RequestResult TriggerHotkeyByName(const Request &);
|
RequestResult TriggerHotkeyByName(const Request &);
|
||||||
RequestResult TriggerHotkeyByKeySequence(const Request &);
|
RequestResult TriggerHotkeyByKeySequence(const Request &);
|
||||||
RequestResult Sleep(const Request &);
|
RequestResult Sleep(const Request &);
|
||||||
|
RequestResult Compare(const Request &);
|
||||||
|
RequestResult Assert(const Request &);
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
RequestResult GetPersistentData(const Request &);
|
RequestResult GetPersistentData(const Request &);
|
||||||
@ -70,6 +72,7 @@ private:
|
|||||||
RequestResult GetStreamServiceSettings(const Request &);
|
RequestResult GetStreamServiceSettings(const Request &);
|
||||||
RequestResult SetStreamServiceSettings(const Request &);
|
RequestResult SetStreamServiceSettings(const Request &);
|
||||||
RequestResult GetRecordDirectory(const Request &);
|
RequestResult GetRecordDirectory(const Request &);
|
||||||
|
RequestResult SetRecordDirectory(const Request &);
|
||||||
|
|
||||||
// Sources
|
// Sources
|
||||||
RequestResult GetSourceActive(const Request &);
|
RequestResult GetSourceActive(const Request &);
|
||||||
@ -129,6 +132,7 @@ private:
|
|||||||
RequestResult SetTBarPosition(const Request &);
|
RequestResult SetTBarPosition(const Request &);
|
||||||
|
|
||||||
// Filters
|
// Filters
|
||||||
|
RequestResult GetSourceFilterKindList(const Request &);
|
||||||
RequestResult GetSourceFilterList(const Request &);
|
RequestResult GetSourceFilterList(const Request &);
|
||||||
RequestResult GetSourceFilterDefaultSettings(const Request &);
|
RequestResult GetSourceFilterDefaultSettings(const Request &);
|
||||||
RequestResult CreateSourceFilter(const Request &);
|
RequestResult CreateSourceFilter(const Request &);
|
||||||
|
@ -622,7 +622,7 @@ RequestResult RequestHandler::SetStreamServiceSettings(const Request &request)
|
|||||||
* @responseField recordDirectory | String | Output directory
|
* @responseField recordDirectory | String | Output directory
|
||||||
*
|
*
|
||||||
* @requestType GetRecordDirectory
|
* @requestType GetRecordDirectory
|
||||||
* @complexity 1
|
* @complexity 2
|
||||||
* @rpcVersion -1
|
* @rpcVersion -1
|
||||||
* @initialVersion 5.0.0
|
* @initialVersion 5.0.0
|
||||||
* @api requests
|
* @api requests
|
||||||
@ -635,3 +635,35 @@ RequestResult RequestHandler::GetRecordDirectory(const Request &)
|
|||||||
|
|
||||||
return RequestResult::Success(responseData);
|
return RequestResult::Success(responseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current directory that the record output writes files to.
|
||||||
|
*
|
||||||
|
* @requestField recordDirectory | String | Output directory
|
||||||
|
*
|
||||||
|
* @requestType SetRecordDirectory
|
||||||
|
* @complexity 2
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.3.0
|
||||||
|
* @api requests
|
||||||
|
* @category config
|
||||||
|
*/
|
||||||
|
RequestResult RequestHandler::SetRecordDirectory(const Request &request)
|
||||||
|
{
|
||||||
|
if (obs_frontend_recording_active())
|
||||||
|
return RequestResult::Error(RequestStatus::OutputRunning);
|
||||||
|
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
if (!request.ValidateString("recordDirectory", statusCode, comment))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
std::string recordDirectory = request.RequestData["recordDirectory"];
|
||||||
|
|
||||||
|
config_t *config = obs_frontend_get_profile_config();
|
||||||
|
config_set_string(config, "AdvOut", "RecFilePath", recordDirectory.c_str());
|
||||||
|
config_set_string(config, "SimpleOutput", "FilePath", recordDirectory.c_str());
|
||||||
|
config_save(config);
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
@ -19,6 +19,27 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
|
|
||||||
#include "RequestHandler.h"
|
#include "RequestHandler.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an array of all available source filter kinds.
|
||||||
|
*
|
||||||
|
* Similar to `GetInputKindList`
|
||||||
|
*
|
||||||
|
* @responseField sourceFilterKinds | Array<String> | Array of source filter kinds
|
||||||
|
*
|
||||||
|
* @requestType GetSourceFilterKindList
|
||||||
|
* @complexity 2
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.4.0
|
||||||
|
* @api requests
|
||||||
|
* @category filters
|
||||||
|
*/
|
||||||
|
RequestResult RequestHandler::GetSourceFilterKindList(const Request &)
|
||||||
|
{
|
||||||
|
json responseData;
|
||||||
|
responseData["sourceFilterKinds"] = Utils::Obs::ArrayHelper::GetFilterKindList();
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an array of all of a source's filters.
|
* Gets an array of all of a source's filters.
|
||||||
*
|
*
|
||||||
|
@ -233,6 +233,7 @@ RequestResult RequestHandler::GetHotkeyList(const Request &)
|
|||||||
* Triggers a hotkey using its name. See `GetHotkeyList`
|
* Triggers a hotkey using its name. See `GetHotkeyList`
|
||||||
*
|
*
|
||||||
* @requestField hotkeyName | String | Name of the hotkey to trigger
|
* @requestField hotkeyName | String | Name of the hotkey to trigger
|
||||||
|
* @requestField ?contextName | String | Name of context of the hotkey to trigger
|
||||||
*
|
*
|
||||||
* @requestType TriggerHotkeyByName
|
* @requestType TriggerHotkeyByName
|
||||||
* @complexity 3
|
* @complexity 3
|
||||||
@ -248,7 +249,15 @@ RequestResult RequestHandler::TriggerHotkeyByName(const Request &request)
|
|||||||
if (!request.ValidateString("hotkeyName", statusCode, comment))
|
if (!request.ValidateString("hotkeyName", statusCode, comment))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
obs_hotkey_t *hotkey = Utils::Obs::SearchHelper::GetHotkeyByName(request.RequestData["hotkeyName"]);
|
std::string contextName;
|
||||||
|
if (request.Contains("contextName")) {
|
||||||
|
if (!request.ValidateOptionalString("contextName", statusCode, comment))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
contextName = request.RequestData["contextName"];
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_hotkey_t *hotkey = Utils::Obs::SearchHelper::GetHotkeyByName(request.RequestData["hotkeyName"], contextName);
|
||||||
if (!hotkey)
|
if (!hotkey)
|
||||||
return RequestResult::Error(RequestStatus::ResourceNotFound, "No hotkeys were found by that name.");
|
return RequestResult::Error(RequestStatus::ResourceNotFound, "No hotkeys were found by that name.");
|
||||||
|
|
||||||
@ -323,7 +332,9 @@ RequestResult RequestHandler::TriggerHotkeyByKeySequence(const Request &request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sleeps for a time duration or number of frames. Only available in request batches with types `SERIAL_REALTIME` or `SERIAL_FRAME`.
|
* Sleeps for a time duration or number of frames.
|
||||||
|
*
|
||||||
|
* Note: Only available in request batches with types `SERIAL_REALTIME` or `SERIAL_FRAME`.
|
||||||
*
|
*
|
||||||
* @requestField ?sleepMillis | Number | Number of milliseconds to sleep for (if `SERIAL_REALTIME` mode) | >= 0, <= 50000
|
* @requestField ?sleepMillis | Number | Number of milliseconds to sleep for (if `SERIAL_REALTIME` mode) | >= 0, <= 50000
|
||||||
* @requestField ?sleepFrames | Number | Number of frames to sleep for (if `SERIAL_FRAME` mode) | >= 0, <= 10000
|
* @requestField ?sleepFrames | Number | Number of frames to sleep for (if `SERIAL_FRAME` mode) | >= 0, <= 10000
|
||||||
@ -356,3 +367,63 @@ RequestResult RequestHandler::Sleep(const Request &request)
|
|||||||
return RequestResult::Error(RequestStatus::UnsupportedRequestBatchExecutionType);
|
return RequestResult::Error(RequestStatus::UnsupportedRequestBatchExecutionType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares the values of the two request fields, `left` and `right`.
|
||||||
|
*
|
||||||
|
* Note: Only available in request batches with types `SERIAL_REALTIME` or `SERIAL_FRAME`.
|
||||||
|
*
|
||||||
|
* @requestField left | Any | First request batch variable in comparison
|
||||||
|
* @requestField right | Any | Second request batch variable in comparison
|
||||||
|
*
|
||||||
|
* @responseField result | Boolean | Whether the comparison is equal
|
||||||
|
*
|
||||||
|
* @requestType Compare
|
||||||
|
* @complexity 4
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.4.0
|
||||||
|
* @category general
|
||||||
|
* @api requests
|
||||||
|
*/
|
||||||
|
RequestResult RequestHandler::Compare(const Request &request)
|
||||||
|
{
|
||||||
|
if (!request.RequestData.contains("left") || !request.RequestData.contains("right"))
|
||||||
|
return RequestResult::Error(RequestStatus::MissingRequestField, "One or more sides of the comparison are missing.");
|
||||||
|
|
||||||
|
bool result = request.RequestData["left"] == request.RequestData["right"];
|
||||||
|
|
||||||
|
json responseData;
|
||||||
|
responseData["result"] = result;
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an error if the value of `check` is not `true`.
|
||||||
|
*
|
||||||
|
* This can be useful to interrupt a request batch from proceeding if an assumed state does not match real-world state.
|
||||||
|
*
|
||||||
|
* Note: Only available in request batches with types `SERIAL_REALTIME` or `SERIAL_FRAME`.
|
||||||
|
*
|
||||||
|
* @requestField check | Boolean | Value to assert to be true
|
||||||
|
*
|
||||||
|
* @requestType Assert
|
||||||
|
* @complexity 4
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.4.0
|
||||||
|
* @category general
|
||||||
|
* @api requests
|
||||||
|
*/
|
||||||
|
RequestResult RequestHandler::Assert(const Request &request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
if (!request.ValidateBoolean("check", statusCode, comment))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
bool check = request.RequestData["check"];
|
||||||
|
if (!check)
|
||||||
|
return RequestResult::Error(RequestStatus::AssertFailed, "Assertion failed.");
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
@ -54,6 +54,8 @@ RequestResult RequestHandler::GetRecordStatus(const Request &)
|
|||||||
/**
|
/**
|
||||||
* Toggles the status of the record output.
|
* Toggles the status of the record output.
|
||||||
*
|
*
|
||||||
|
* @responseField outputActive | Boolean | The new active state of the output
|
||||||
|
*
|
||||||
* @requestType ToggleRecord
|
* @requestType ToggleRecord
|
||||||
* @complexity 1
|
* @complexity 1
|
||||||
* @rpcVersion -1
|
* @rpcVersion -1
|
||||||
|
@ -317,7 +317,7 @@ RequestResult RequestHandler::GetSceneSceneTransitionOverride(const Request &req
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the scene transition overridden for a scene.
|
* Sets the scene transition overridden for a scene.
|
||||||
*
|
*
|
||||||
* @requestField sceneName | String | Name of the scene
|
* @requestField sceneName | String | Name of the scene
|
||||||
* @requestField ?transitionName | String | Name of the scene transition to use as override. Specify `null` to remove | Unchanged
|
* @requestField ?transitionName | String | Name of the scene transition to use as override. Specify `null` to remove | Unchanged
|
||||||
|
@ -44,12 +44,16 @@ RequestResult RequestHandler::GetStreamStatus(const Request &)
|
|||||||
|
|
||||||
uint64_t outputDuration = Utils::Obs::NumberHelper::GetOutputDuration(streamOutput);
|
uint64_t outputDuration = Utils::Obs::NumberHelper::GetOutputDuration(streamOutput);
|
||||||
|
|
||||||
|
float outputCongestion = obs_output_get_congestion(streamOutput);
|
||||||
|
if (std::isnan(outputCongestion)) // libobs does not handle NaN, so we're handling it here
|
||||||
|
outputCongestion = 0.0f;
|
||||||
|
|
||||||
json responseData;
|
json responseData;
|
||||||
responseData["outputActive"] = obs_output_active(streamOutput);
|
responseData["outputActive"] = obs_output_active(streamOutput);
|
||||||
responseData["outputReconnecting"] = obs_output_reconnecting(streamOutput);
|
responseData["outputReconnecting"] = obs_output_reconnecting(streamOutput);
|
||||||
responseData["outputTimecode"] = Utils::Obs::StringHelper::DurationToTimecode(outputDuration);
|
responseData["outputTimecode"] = Utils::Obs::StringHelper::DurationToTimecode(outputDuration);
|
||||||
responseData["outputDuration"] = outputDuration;
|
responseData["outputDuration"] = outputDuration;
|
||||||
responseData["outputCongestion"] = obs_output_get_congestion(streamOutput);
|
responseData["outputCongestion"] = outputCongestion;
|
||||||
responseData["outputBytes"] = (uint64_t)obs_output_get_total_bytes(streamOutput);
|
responseData["outputBytes"] = (uint64_t)obs_output_get_total_bytes(streamOutput);
|
||||||
responseData["outputSkippedFrames"] = obs_output_get_frames_dropped(streamOutput);
|
responseData["outputSkippedFrames"] = obs_output_get_frames_dropped(streamOutput);
|
||||||
responseData["outputTotalFrames"] = obs_output_get_total_frames(streamOutput);
|
responseData["outputTotalFrames"] = obs_output_get_total_frames(streamOutput);
|
||||||
|
@ -415,5 +415,16 @@ namespace RequestStatus {
|
|||||||
* @api enums
|
* @api enums
|
||||||
*/
|
*/
|
||||||
CannotAct = 703,
|
CannotAct = 703,
|
||||||
|
/**
|
||||||
|
* Assertion failed.
|
||||||
|
*
|
||||||
|
* @enumIdentifier AssertFailed
|
||||||
|
* @enumValue 704
|
||||||
|
* @enumType RequestStatus
|
||||||
|
* @rpcVersion -1
|
||||||
|
* @initialVersion 5.4.0
|
||||||
|
* @api enums
|
||||||
|
*/
|
||||||
|
AssertFailed = 704,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,7 @@ namespace Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace SearchHelper {
|
namespace SearchHelper {
|
||||||
obs_hotkey_t *GetHotkeyByName(std::string name);
|
obs_hotkey_t *GetHotkeyByName(std::string name, std::string context);
|
||||||
obs_source_t *GetSceneTransitionByName(std::string name); // Increments source ref. Use OBSSourceAutoRelease
|
obs_source_t *GetSceneTransitionByName(std::string name); // Increments source ref. Use OBSSourceAutoRelease
|
||||||
obs_sceneitem_t *GetSceneItemByName(obs_scene_t *scene, std::string name,
|
obs_sceneitem_t *GetSceneItemByName(obs_scene_t *scene, std::string name,
|
||||||
int offset = 0); // Increments ref. Use OBSSceneItemAutoRelease
|
int offset = 0); // Increments ref. Use OBSSceneItemAutoRelease
|
||||||
|
@ -19,7 +19,7 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#include "Obs.h"
|
#include "Obs.h"
|
||||||
#include "plugin-macros.generated.h"
|
#include "plugin-macros.generated.h"
|
||||||
|
|
||||||
obs_hotkey_t *Utils::Obs::SearchHelper::GetHotkeyByName(std::string name)
|
obs_hotkey_t *Utils::Obs::SearchHelper::GetHotkeyByName(std::string name, std::string context)
|
||||||
{
|
{
|
||||||
if (name.empty())
|
if (name.empty())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -27,7 +27,46 @@ obs_hotkey_t *Utils::Obs::SearchHelper::GetHotkeyByName(std::string name)
|
|||||||
auto hotkeys = ArrayHelper::GetHotkeyList();
|
auto hotkeys = ArrayHelper::GetHotkeyList();
|
||||||
|
|
||||||
for (auto hotkey : hotkeys) {
|
for (auto hotkey : hotkeys) {
|
||||||
if (obs_hotkey_get_name(hotkey) == name)
|
if (obs_hotkey_get_name(hotkey) != name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (context.empty())
|
||||||
|
return hotkey;
|
||||||
|
|
||||||
|
auto type = obs_hotkey_get_registerer_type(hotkey);
|
||||||
|
if (type == OBS_HOTKEY_REGISTERER_SOURCE) {
|
||||||
|
OBSSourceAutoRelease source = obs_weak_source_get_source((obs_weak_source_t *)obs_hotkey_get_registerer(hotkey));
|
||||||
|
if (!source)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (context != obs_source_get_name(source))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
} else if (type == OBS_HOTKEY_REGISTERER_OUTPUT) {
|
||||||
|
OBSOutputAutoRelease output = obs_weak_output_get_output((obs_weak_output_t *)obs_hotkey_get_registerer(hotkey));
|
||||||
|
if (!output)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (context != obs_output_get_name(output))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
} else if (type == OBS_HOTKEY_REGISTERER_ENCODER) {
|
||||||
|
OBSEncoderAutoRelease encoder = obs_weak_encoder_get_encoder((obs_weak_encoder_t *)obs_hotkey_get_registerer(hotkey));
|
||||||
|
if (!encoder)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (context != obs_encoder_get_name(encoder))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
} else if (type == OBS_HOTKEY_REGISTERER_SERVICE) {
|
||||||
|
OBSServiceAutoRelease service = obs_weak_service_get_service((obs_weak_service_t *)obs_hotkey_get_registerer(hotkey));
|
||||||
|
if (!service)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (context != obs_service_get_name(service))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
return hotkey;
|
return hotkey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,11 +116,12 @@ void Utils::Platform::SendTrayNotification(QSystemTrayIcon::MessageIcon icon, QS
|
|||||||
obs_queue_task(
|
obs_queue_task(
|
||||||
OBS_TASK_UI,
|
OBS_TASK_UI,
|
||||||
[](void *param) {
|
[](void *param) {
|
||||||
void *systemTrayPtr = obs_frontend_get_system_tray();
|
|
||||||
auto systemTray = static_cast<QSystemTrayIcon *>(systemTrayPtr);
|
|
||||||
|
|
||||||
auto notification = static_cast<SystemTrayNotification *>(param);
|
auto notification = static_cast<SystemTrayNotification *>(param);
|
||||||
|
void *systemTrayPtr = obs_frontend_get_system_tray();
|
||||||
|
if (systemTrayPtr) {
|
||||||
|
auto systemTray = static_cast<QSystemTrayIcon *>(systemTrayPtr);
|
||||||
systemTray->showMessage(notification->title, notification->body, notification->icon);
|
systemTray->showMessage(notification->title, notification->body, notification->icon);
|
||||||
|
}
|
||||||
delete notification;
|
delete notification;
|
||||||
},
|
},
|
||||||
(void *)notification, false);
|
(void *)notification, false);
|
||||||
|
@ -31,7 +31,7 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#include "../utils/Platform.h"
|
#include "../utils/Platform.h"
|
||||||
#include "../utils/Compat.h"
|
#include "../utils/Compat.h"
|
||||||
|
|
||||||
WebSocketServer::WebSocketServer() : QObject(nullptr), _sessions()
|
WebSocketServer::WebSocketServer() : QObject(nullptr)
|
||||||
{
|
{
|
||||||
_server.get_alog().clear_channels(websocketpp::log::alevel::all);
|
_server.get_alog().clear_channels(websocketpp::log::alevel::all);
|
||||||
_server.get_elog().clear_channels(websocketpp::log::elevel::all);
|
_server.get_elog().clear_channels(websocketpp::log::elevel::all);
|
||||||
@ -49,14 +49,21 @@ WebSocketServer::WebSocketServer() : QObject(nullptr), _sessions()
|
|||||||
websocketpp::lib::placeholders::_2));
|
websocketpp::lib::placeholders::_2));
|
||||||
|
|
||||||
auto eventHandler = GetEventHandler();
|
auto eventHandler = GetEventHandler();
|
||||||
|
if (eventHandler) {
|
||||||
eventHandler->SetBroadcastCallback(std::bind(&WebSocketServer::BroadcastEvent, this, std::placeholders::_1,
|
eventHandler->SetBroadcastCallback(std::bind(&WebSocketServer::BroadcastEvent, this, std::placeholders::_1,
|
||||||
std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
|
std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
|
||||||
|
eventHandler->SetObsReadyCallback(std::bind(&WebSocketServer::onObsReady, this, std::placeholders::_1));
|
||||||
eventHandler->SetObsLoadedCallback(std::bind(&WebSocketServer::onObsLoaded, this));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WebSocketServer::~WebSocketServer()
|
WebSocketServer::~WebSocketServer()
|
||||||
{
|
{
|
||||||
|
auto eventHandler = GetEventHandler();
|
||||||
|
if (eventHandler) {
|
||||||
|
eventHandler->SetObsReadyCallback(nullptr);
|
||||||
|
eventHandler->SetBroadcastCallback(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
if (_server.is_listening())
|
if (_server.is_listening())
|
||||||
Stop();
|
Stop();
|
||||||
}
|
}
|
||||||
@ -113,6 +120,10 @@ void WebSocketServer::Start()
|
|||||||
} else {
|
} else {
|
||||||
blog(LOG_INFO, "[WebSocketServer::Start] Not locked to IPv4 bindings");
|
blog(LOG_INFO, "[WebSocketServer::Start] Not locked to IPv4 bindings");
|
||||||
_server.listen(conf->ServerPort, errorCode);
|
_server.listen(conf->ServerPort, errorCode);
|
||||||
|
if (errorCode && errorCode == websocketpp::lib::asio::error::address_family_not_supported) {
|
||||||
|
blog(LOG_INFO, "[WebSocketServer::Start] IPv6 address family not supported, binding only to IPv4");
|
||||||
|
_server.listen(websocketpp::lib::asio::ip::tcp::v4(), conf->ServerPort, errorCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errorCode) {
|
if (errorCode) {
|
||||||
@ -158,9 +169,8 @@ void WebSocketServer::Stop()
|
|||||||
_threadPool.waitForDone();
|
_threadPool.waitForDone();
|
||||||
|
|
||||||
// This can delay the thread that it is running on. Bad but kinda required.
|
// This can delay the thread that it is running on. Bad but kinda required.
|
||||||
while (_sessions.size() > 0) {
|
while (_sessions.size() > 0)
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||||
}
|
|
||||||
|
|
||||||
_serverThread.join();
|
_serverThread.join();
|
||||||
|
|
||||||
@ -205,18 +215,9 @@ std::vector<WebSocketServer::WebSocketSessionState> WebSocketServer::GetWebSocke
|
|||||||
return webSocketSessions;
|
return webSocketSessions;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebSocketServer::onObsLoaded()
|
void WebSocketServer::onObsReady(bool ready)
|
||||||
{
|
{
|
||||||
auto conf = GetConfig();
|
_obsReady = ready;
|
||||||
if (!conf) {
|
|
||||||
blog(LOG_ERROR, "[WebSocketServer::onObsLoaded] Unable to retreive config!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conf->ServerEnabled) {
|
|
||||||
blog(LOG_INFO, "[WebSocketServer::onObsLoaded] WebSocket server is enabled, starting...");
|
|
||||||
Start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WebSocketServer::onValidate(websocketpp::connection_hdl hdl)
|
bool WebSocketServer::onValidate(websocketpp::connection_hdl hdl)
|
||||||
@ -266,7 +267,7 @@ void WebSocketServer::onOpen(websocketpp::connection_hdl hdl)
|
|||||||
json helloMessageData;
|
json helloMessageData;
|
||||||
helloMessageData["obsWebSocketVersion"] = OBS_WEBSOCKET_VERSION;
|
helloMessageData["obsWebSocketVersion"] = OBS_WEBSOCKET_VERSION;
|
||||||
helloMessageData["rpcVersion"] = OBS_WEBSOCKET_RPC_VERSION;
|
helloMessageData["rpcVersion"] = OBS_WEBSOCKET_RPC_VERSION;
|
||||||
if (conf->AuthRequired) {
|
if (session->AuthenticationRequired()) {
|
||||||
session->SetSecret(_authenticationSecret);
|
session->SetSecret(_authenticationSecret);
|
||||||
std::string sessionChallenge = Utils::Crypto::GenerateSalt();
|
std::string sessionChallenge = Utils::Crypto::GenerateSalt();
|
||||||
session->SetChallenge(sessionChallenge);
|
session->SetChallenge(sessionChallenge);
|
||||||
|
@ -77,7 +77,7 @@ private:
|
|||||||
|
|
||||||
void ServerRunner();
|
void ServerRunner();
|
||||||
|
|
||||||
void onObsLoaded();
|
void onObsReady(bool loaded);
|
||||||
bool onValidate(websocketpp::connection_hdl hdl);
|
bool onValidate(websocketpp::connection_hdl hdl);
|
||||||
void onOpen(websocketpp::connection_hdl hdl);
|
void onOpen(websocketpp::connection_hdl hdl);
|
||||||
void onClose(websocketpp::connection_hdl hdl);
|
void onClose(websocketpp::connection_hdl hdl);
|
||||||
@ -96,4 +96,6 @@ private:
|
|||||||
|
|
||||||
std::mutex _sessionMutex;
|
std::mutex _sessionMutex;
|
||||||
std::map<websocketpp::connection_hdl, SessionPtr, std::owner_less<websocketpp::connection_hdl>> _sessions;
|
std::map<websocketpp::connection_hdl, SessionPtr, std::owner_less<websocketpp::connection_hdl>> _sessions;
|
||||||
|
|
||||||
|
std::atomic<bool> _obsReady = false;
|
||||||
};
|
};
|
||||||
|
@ -82,7 +82,7 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Only `Identify` is allowed when not identified
|
// Only `Identify` is allowed when not identified
|
||||||
if (!session->IsIdentified() && opCode != 1) {
|
if (!session->IsIdentified() && opCode != WebSocketOpCode::Identify) {
|
||||||
ret.closeCode = WebSocketCloseCode::NotIdentified;
|
ret.closeCode = WebSocketCloseCode::NotIdentified;
|
||||||
ret.closeReason = "You attempted to send a non-Identify message while not identified.";
|
ret.closeReason = "You attempted to send a non-Identify message while not identified.";
|
||||||
return;
|
return;
|
||||||
@ -146,9 +146,8 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
session->SetRpcVersion(requestedRpcVersion);
|
session->SetRpcVersion(requestedRpcVersion);
|
||||||
|
|
||||||
SetSessionParameters(session, ret, payloadData);
|
SetSessionParameters(session, ret, payloadData);
|
||||||
if (ret.closeCode != WebSocketCloseCode::DontClose) {
|
if (ret.closeCode != WebSocketCloseCode::DontClose)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Increment refs for event subscriptions
|
// Increment refs for event subscriptions
|
||||||
auto eventHandler = GetEventHandler();
|
auto eventHandler = GetEventHandler();
|
||||||
@ -178,9 +177,8 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
eventHandler->ProcessUnsubscription(session->EventSubscriptions());
|
eventHandler->ProcessUnsubscription(session->EventSubscriptions());
|
||||||
|
|
||||||
SetSessionParameters(session, ret, payloadData);
|
SetSessionParameters(session, ret, payloadData);
|
||||||
if (ret.closeCode != WebSocketCloseCode::DontClose) {
|
if (ret.closeCode != WebSocketCloseCode::DontClose)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Increment refs for new subscriptions
|
// Increment refs for new subscriptions
|
||||||
eventHandler->ProcessSubscription(session->EventSubscriptions());
|
eventHandler->ProcessSubscription(session->EventSubscriptions());
|
||||||
@ -209,13 +207,17 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestHandler requestHandler(session);
|
|
||||||
|
|
||||||
std::string requestType = payloadData["requestType"];
|
std::string requestType = payloadData["requestType"];
|
||||||
|
RequestResult requestResult;
|
||||||
|
if (_obsReady) {
|
||||||
json requestData = payloadData["requestData"];
|
json requestData = payloadData["requestData"];
|
||||||
Request request(requestType, requestData);
|
Request request(requestType, requestData);
|
||||||
|
|
||||||
RequestResult requestResult = requestHandler.ProcessRequest(request);
|
RequestHandler requestHandler(session);
|
||||||
|
requestResult = requestHandler.ProcessRequest(request);
|
||||||
|
} else {
|
||||||
|
requestResult = RequestResult::Error(RequestStatus::NotReady, "OBS is not ready to perform the request.");
|
||||||
|
}
|
||||||
|
|
||||||
json resultPayloadData;
|
json resultPayloadData;
|
||||||
resultPayloadData["requestType"] = requestType;
|
resultPayloadData["requestType"] = requestType;
|
||||||
@ -303,7 +305,8 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<json> requests = payloadData["requests"];
|
std::vector<json> requests = payloadData["requests"];
|
||||||
|
std::vector<RequestResult> resultsVector;
|
||||||
|
if (_obsReady) {
|
||||||
std::vector<RequestBatchRequest> requestsVector;
|
std::vector<RequestBatchRequest> requestsVector;
|
||||||
for (auto &requestJson : requests) {
|
for (auto &requestJson : requests) {
|
||||||
if (!requestJson["requestType"].is_string())
|
if (!requestJson["requestType"].is_string())
|
||||||
@ -313,11 +316,22 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
json requestData = requestJson["requestData"];
|
json requestData = requestJson["requestData"];
|
||||||
json inputVariables = requestJson["inputVariables"];
|
json inputVariables = requestJson["inputVariables"];
|
||||||
json outputVariables = requestJson["outputVariables"];
|
json outputVariables = requestJson["outputVariables"];
|
||||||
requestsVector.emplace_back(requestType, requestData, executionType, inputVariables, outputVariables);
|
requestsVector.emplace_back(requestType, requestData, executionType, inputVariables,
|
||||||
|
outputVariables);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto resultsVector = RequestBatchHandler::ProcessRequestBatch(_threadPool, session, executionType, requestsVector,
|
resultsVector = RequestBatchHandler::ProcessRequestBatch(
|
||||||
payloadData["variables"], haltOnFailure);
|
_threadPool, session, executionType, requestsVector, payloadData["variables"], haltOnFailure);
|
||||||
|
} else {
|
||||||
|
// I lowkey hate this, but whatever
|
||||||
|
if (haltOnFailure) {
|
||||||
|
resultsVector.emplace_back(RequestStatus::NotReady, "OBS is not ready to perform the request.");
|
||||||
|
} else {
|
||||||
|
for (size_t i = 0; i < requests.size(); i++)
|
||||||
|
resultsVector.emplace_back(RequestStatus::NotReady,
|
||||||
|
"OBS is not ready to perform the request.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
std::vector<json> results;
|
std::vector<json> results;
|
||||||
@ -342,7 +356,7 @@ void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::Proces
|
|||||||
void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, const std::string &eventType, const json &eventData,
|
void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, const std::string &eventType, const json &eventData,
|
||||||
uint8_t rpcVersion)
|
uint8_t rpcVersion)
|
||||||
{
|
{
|
||||||
if (!_server.is_listening())
|
if (!_server.is_listening() || !_obsReady)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_threadPool.start(Utils::Compat::CreateFunctionRunnable([=]() {
|
_threadPool.start(Utils::Compat::CreateFunctionRunnable([=]() {
|
||||||
@ -361,19 +375,16 @@ void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, const std::string
|
|||||||
// Recurse connected sessions and send the event to suitable sessions.
|
// Recurse connected sessions and send the event to suitable sessions.
|
||||||
std::unique_lock<std::mutex> lock(_sessionMutex);
|
std::unique_lock<std::mutex> lock(_sessionMutex);
|
||||||
for (auto &it : _sessions) {
|
for (auto &it : _sessions) {
|
||||||
if (!it.second->IsIdentified()) {
|
if (!it.second->IsIdentified())
|
||||||
continue;
|
continue;
|
||||||
}
|
if (rpcVersion && it.second->RpcVersion() != rpcVersion)
|
||||||
if (rpcVersion && it.second->RpcVersion() != rpcVersion) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ((it.second->EventSubscriptions() & requiredIntent) != 0) {
|
if ((it.second->EventSubscriptions() & requiredIntent) != 0) {
|
||||||
websocketpp::lib::error_code errorCode;
|
websocketpp::lib::error_code errorCode;
|
||||||
switch (it.second->Encoding()) {
|
switch (it.second->Encoding()) {
|
||||||
case WebSocketEncoding::Json:
|
case WebSocketEncoding::Json:
|
||||||
if (messageJson.empty()) {
|
if (messageJson.empty())
|
||||||
messageJson = eventMessage.dump();
|
messageJson = eventMessage.dump();
|
||||||
}
|
|
||||||
_server.send((websocketpp::connection_hdl)it.first, messageJson,
|
_server.send((websocketpp::connection_hdl)it.first, messageJson,
|
||||||
websocketpp::frame::opcode::text, errorCode);
|
websocketpp::frame::opcode::text, errorCode);
|
||||||
it.second->IncrementOutgoingMessages();
|
it.second->IncrementOutgoingMessages();
|
||||||
|
@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
obs-websocket
|
|
||||||
Copyright (C) 2016-2021 Stephane Lepin <stephane.lepin@gmail.com>
|
|
||||||
Copyright (C) 2020-2021 Kyle Manning <tt2468@gmail.com>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program. If not, see <https://www.gnu.org/licenses/>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "WebSocketSession.h"
|
|
||||||
#include "../../eventhandler/types/EventSubscription.h"
|
|
||||||
|
|
||||||
WebSocketSession::WebSocketSession()
|
|
||||||
: _remoteAddress(""),
|
|
||||||
_connectedAt(0),
|
|
||||||
_incomingMessages(0),
|
|
||||||
_outgoingMessages(0),
|
|
||||||
_encoding(0),
|
|
||||||
_challenge(""),
|
|
||||||
_rpcVersion(OBS_WEBSOCKET_RPC_VERSION),
|
|
||||||
_isIdentified(false),
|
|
||||||
_eventSubscriptions(EventSubscription::All)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string WebSocketSession::RemoteAddress()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_remoteAddressMutex);
|
|
||||||
std::string ret(_remoteAddress);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetRemoteAddress(std::string address)
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_remoteAddressMutex);
|
|
||||||
_remoteAddress = address;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t WebSocketSession::ConnectedAt()
|
|
||||||
{
|
|
||||||
return _connectedAt.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetConnectedAt(uint64_t at)
|
|
||||||
{
|
|
||||||
_connectedAt.store(at);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t WebSocketSession::IncomingMessages()
|
|
||||||
{
|
|
||||||
return _incomingMessages.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::IncrementIncomingMessages()
|
|
||||||
{
|
|
||||||
_incomingMessages++;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t WebSocketSession::OutgoingMessages()
|
|
||||||
{
|
|
||||||
return _outgoingMessages.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::IncrementOutgoingMessages()
|
|
||||||
{
|
|
||||||
_outgoingMessages++;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t WebSocketSession::Encoding()
|
|
||||||
{
|
|
||||||
return _encoding.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetEncoding(uint8_t encoding)
|
|
||||||
{
|
|
||||||
_encoding.store(encoding);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WebSocketSession::AuthenticationRequired()
|
|
||||||
{
|
|
||||||
return _authenticationRequired.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetAuthenticationRequired(bool required)
|
|
||||||
{
|
|
||||||
_authenticationRequired.store(required);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string WebSocketSession::Secret()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_secretMutex);
|
|
||||||
std::string ret(_secret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetSecret(std::string secret)
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_secretMutex);
|
|
||||||
_secret = secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string WebSocketSession::Challenge()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_challengeMutex);
|
|
||||||
std::string ret(_challenge);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetChallenge(std::string challengeString)
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock(_challengeMutex);
|
|
||||||
_challenge = challengeString;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t WebSocketSession::RpcVersion()
|
|
||||||
{
|
|
||||||
return _rpcVersion.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetRpcVersion(uint8_t version)
|
|
||||||
{
|
|
||||||
_rpcVersion.store(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WebSocketSession::IsIdentified()
|
|
||||||
{
|
|
||||||
return _isIdentified.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetIsIdentified(bool identified)
|
|
||||||
{
|
|
||||||
_isIdentified.store(identified);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t WebSocketSession::EventSubscriptions()
|
|
||||||
{
|
|
||||||
return _eventSubscriptions.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebSocketSession::SetEventSubscriptions(uint64_t subscriptions)
|
|
||||||
{
|
|
||||||
_eventSubscriptions.store(subscriptions);
|
|
||||||
}
|
|
@ -24,6 +24,7 @@ with this program. If not, see <https://www.gnu.org/licenses/>
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#include "../../eventhandler/types/EventSubscription.h"
|
||||||
#include "plugin-macros.generated.h"
|
#include "plugin-macros.generated.h"
|
||||||
|
|
||||||
class WebSocketSession;
|
class WebSocketSession;
|
||||||
@ -31,56 +32,78 @@ typedef std::shared_ptr<WebSocketSession> SessionPtr;
|
|||||||
|
|
||||||
class WebSocketSession {
|
class WebSocketSession {
|
||||||
public:
|
public:
|
||||||
WebSocketSession();
|
inline std::string RemoteAddress()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_remoteAddressMutex);
|
||||||
|
return _remoteAddress;
|
||||||
|
}
|
||||||
|
inline void SetRemoteAddress(std::string address)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_remoteAddressMutex);
|
||||||
|
_remoteAddress = address;
|
||||||
|
}
|
||||||
|
|
||||||
std::string RemoteAddress();
|
inline uint64_t ConnectedAt() { return _connectedAt; }
|
||||||
void SetRemoteAddress(std::string address);
|
inline void SetConnectedAt(uint64_t at) { _connectedAt = at; }
|
||||||
|
|
||||||
uint64_t ConnectedAt();
|
inline uint64_t IncomingMessages() { return _incomingMessages; }
|
||||||
void SetConnectedAt(uint64_t at);
|
inline void IncrementIncomingMessages() { _incomingMessages++; }
|
||||||
|
|
||||||
uint64_t IncomingMessages();
|
inline uint64_t OutgoingMessages() { return _outgoingMessages; }
|
||||||
void IncrementIncomingMessages();
|
inline void IncrementOutgoingMessages() { _outgoingMessages++; }
|
||||||
|
|
||||||
uint64_t OutgoingMessages();
|
inline uint8_t Encoding() { return _encoding; }
|
||||||
void IncrementOutgoingMessages();
|
inline void SetEncoding(uint8_t encoding) { _encoding = encoding; }
|
||||||
|
|
||||||
uint8_t Encoding();
|
inline bool AuthenticationRequired() { return _authenticationRequired; }
|
||||||
void SetEncoding(uint8_t encoding);
|
inline void SetAuthenticationRequired(bool required) { _authenticationRequired = required; }
|
||||||
|
|
||||||
bool AuthenticationRequired();
|
inline std::string Secret()
|
||||||
void SetAuthenticationRequired(bool required);
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_secretMutex);
|
||||||
|
return _secret;
|
||||||
|
}
|
||||||
|
inline void SetSecret(std::string secret)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_secretMutex);
|
||||||
|
_secret = secret;
|
||||||
|
}
|
||||||
|
|
||||||
std::string Secret();
|
inline std::string Challenge()
|
||||||
void SetSecret(std::string secret);
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_challengeMutex);
|
||||||
|
return _challenge;
|
||||||
|
}
|
||||||
|
inline void SetChallenge(std::string challenge)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(_challengeMutex);
|
||||||
|
_challenge = challenge;
|
||||||
|
}
|
||||||
|
|
||||||
std::string Challenge();
|
inline uint8_t RpcVersion() { return _rpcVersion; }
|
||||||
void SetChallenge(std::string challenge);
|
inline void SetRpcVersion(uint8_t version) { _rpcVersion = version; }
|
||||||
|
|
||||||
uint8_t RpcVersion();
|
inline bool IsIdentified() { return _isIdentified; }
|
||||||
void SetRpcVersion(uint8_t version);
|
inline void SetIsIdentified(bool identified) { _isIdentified = identified; }
|
||||||
|
|
||||||
bool IsIdentified();
|
inline uint64_t EventSubscriptions() { return _eventSubscriptions; }
|
||||||
void SetIsIdentified(bool identified);
|
inline void SetEventSubscriptions(uint64_t subscriptions) { _eventSubscriptions = subscriptions; }
|
||||||
|
|
||||||
uint64_t EventSubscriptions();
|
|
||||||
void SetEventSubscriptions(uint64_t subscriptions);
|
|
||||||
|
|
||||||
std::mutex OperationMutex;
|
std::mutex OperationMutex;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::mutex _remoteAddressMutex;
|
std::mutex _remoteAddressMutex;
|
||||||
std::string _remoteAddress;
|
std::string _remoteAddress;
|
||||||
std::atomic<uint64_t> _connectedAt;
|
std::atomic<uint64_t> _connectedAt = 0;
|
||||||
std::atomic<uint64_t> _incomingMessages;
|
std::atomic<uint64_t> _incomingMessages = 0;
|
||||||
std::atomic<uint64_t> _outgoingMessages;
|
std::atomic<uint64_t> _outgoingMessages = 0;
|
||||||
std::atomic<uint8_t> _encoding;
|
std::atomic<uint8_t> _encoding = 0;
|
||||||
std::atomic<bool> _authenticationRequired;
|
std::atomic<bool> _authenticationRequired = false;
|
||||||
std::mutex _secretMutex;
|
std::mutex _secretMutex;
|
||||||
std::string _secret;
|
std::string _secret;
|
||||||
std::mutex _challengeMutex;
|
std::mutex _challengeMutex;
|
||||||
std::string _challenge;
|
std::string _challenge;
|
||||||
std::atomic<uint8_t> _rpcVersion;
|
std::atomic<uint8_t> _rpcVersion = OBS_WEBSOCKET_RPC_VERSION;
|
||||||
std::atomic<bool> _isIdentified;
|
std::atomic<bool> _isIdentified = false;
|
||||||
std::atomic<uint64_t> _eventSubscriptions;
|
std::atomic<uint64_t> _eventSubscriptions = EventSubscription::All;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user