obsws 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +23 -26
- data/lib/obsws/base.rb +12 -8
- data/lib/obsws/event.rb +10 -12
- data/lib/obsws/mixin.rb +5 -3
- data/lib/obsws/req.rb +213 -215
- data/lib/obsws/version.rb +4 -2
- metadata +7 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c125c30687cdcd22d868636a4d7bfbe7776939a8b4997842785b3868e7959151
|
4
|
+
data.tar.gz: 7f4c51a8231083c220c95d4e0fa34da8bf7712307adcd21b32565043a3e28d7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b14e996f1e06788e88b66d44fef72f06d5ba0ad07b38e83332a19dfa833c724f33ea2a2119336105cca63034f0a015e53a38b60d1049dc8745ae9be92d51028
|
7
|
+
data.tar.gz: bfd3821cefe5a515feca6746edb5d042141492061bfa6303f1c6daf56a2215d0c4ce076224bb3b7873879649fe96f36a4ee223e6aeae08020988f3d8790fe26c
|
data/README.md
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
[](https://badge.fury.io/rb/obsws)
|
2
2
|
[](https://github.com/onyx-and-iris/obsws-ruby/blob/dev/LICENSE)
|
3
|
-
[](https://github.com/standardrb/standard)
|
4
4
|
|
5
5
|
# A Ruby wrapper around OBS Studio WebSocket v5.0
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
9
|
-
-
|
10
|
-
-
|
11
|
-
|
12
|
-
-
|
9
|
+
- [OBS Studio](https://obsproject.com/)
|
10
|
+
- [OBS Websocket v5 Plugin](https://github.com/obsproject/obs-websocket/releases/tag/5.0.0)
|
11
|
+
- With the release of OBS Studio version 28, Websocket plugin is included by default. But it should be manually installed for earlier versions of OBS.
|
12
|
+
- Ruby 3.0 or greater
|
13
13
|
|
14
14
|
## Installation
|
15
15
|
|
@@ -28,42 +28,39 @@ bundle install
|
|
28
28
|
|
29
29
|
#### Example `main.rb`
|
30
30
|
|
31
|
-
|
31
|
+
Pass `host`, `port` and `password` as keyword arguments.
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
require "obsws"
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
OBSWS::Requests::Client
|
39
|
-
host: "localhost",
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
r_client.run do
|
45
|
-
# Toggle the mute state of your Mic input
|
46
|
-
r_client.toggle_input_mute("Mic/Aux")
|
36
|
+
class Main
|
37
|
+
def run
|
38
|
+
OBSWS::Requests::Client
|
39
|
+
.new(host: "localhost", port: 4455, password: "strongpassword")
|
40
|
+
.run do |client|
|
41
|
+
# Toggle the mute state of your Mic input
|
42
|
+
client.toggle_input_mute("Mic/Aux")
|
43
|
+
end
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
50
|
-
|
47
|
+
Main.new.run if $PROGRAM_NAME == __FILE__
|
51
48
|
```
|
52
49
|
|
50
|
+
Passing OBSWS::Requests::Client.run a block closes the socket once the block returns.
|
51
|
+
|
53
52
|
### Requests
|
54
53
|
|
55
|
-
Method names for requests match the API calls but snake cased.
|
54
|
+
Method names for requests match the API calls but snake cased.
|
56
55
|
|
57
56
|
example:
|
58
57
|
|
59
58
|
```ruby
|
60
|
-
|
61
|
-
|
62
|
-
resp = r_client.get_version
|
59
|
+
# GetVersion
|
60
|
+
resp = r_client.get_version
|
63
61
|
|
64
|
-
|
65
|
-
|
66
|
-
end
|
62
|
+
# SetCurrentProgramScene
|
63
|
+
r_client.set_current_program_scene("BRB")
|
67
64
|
```
|
68
65
|
|
69
66
|
For a full list of requests refer to [Requests](https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#requests)
|
@@ -140,4 +137,4 @@ bundle exec rake -v
|
|
140
137
|
|
141
138
|
For the full documentation:
|
142
139
|
|
143
|
-
-
|
140
|
+
- [OBS Websocket SDK](https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#obs-websocket-501-protocol)
|
data/lib/obsws/base.rb
CHANGED
@@ -2,7 +2,6 @@ require "socket"
|
|
2
2
|
require "websocket/driver"
|
3
3
|
require "digest/sha2"
|
4
4
|
require "json"
|
5
|
-
require "observer"
|
6
5
|
require "waitutil"
|
7
6
|
|
8
7
|
require_relative "mixin"
|
@@ -23,10 +22,10 @@ module OBSWS
|
|
23
22
|
end
|
24
23
|
|
25
24
|
class Base
|
26
|
-
include Observable
|
27
25
|
include Mixin::OPCodes
|
28
26
|
|
29
|
-
attr_reader :
|
27
|
+
attr_reader :closed
|
28
|
+
attr_writer :updater
|
30
29
|
|
31
30
|
def initialize(**kwargs)
|
32
31
|
host = kwargs[:host] || "localhost"
|
@@ -56,7 +55,7 @@ module OBSWS
|
|
56
55
|
) { @identified }
|
57
56
|
end
|
58
57
|
|
59
|
-
def start_driver
|
58
|
+
private def start_driver
|
60
59
|
Thread.new do
|
61
60
|
@driver.start
|
62
61
|
|
@@ -68,6 +67,12 @@ module OBSWS
|
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
70
|
+
public def stop_driver
|
71
|
+
@driver.close
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
71
76
|
def auth_token(salt:, challenge:)
|
72
77
|
Digest::SHA256.base64digest(
|
73
78
|
Digest::SHA256.base64digest(@password + salt) + challenge
|
@@ -99,12 +104,11 @@ module OBSWS
|
|
99
104
|
when Mixin::OPCodes::IDENTIFIED
|
100
105
|
@identified = true
|
101
106
|
when Mixin::OPCodes::EVENT, Mixin::OPCodes::REQUESTRESPONSE
|
102
|
-
|
103
|
-
notify_observers(data[:op], data[:d])
|
107
|
+
@updater.call(data[:op], data[:d])
|
104
108
|
end
|
105
109
|
end
|
106
110
|
|
107
|
-
def req(id, type_, data = nil)
|
111
|
+
public def req(id, type_, data = nil)
|
108
112
|
payload = {
|
109
113
|
op: Mixin::OPCodes::REQUEST,
|
110
114
|
d: {
|
@@ -114,7 +118,7 @@ module OBSWS
|
|
114
118
|
}
|
115
119
|
payload[:d][:requestData] = data if data
|
116
120
|
LOGGER.debug("sending request: #{payload}")
|
117
|
-
|
121
|
+
@driver.text(JSON.generate(payload))
|
118
122
|
end
|
119
123
|
end
|
120
124
|
end
|
data/lib/obsws/event.rb
CHANGED
@@ -20,7 +20,7 @@ module OBSWS
|
|
20
20
|
UI = 1 << 10
|
21
21
|
|
22
22
|
LOW_VOLUME = GENERAL | CONFIG | SCENES | INPUTS | TRANSITIONS | FILTERS | OUTPUTS |
|
23
|
-
|
23
|
+
SCENEITEMS | MEDIAINPUTS | VENDORS | UI
|
24
24
|
|
25
25
|
INPUTVOLUMEMETERS = 1 << 16
|
26
26
|
INPUTACTIVESTATECHANGED = 1 << 17
|
@@ -28,7 +28,7 @@ module OBSWS
|
|
28
28
|
SCENEITEMTRANSFORMCHANGED = 1 << 19
|
29
29
|
|
30
30
|
HIGH_VOLUME = INPUTVOLUMEMETERS | INPUTACTIVESTATECHANGED | INPUTSHOWSTATECHANGED |
|
31
|
-
|
31
|
+
SCENEITEMTRANSFORMCHANGED
|
32
32
|
|
33
33
|
ALL = LOW_VOLUME | HIGH_VOLUME
|
34
34
|
end
|
@@ -70,19 +70,17 @@ module OBSWS
|
|
70
70
|
kwargs[:subs] ||= SUBS::LOW_VOLUME
|
71
71
|
@base_client = Base.new(**kwargs)
|
72
72
|
LOGGER.info("#{self} succesfully identified with server")
|
73
|
-
@base_client.
|
73
|
+
@base_client.updater = ->(op_code, data) {
|
74
|
+
if op_code == Mixin::OPCodes::EVENT
|
75
|
+
event = data[:eventType]
|
76
|
+
data = data.fetch(:eventData, {})
|
77
|
+
notify_observers(event, Mixin::Data.new(data, data.keys))
|
78
|
+
end
|
79
|
+
}
|
74
80
|
end
|
75
81
|
|
76
82
|
def to_s
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
def update(op_code, data)
|
81
|
-
if op_code == Mixin::OPCodes::EVENT
|
82
|
-
event = data[:eventType]
|
83
|
-
data = data.key?(:eventData) ? data[:eventData] : {}
|
84
|
-
notify_observers(event, Mixin::Data.new(data, data.keys))
|
85
|
-
end
|
83
|
+
self.class.name.split("::").last(2).join("::")
|
86
84
|
end
|
87
85
|
end
|
88
86
|
end
|
data/lib/obsws/mixin.rb
CHANGED
@@ -18,7 +18,7 @@ module OBSWS
|
|
18
18
|
def initialize(resp, fields)
|
19
19
|
@resp = resp
|
20
20
|
@fields = fields
|
21
|
-
|
21
|
+
make_field_methods(*fields)
|
22
22
|
end
|
23
23
|
|
24
24
|
def empty? = @fields.empty?
|
@@ -33,9 +33,11 @@ module OBSWS
|
|
33
33
|
end
|
34
34
|
|
35
35
|
module TearDown
|
36
|
-
def
|
37
|
-
@base_client.
|
36
|
+
def stop_driver
|
37
|
+
@base_client.stop_driver
|
38
38
|
end
|
39
|
+
|
40
|
+
alias_method :close, :stop_driver
|
39
41
|
end
|
40
42
|
|
41
43
|
module OPCodes
|
data/lib/obsws/req.rb
CHANGED
@@ -15,18 +15,20 @@ module OBSWS
|
|
15
15
|
def initialize(**kwargs)
|
16
16
|
@base_client = Base.new(**kwargs)
|
17
17
|
LOGGER.info("#{self} succesfully identified with server")
|
18
|
-
@base_client.
|
19
|
-
|
18
|
+
@base_client.updater = ->(op_code, data) {
|
19
|
+
@response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
|
20
|
+
}
|
21
|
+
@response = {requestId: 0}
|
20
22
|
end
|
21
23
|
|
22
24
|
def to_s
|
23
|
-
|
25
|
+
self.class.name.split("::").last(2).join("::")
|
24
26
|
end
|
25
27
|
|
26
28
|
def run
|
27
|
-
yield
|
29
|
+
yield(self)
|
28
30
|
ensure
|
29
|
-
|
31
|
+
stop_driver
|
30
32
|
WaitUtil.wait_for_condition(
|
31
33
|
"driver to close",
|
32
34
|
delay_sec: 0.01,
|
@@ -34,10 +36,6 @@ module OBSWS
|
|
34
36
|
) { @base_client.closed }
|
35
37
|
end
|
36
38
|
|
37
|
-
def update(op_code, data)
|
38
|
-
@response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
|
39
|
-
end
|
40
|
-
|
41
39
|
def call(req, data = nil)
|
42
40
|
id = rand(1..1000)
|
43
41
|
@base_client.req(id, req, data)
|
@@ -63,34 +61,34 @@ module OBSWS
|
|
63
61
|
end
|
64
62
|
|
65
63
|
def get_version
|
66
|
-
resp = call(
|
64
|
+
resp = call(:GetVersion)
|
67
65
|
Mixin::Response.new(resp, resp.keys)
|
68
66
|
end
|
69
67
|
|
70
68
|
def get_stats
|
71
|
-
resp = call(
|
69
|
+
resp = call(:GetStats)
|
72
70
|
Mixin::Response.new(resp, resp.keys)
|
73
71
|
end
|
74
72
|
|
75
73
|
def broadcast_custom_event(data)
|
76
|
-
call(
|
74
|
+
call(:BroadcastCustomEvent, data)
|
77
75
|
end
|
78
76
|
|
79
|
-
def call_vendor_request(
|
80
|
-
payload = {
|
77
|
+
def call_vendor_request(vendor_name, request_type, data = nil)
|
78
|
+
payload = {vendorName: vendor_name, requestType: request_type}
|
81
79
|
payload[:requestData] = data if data
|
82
|
-
resp = call(
|
80
|
+
resp = call(:CallVendorRequest, payload)
|
83
81
|
Mixin::Response.new(resp, resp.keys)
|
84
82
|
end
|
85
83
|
|
86
84
|
def get_hotkey_list
|
87
|
-
resp = call(
|
85
|
+
resp = call(:GetHotkeyList)
|
88
86
|
Mixin::Response.new(resp, resp.keys)
|
89
87
|
end
|
90
88
|
|
91
89
|
def trigger_hotkey_by_name(name)
|
92
|
-
payload = {
|
93
|
-
call(
|
90
|
+
payload = {hotkeyName: name}
|
91
|
+
call(:TriggerHotkeyByName, payload)
|
94
92
|
end
|
95
93
|
|
96
94
|
def trigger_hotkey_by_key_sequence(
|
@@ -109,63 +107,63 @@ module OBSWS
|
|
109
107
|
cmd: press_cmd
|
110
108
|
}
|
111
109
|
}
|
112
|
-
call(
|
110
|
+
call(:TriggerHotkeyByKeySequence, payload)
|
113
111
|
end
|
114
112
|
|
115
113
|
def sleep(sleep_millis = nil, sleep_frames = nil)
|
116
|
-
payload = {
|
117
|
-
call(
|
114
|
+
payload = {sleepMillis: sleep_millis, sleepFrames: sleep_frames}
|
115
|
+
call(:Sleep, payload)
|
118
116
|
end
|
119
117
|
|
120
118
|
def get_persistent_data(realm, slot_name)
|
121
|
-
payload = {
|
122
|
-
resp = call(
|
119
|
+
payload = {realm: realm, slotName: slot_name}
|
120
|
+
resp = call(:GetPersistentData, payload)
|
123
121
|
Mixin::Response.new(resp, resp.keys)
|
124
122
|
end
|
125
123
|
|
126
124
|
def set_persistent_data(realm, slot_name, slot_value)
|
127
|
-
payload = {
|
128
|
-
call(
|
125
|
+
payload = {realm: realm, slotName: slot_name, slotValue: slot_value}
|
126
|
+
call(:SetPersistentData, payload)
|
129
127
|
end
|
130
128
|
|
131
129
|
def get_scene_collection_list
|
132
|
-
resp = call(
|
130
|
+
resp = call(:GetSceneCollectionList)
|
133
131
|
Mixin::Response.new(resp, resp.keys)
|
134
132
|
end
|
135
133
|
|
136
134
|
def set_current_scene_collection(name)
|
137
|
-
payload = {
|
138
|
-
call(
|
135
|
+
payload = {sceneCollectionName: name}
|
136
|
+
call(:SetCurrentSceneCollection, payload)
|
139
137
|
end
|
140
138
|
|
141
139
|
def create_scene_collection(name)
|
142
|
-
payload = {
|
143
|
-
call(
|
140
|
+
payload = {sceneCollectionName: name}
|
141
|
+
call(:CreateSceneCollection, payload)
|
144
142
|
end
|
145
143
|
|
146
144
|
def get_profile_list
|
147
|
-
resp = call(
|
145
|
+
resp = call(:GetProfileList)
|
148
146
|
Mixin::Response.new(resp, resp.keys)
|
149
147
|
end
|
150
148
|
|
151
149
|
def set_current_profile(name)
|
152
|
-
payload = {
|
153
|
-
call(
|
150
|
+
payload = {profileName: name}
|
151
|
+
call(:SetCurrentProfile, payload)
|
154
152
|
end
|
155
153
|
|
156
154
|
def create_profile(name)
|
157
|
-
payload = {
|
158
|
-
call(
|
155
|
+
payload = {profileName: name}
|
156
|
+
call(:CreateProfile, payload)
|
159
157
|
end
|
160
158
|
|
161
159
|
def remove_profile(name)
|
162
|
-
payload = {
|
163
|
-
call(
|
160
|
+
payload = {profileName: name}
|
161
|
+
call(:RemoveProfile, payload)
|
164
162
|
end
|
165
163
|
|
166
164
|
def get_profile_parameter(category, name)
|
167
|
-
payload = {
|
168
|
-
resp = call(
|
165
|
+
payload = {parameterCategory: category, parameterName: name}
|
166
|
+
resp = call(:GetProfileParameter, payload)
|
169
167
|
Mixin::Response.new(resp, resp.keys)
|
170
168
|
end
|
171
169
|
|
@@ -175,11 +173,11 @@ module OBSWS
|
|
175
173
|
parameterName: name,
|
176
174
|
parameterValue: value
|
177
175
|
}
|
178
|
-
call(
|
176
|
+
call(:SetProfileParameter, payload)
|
179
177
|
end
|
180
178
|
|
181
179
|
def get_video_settings
|
182
|
-
resp = call(
|
180
|
+
resp = call(:GetVideoSettings)
|
183
181
|
Mixin::Response.new(resp, resp.keys)
|
184
182
|
end
|
185
183
|
|
@@ -199,11 +197,11 @@ module OBSWS
|
|
199
197
|
outputWidth: out_width,
|
200
198
|
outputHeight: out_height
|
201
199
|
}
|
202
|
-
call(
|
200
|
+
call(:SetVideoSettings, payload)
|
203
201
|
end
|
204
202
|
|
205
203
|
def get_stream_service_settings
|
206
|
-
resp = call(
|
204
|
+
resp = call(:GetStreamServiceSettings)
|
207
205
|
Mixin::Response.new(resp, resp.keys)
|
208
206
|
end
|
209
207
|
|
@@ -212,17 +210,17 @@ module OBSWS
|
|
212
210
|
streamServiceType: ss_type,
|
213
211
|
streamServiceSettings: ss_settings
|
214
212
|
}
|
215
|
-
call(
|
213
|
+
call(:SetStreamServiceSettings, payload)
|
216
214
|
end
|
217
215
|
|
218
216
|
def get_record_directory
|
219
|
-
resp = call(
|
217
|
+
resp = call(:GetRecordDirectory)
|
220
218
|
Mixin::Response.new(resp, resp.keys)
|
221
219
|
end
|
222
220
|
|
223
221
|
def get_source_active(name)
|
224
|
-
payload = {
|
225
|
-
resp = call(
|
222
|
+
payload = {sourceName: name}
|
223
|
+
resp = call(:GetSourceActive, payload)
|
226
224
|
Mixin::Response.new(resp, resp.keys)
|
227
225
|
end
|
228
226
|
|
@@ -234,7 +232,7 @@ module OBSWS
|
|
234
232
|
imageHeight: height,
|
235
233
|
imageCompressionQuality: quality
|
236
234
|
}
|
237
|
-
resp = call(
|
235
|
+
resp = call(:GetSourceScreenshot, payload)
|
238
236
|
Mixin::Response.new(resp, resp.keys)
|
239
237
|
end
|
240
238
|
|
@@ -254,58 +252,58 @@ module OBSWS
|
|
254
252
|
imageHeight: height,
|
255
253
|
imageCompressionQuality: quality
|
256
254
|
}
|
257
|
-
resp = call(
|
255
|
+
resp = call(:SaveSourceScreenshot, payload)
|
258
256
|
Mixin::Response.new(resp, resp.keys)
|
259
257
|
end
|
260
258
|
|
261
259
|
def get_scene_list
|
262
|
-
resp = call(
|
260
|
+
resp = call(:GetSceneList)
|
263
261
|
Mixin::Response.new(resp, resp.keys)
|
264
262
|
end
|
265
263
|
|
266
264
|
def get_group_list
|
267
|
-
resp = call(
|
265
|
+
resp = call(:GetGroupList)
|
268
266
|
Mixin::Response.new(resp, resp.keys)
|
269
267
|
end
|
270
268
|
|
271
269
|
def get_current_program_scene
|
272
|
-
resp = call(
|
270
|
+
resp = call(:GetCurrentProgramScene)
|
273
271
|
Mixin::Response.new(resp, resp.keys)
|
274
272
|
end
|
275
273
|
|
276
274
|
def set_current_program_scene(name)
|
277
|
-
payload = {
|
278
|
-
call(
|
275
|
+
payload = {sceneName: name}
|
276
|
+
call(:SetCurrentProgramScene, payload)
|
279
277
|
end
|
280
278
|
|
281
279
|
def get_current_preview_scene
|
282
|
-
resp = call(
|
280
|
+
resp = call(:GetCurrentPreviewScene)
|
283
281
|
Mixin::Response.new(resp, resp.keys)
|
284
282
|
end
|
285
283
|
|
286
284
|
def set_current_preview_scene(name)
|
287
|
-
payload = {
|
288
|
-
call(
|
285
|
+
payload = {sceneName: name}
|
286
|
+
call(:SetCurrentPreviewScene, payload)
|
289
287
|
end
|
290
288
|
|
291
289
|
def create_scene(name)
|
292
|
-
payload = {
|
293
|
-
call(
|
290
|
+
payload = {sceneName: name}
|
291
|
+
call(:CreateScene, payload)
|
294
292
|
end
|
295
293
|
|
296
294
|
def remove_scene(name)
|
297
|
-
payload = {
|
298
|
-
call(
|
295
|
+
payload = {sceneName: name}
|
296
|
+
call(:RemoveScene, payload)
|
299
297
|
end
|
300
298
|
|
301
299
|
def set_scene_name(old_name, new_name)
|
302
|
-
payload = {
|
303
|
-
call(
|
300
|
+
payload = {sceneName: old_name, newSceneName: new_name}
|
301
|
+
call(:SetSceneName, payload)
|
304
302
|
end
|
305
303
|
|
306
304
|
def get_scene_scene_transition_override(name)
|
307
|
-
payload = {
|
308
|
-
resp = call(
|
305
|
+
payload = {sceneName: name}
|
306
|
+
resp = call(:GetSceneSceneTransitionOverride, payload)
|
309
307
|
Mixin::Response.new(resp, resp.keys)
|
310
308
|
end
|
311
309
|
|
@@ -315,23 +313,23 @@ module OBSWS
|
|
315
313
|
transitionName: tr_name,
|
316
314
|
transitionDuration: tr_duration
|
317
315
|
}
|
318
|
-
call(
|
316
|
+
call(:SetSceneSceneTransitionOverride, payload)
|
319
317
|
end
|
320
318
|
|
321
319
|
def get_input_list(kind = nil)
|
322
|
-
payload = {
|
323
|
-
resp = call(
|
320
|
+
payload = {inputKind: kind}
|
321
|
+
resp = call(:GetInputList, payload)
|
324
322
|
Mixin::Response.new(resp, resp.keys)
|
325
323
|
end
|
326
324
|
|
327
325
|
def get_input_kind_list(unversioned)
|
328
|
-
payload = {
|
329
|
-
resp = call(
|
326
|
+
payload = {unversioned: unversioned}
|
327
|
+
resp = call(:GetInputKindList, payload)
|
330
328
|
Mixin::Response.new(resp, resp.keys)
|
331
329
|
end
|
332
330
|
|
333
331
|
def get_special_inputs
|
334
|
-
resp = call(
|
332
|
+
resp = call(:GetSpecialInputs)
|
335
333
|
Mixin::Response.new(resp, resp.keys)
|
336
334
|
end
|
337
335
|
|
@@ -349,57 +347,57 @@ module OBSWS
|
|
349
347
|
inputSettings: input_settings,
|
350
348
|
sceneItemEnabled: scene_item_enabled
|
351
349
|
}
|
352
|
-
resp = call(
|
350
|
+
resp = call(:CreateInput, payload)
|
353
351
|
Mixin::Response.new(resp, resp.keys)
|
354
352
|
end
|
355
353
|
|
356
354
|
def remove_input(name)
|
357
|
-
payload = {
|
358
|
-
call(
|
355
|
+
payload = {inputName: name}
|
356
|
+
call(:RemoveInput, payload)
|
359
357
|
end
|
360
358
|
|
361
359
|
def set_input_name(old_name, new_name)
|
362
|
-
payload = {
|
363
|
-
call(
|
360
|
+
payload = {inputName: old_name, newInputName: new_name}
|
361
|
+
call(:SetInputName, payload)
|
364
362
|
end
|
365
363
|
|
366
364
|
def get_input_default_settings(kind)
|
367
|
-
payload = {
|
368
|
-
resp = call(
|
365
|
+
payload = {inputKind: kind}
|
366
|
+
resp = call(:GetInputDefaultSettings, payload)
|
369
367
|
Mixin::Response.new(resp, resp.keys)
|
370
368
|
end
|
371
369
|
|
372
370
|
def get_input_settings(name)
|
373
|
-
payload = {
|
374
|
-
resp = call(
|
371
|
+
payload = {inputName: name}
|
372
|
+
resp = call(:GetInputSettings, payload)
|
375
373
|
Mixin::Response.new(resp, resp.keys)
|
376
374
|
end
|
377
375
|
|
378
376
|
def set_input_settings(name, settings, overlay)
|
379
|
-
payload = {
|
380
|
-
call(
|
377
|
+
payload = {inputName: name, inputSettings: settings, overlay: overlay}
|
378
|
+
call(:SetInputSettings, payload)
|
381
379
|
end
|
382
380
|
|
383
381
|
def get_input_mute(name)
|
384
|
-
payload = {
|
385
|
-
resp = call(
|
382
|
+
payload = {inputName: name}
|
383
|
+
resp = call(:GetInputMute, payload)
|
386
384
|
Mixin::Response.new(resp, resp.keys)
|
387
385
|
end
|
388
386
|
|
389
387
|
def set_input_mute(name, muted)
|
390
|
-
payload = {
|
391
|
-
call(
|
388
|
+
payload = {inputName: name, inputMuted: muted}
|
389
|
+
call(:SetInputMute, payload)
|
392
390
|
end
|
393
391
|
|
394
392
|
def toggle_input_mute(name)
|
395
|
-
payload = {
|
396
|
-
resp = call(
|
393
|
+
payload = {inputName: name}
|
394
|
+
resp = call(:ToggleInputMute, payload)
|
397
395
|
Mixin::Response.new(resp, resp.keys)
|
398
396
|
end
|
399
397
|
|
400
398
|
def get_input_volume(name)
|
401
|
-
payload = {
|
402
|
-
resp = call(
|
399
|
+
payload = {inputName: name}
|
400
|
+
resp = call(:GetInputVolume, payload)
|
403
401
|
Mixin::Response.new(resp, resp.keys)
|
404
402
|
end
|
405
403
|
|
@@ -409,117 +407,117 @@ module OBSWS
|
|
409
407
|
inputVolumeMul: vol_mul,
|
410
408
|
inputVolumeDb: vol_db
|
411
409
|
}
|
412
|
-
call(
|
410
|
+
call(:SetInputVolume, payload)
|
413
411
|
end
|
414
412
|
|
415
413
|
def get_input_audio_balance(name)
|
416
|
-
payload = {
|
417
|
-
resp = call(
|
414
|
+
payload = {inputName: name}
|
415
|
+
resp = call(:GetInputAudioBalance, payload)
|
418
416
|
Mixin::Response.new(resp, resp.keys)
|
419
417
|
end
|
420
418
|
|
421
419
|
def set_input_audio_balance(name, balance)
|
422
|
-
payload = {
|
423
|
-
call(
|
420
|
+
payload = {inputName: name, inputAudioBalance: balance}
|
421
|
+
call(:SetInputAudioBalance, payload)
|
424
422
|
end
|
425
423
|
|
426
424
|
def get_input_audio_sync_offset(name)
|
427
|
-
payload = {
|
428
|
-
resp = call(
|
425
|
+
payload = {inputName: name}
|
426
|
+
resp = call(:GetInputAudioSyncOffset, payload)
|
429
427
|
Mixin::Response.new(resp, resp.keys)
|
430
428
|
end
|
431
429
|
|
432
430
|
def set_input_audio_sync_offset(name, offset)
|
433
|
-
payload = {
|
434
|
-
call(
|
431
|
+
payload = {inputName: name, inputAudioSyncOffset: offset}
|
432
|
+
call(:SetInputAudioSyncOffset, payload)
|
435
433
|
end
|
436
434
|
|
437
435
|
def get_input_audio_monitor_type(name)
|
438
|
-
payload = {
|
439
|
-
resp = call(
|
436
|
+
payload = {inputName: name}
|
437
|
+
resp = call(:GetInputAudioMonitorType, payload)
|
440
438
|
Mixin::Response.new(resp, resp.keys)
|
441
439
|
end
|
442
440
|
|
443
441
|
def set_input_audio_monitor_type(name, mon_type)
|
444
|
-
payload = {
|
445
|
-
call(
|
442
|
+
payload = {inputName: name, monitorType: mon_type}
|
443
|
+
call(:SetInputAudioMonitorType, payload)
|
446
444
|
end
|
447
445
|
|
448
446
|
def get_input_audio_tracks(name)
|
449
|
-
payload = {
|
450
|
-
resp = call(
|
447
|
+
payload = {inputName: name}
|
448
|
+
resp = call(:GetInputAudioTracks, payload)
|
451
449
|
Mixin::Response.new(resp, resp.keys)
|
452
450
|
end
|
453
451
|
|
454
452
|
def set_input_audio_tracks(name, track)
|
455
|
-
payload = {
|
456
|
-
call(
|
453
|
+
payload = {inputName: name, inputAudioTracks: track}
|
454
|
+
call(:SetInputAudioTracks, payload)
|
457
455
|
end
|
458
456
|
|
459
457
|
def get_input_properties_list_property_items(input_name, prop_name)
|
460
|
-
payload = {
|
461
|
-
resp = call(
|
458
|
+
payload = {inputName: input_name, propertyName: prop_name}
|
459
|
+
resp = call(:GetInputPropertiesListPropertyItems, payload)
|
462
460
|
Mixin::Response.new(resp, resp.keys)
|
463
461
|
end
|
464
462
|
|
465
463
|
def press_input_properties_button(input_name, prop_name)
|
466
|
-
payload = {
|
467
|
-
call(
|
464
|
+
payload = {inputName: input_name, propertyName: prop_name}
|
465
|
+
call(:PressInputPropertiesButton, payload)
|
468
466
|
end
|
469
467
|
|
470
468
|
def get_transition_kind_list
|
471
|
-
resp = call(
|
469
|
+
resp = call(:GetTransitionKindList)
|
472
470
|
Mixin::Response.new(resp, resp.keys)
|
473
471
|
end
|
474
472
|
|
475
473
|
def get_scene_transition_list
|
476
|
-
resp = call(
|
474
|
+
resp = call(:GetSceneTransitionList)
|
477
475
|
Mixin::Response.new(resp, resp.keys)
|
478
476
|
end
|
479
477
|
|
480
478
|
def get_current_scene_transition
|
481
|
-
resp = call(
|
479
|
+
resp = call(:GetCurrentSceneTransition)
|
482
480
|
Mixin::Response.new(resp, resp.keys)
|
483
481
|
end
|
484
482
|
|
485
483
|
def set_current_scene_transition(name)
|
486
|
-
payload = {
|
487
|
-
call(
|
484
|
+
payload = {transitionName: name}
|
485
|
+
call(:SetCurrentSceneTransition, payload)
|
488
486
|
end
|
489
487
|
|
490
488
|
def set_current_scene_transition_duration(duration)
|
491
|
-
payload = {
|
492
|
-
call(
|
489
|
+
payload = {transitionDuration: duration}
|
490
|
+
call(:SetCurrentSceneTransitionDuration, payload)
|
493
491
|
end
|
494
492
|
|
495
493
|
def set_current_scene_transition_settings(settings, overlay = nil)
|
496
|
-
payload = {
|
497
|
-
call(
|
494
|
+
payload = {transitionSettings: settings, overlay: overlay}
|
495
|
+
call(:SetCurrentSceneTransitionSettings, payload)
|
498
496
|
end
|
499
497
|
|
500
498
|
def get_current_scene_transition_cursor
|
501
|
-
resp = call(
|
499
|
+
resp = call(:GetCurrentSceneTransitionCursor)
|
502
500
|
Mixin::Response.new(resp, resp.keys)
|
503
501
|
end
|
504
502
|
|
505
503
|
def trigger_studio_mode_transition
|
506
|
-
call(
|
504
|
+
call(:TriggerStudioModeTransition)
|
507
505
|
end
|
508
506
|
|
509
507
|
def set_t_bar_position(pos, release = nil)
|
510
|
-
payload = {
|
511
|
-
call(
|
508
|
+
payload = {position: pos, release: release}
|
509
|
+
call(:SetTBarPosition, payload)
|
512
510
|
end
|
513
511
|
|
514
512
|
def get_source_filter_list(name)
|
515
|
-
payload = {
|
516
|
-
resp = call(
|
513
|
+
payload = {sourceName: name}
|
514
|
+
resp = call(:GetSourceFilterList, payload)
|
517
515
|
Mixin::Response.new(resp, resp.keys)
|
518
516
|
end
|
519
517
|
|
520
518
|
def get_source_filter_default_settings(kind)
|
521
|
-
payload = {
|
522
|
-
resp = call(
|
519
|
+
payload = {filterKind: kind}
|
520
|
+
resp = call(:GetSourceFilterDefaultSettings, payload)
|
523
521
|
Mixin::Response.new(resp, resp.keys)
|
524
522
|
end
|
525
523
|
|
@@ -535,12 +533,12 @@ module OBSWS
|
|
535
533
|
filterKind: filter_kind,
|
536
534
|
filterSettings: filter_settings
|
537
535
|
}
|
538
|
-
call(
|
536
|
+
call(:CreateSourceFilter, payload)
|
539
537
|
end
|
540
538
|
|
541
539
|
def remove_source_filter(source_name, filter_name)
|
542
|
-
payload = {
|
543
|
-
call(
|
540
|
+
payload = {sourceName: source_name, filterName: filter_name}
|
541
|
+
call(:RemoveSourceFilter, payload)
|
544
542
|
end
|
545
543
|
|
546
544
|
def set_source_filter_name(source_name, old_filter_name, new_filter_name)
|
@@ -549,12 +547,12 @@ module OBSWS
|
|
549
547
|
filterName: old_filter_name,
|
550
548
|
newFilterName: new_filter_name
|
551
549
|
}
|
552
|
-
call(
|
550
|
+
call(:SetSourceFilterName, payload)
|
553
551
|
end
|
554
552
|
|
555
553
|
def get_source_filter(source_name, filter_name)
|
556
|
-
payload = {
|
557
|
-
resp = call(
|
554
|
+
payload = {sourceName: source_name, filterName: filter_name}
|
555
|
+
resp = call(:GetSourceFilter, payload)
|
558
556
|
Mixin::Response.new(resp, resp.keys)
|
559
557
|
end
|
560
558
|
|
@@ -564,7 +562,7 @@ module OBSWS
|
|
564
562
|
filterName: filter_name,
|
565
563
|
filterIndex: filter_index
|
566
564
|
}
|
567
|
-
call(
|
565
|
+
call(:SetSourceFilterIndex, payload)
|
568
566
|
end
|
569
567
|
|
570
568
|
def set_source_filter_settings(
|
@@ -579,7 +577,7 @@ module OBSWS
|
|
579
577
|
filterSettings: settings,
|
580
578
|
overlay: overlay
|
581
579
|
}
|
582
|
-
call(
|
580
|
+
call(:SetSourceFilterSettings, payload)
|
583
581
|
end
|
584
582
|
|
585
583
|
def set_source_filter_enabled(source_name, filter_name, enabled)
|
@@ -588,18 +586,18 @@ module OBSWS
|
|
588
586
|
filterName: filter_name,
|
589
587
|
filterEnabled: enabled
|
590
588
|
}
|
591
|
-
call(
|
589
|
+
call(:SetSourceFilterEnabled, payload)
|
592
590
|
end
|
593
591
|
|
594
592
|
def get_scene_item_list(name)
|
595
|
-
payload = {
|
596
|
-
resp = call(
|
593
|
+
payload = {sceneName: name}
|
594
|
+
resp = call(:GetSceneItemList, payload)
|
597
595
|
Mixin::Response.new(resp, resp.keys)
|
598
596
|
end
|
599
597
|
|
600
598
|
def get_group_scene_item_list(name)
|
601
|
-
payload = {
|
602
|
-
resp = call(
|
599
|
+
payload = {sceneName: name}
|
600
|
+
resp = call(:GetGroupSceneItemList, payload)
|
603
601
|
Mixin::Response.new(resp, resp.keys)
|
604
602
|
end
|
605
603
|
|
@@ -609,7 +607,7 @@ module OBSWS
|
|
609
607
|
sourceName: source_name,
|
610
608
|
searchOffset: offset
|
611
609
|
}
|
612
|
-
resp = call(
|
610
|
+
resp = call(:GetSceneItemId, payload)
|
613
611
|
Mixin::Response.new(resp, resp.keys)
|
614
612
|
end
|
615
613
|
|
@@ -619,13 +617,13 @@ module OBSWS
|
|
619
617
|
sourceName: source_name,
|
620
618
|
sceneItemEnabled: enabled
|
621
619
|
}
|
622
|
-
resp = call(
|
620
|
+
resp = call(:CreateSceneItem, payload)
|
623
621
|
Mixin::Response.new(resp, resp.keys)
|
624
622
|
end
|
625
623
|
|
626
624
|
def remove_scene_item(scene_name, item_id)
|
627
|
-
payload = {
|
628
|
-
call(
|
625
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
626
|
+
call(:RemoveSceneItem, payload)
|
629
627
|
end
|
630
628
|
|
631
629
|
def duplicate_scene_item(scene_name, item_id, dest_scene_name = nil)
|
@@ -634,13 +632,13 @@ module OBSWS
|
|
634
632
|
sceneItemId: item_id,
|
635
633
|
destinationSceneName: dest_scene_name
|
636
634
|
}
|
637
|
-
resp = call(
|
635
|
+
resp = call(:DuplicateSceneItem, payload)
|
638
636
|
Mixin::Response.new(resp, resp.keys)
|
639
637
|
end
|
640
638
|
|
641
639
|
def get_scene_item_transform(scene_name, item_id)
|
642
|
-
payload = {
|
643
|
-
resp = call(
|
640
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
641
|
+
resp = call(:GetSceneItemTransform, payload)
|
644
642
|
Mixin::Response.new(resp, resp.keys)
|
645
643
|
end
|
646
644
|
|
@@ -650,12 +648,12 @@ module OBSWS
|
|
650
648
|
sceneItemId: item_id,
|
651
649
|
sceneItemTransform: transform
|
652
650
|
}
|
653
|
-
call(
|
651
|
+
call(:SetSceneItemTransform, payload)
|
654
652
|
end
|
655
653
|
|
656
654
|
def get_scene_item_enabled(scene_name, item_id)
|
657
|
-
payload = {
|
658
|
-
resp = call(
|
655
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
656
|
+
resp = call(:GetSceneItemEnabled, payload)
|
659
657
|
Mixin::Response.new(resp, resp.keys)
|
660
658
|
end
|
661
659
|
|
@@ -665,12 +663,12 @@ module OBSWS
|
|
665
663
|
sceneItemId: item_id,
|
666
664
|
sceneItemEnabled: enabled
|
667
665
|
}
|
668
|
-
call(
|
666
|
+
call(:SetSceneItemEnabled, payload)
|
669
667
|
end
|
670
668
|
|
671
669
|
def get_scene_item_locked(scene_name, item_id)
|
672
|
-
payload = {
|
673
|
-
resp = call(
|
670
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
671
|
+
resp = call(:GetSceneItemLocked, payload)
|
674
672
|
Mixin::Response.new(resp, resp.keys)
|
675
673
|
end
|
676
674
|
|
@@ -680,12 +678,12 @@ module OBSWS
|
|
680
678
|
sceneItemId: item_id,
|
681
679
|
sceneItemLocked: locked
|
682
680
|
}
|
683
|
-
call(
|
681
|
+
call(:SetSceneItemLocked, payload)
|
684
682
|
end
|
685
683
|
|
686
684
|
def get_scene_item_index(scene_name, item_id)
|
687
|
-
payload = {
|
688
|
-
resp = call(
|
685
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
686
|
+
resp = call(:GetSceneItemIndex, payload)
|
689
687
|
Mixin::Response.new(resp, resp.keys)
|
690
688
|
end
|
691
689
|
|
@@ -693,14 +691,14 @@ module OBSWS
|
|
693
691
|
payload = {
|
694
692
|
sceneName: scene_name,
|
695
693
|
sceneItemId: item_id,
|
696
|
-
|
694
|
+
sceneItemIndex: item_index
|
697
695
|
}
|
698
|
-
call(
|
696
|
+
call(:SetSceneItemIndex, payload)
|
699
697
|
end
|
700
698
|
|
701
699
|
def get_scene_item_blend_mode(scene_name, item_id)
|
702
|
-
payload = {
|
703
|
-
resp = call(
|
700
|
+
payload = {sceneName: scene_name, sceneItemId: item_id}
|
701
|
+
resp = call(:GetSceneItemBlendMode, payload)
|
704
702
|
Mixin::Response.new(resp, resp.keys)
|
705
703
|
end
|
706
704
|
|
@@ -710,192 +708,192 @@ module OBSWS
|
|
710
708
|
sceneItemId: item_id,
|
711
709
|
sceneItemBlendMode: blend
|
712
710
|
}
|
713
|
-
call(
|
711
|
+
call(:SetSceneItemBlendMode, payload)
|
714
712
|
end
|
715
713
|
|
716
714
|
def get_virtual_cam_status
|
717
|
-
resp = call(
|
715
|
+
resp = call(:GetVirtualCamStatus)
|
718
716
|
Mixin::Response.new(resp, resp.keys)
|
719
717
|
end
|
720
718
|
|
721
719
|
def toggle_virtual_cam
|
722
|
-
resp = call(
|
720
|
+
resp = call(:ToggleVirtualCam)
|
723
721
|
Mixin::Response.new(resp, resp.keys)
|
724
722
|
end
|
725
723
|
|
726
724
|
def start_virtual_cam
|
727
|
-
call(
|
725
|
+
call(:StartVirtualCam)
|
728
726
|
end
|
729
727
|
|
730
728
|
def stop_virtual_cam
|
731
|
-
call(
|
729
|
+
call(:StopVirtualCam)
|
732
730
|
end
|
733
731
|
|
734
732
|
def get_replay_buffer_status
|
735
|
-
resp = call(
|
733
|
+
resp = call(:GetReplayBufferStatus)
|
736
734
|
Mixin::Response.new(resp, resp.keys)
|
737
735
|
end
|
738
736
|
|
739
737
|
def toggle_replay_buffer
|
740
|
-
resp = call(
|
738
|
+
resp = call(:ToggleReplayBuffer)
|
741
739
|
Mixin::Response.new(resp, resp.keys)
|
742
740
|
end
|
743
741
|
|
744
742
|
def start_replay_buffer
|
745
|
-
call(
|
743
|
+
call(:StartReplayBuffer)
|
746
744
|
end
|
747
745
|
|
748
746
|
def stop_replay_buffer
|
749
|
-
call(
|
747
|
+
call(:StopReplayBuffer)
|
750
748
|
end
|
751
749
|
|
752
750
|
def save_replay_buffer
|
753
|
-
call(
|
751
|
+
call(:SaveReplayBuffer)
|
754
752
|
end
|
755
753
|
|
756
754
|
def get_last_replay_buffer_replay
|
757
|
-
resp = call(
|
755
|
+
resp = call(:GetLastReplayBufferReplay)
|
758
756
|
Mixin::Response.new(resp, resp.keys)
|
759
757
|
end
|
760
758
|
|
761
759
|
def get_output_list
|
762
|
-
resp = call(
|
760
|
+
resp = call(:GetOutputList)
|
763
761
|
Mixin::Response.new(resp, resp.keys)
|
764
762
|
end
|
765
763
|
|
766
764
|
def get_output_status(name)
|
767
|
-
payload = {
|
768
|
-
resp = call(
|
765
|
+
payload = {outputName: name}
|
766
|
+
resp = call(:GetOutputStatus, payload)
|
769
767
|
Mixin::Response.new(resp, resp.keys)
|
770
768
|
end
|
771
769
|
|
772
770
|
def toggle_output(name)
|
773
|
-
payload = {
|
774
|
-
resp = call(
|
771
|
+
payload = {outputName: name}
|
772
|
+
resp = call(:ToggleOutput, payload)
|
775
773
|
Mixin::Response.new(resp, resp.keys)
|
776
774
|
end
|
777
775
|
|
778
776
|
def start_output(name)
|
779
|
-
payload = {
|
780
|
-
call(
|
777
|
+
payload = {outputName: name}
|
778
|
+
call(:StartOutput, payload)
|
781
779
|
end
|
782
780
|
|
783
781
|
def stop_output(name)
|
784
|
-
payload = {
|
785
|
-
call(
|
782
|
+
payload = {outputName: name}
|
783
|
+
call(:StopOutput, payload)
|
786
784
|
end
|
787
785
|
|
788
786
|
def get_output_settings(name)
|
789
|
-
payload = {
|
790
|
-
resp = call(
|
787
|
+
payload = {outputName: name}
|
788
|
+
resp = call(:GetOutputSettings, payload)
|
791
789
|
Mixin::Response.new(resp, resp.keys)
|
792
790
|
end
|
793
791
|
|
794
792
|
def set_output_settings(name, settings)
|
795
|
-
payload = {
|
796
|
-
call(
|
793
|
+
payload = {outputName: name, outputSettings: settings}
|
794
|
+
call(:SetOutputSettings, payload)
|
797
795
|
end
|
798
796
|
|
799
797
|
def get_stream_status
|
800
|
-
resp = call(
|
798
|
+
resp = call(:GetStreamStatus)
|
801
799
|
Mixin::Response.new(resp, resp.keys)
|
802
800
|
end
|
803
801
|
|
804
802
|
def toggle_stream
|
805
|
-
resp = call(
|
803
|
+
resp = call(:ToggleStream)
|
806
804
|
Mixin::Response.new(resp, resp.keys)
|
807
805
|
end
|
808
806
|
|
809
807
|
def start_stream
|
810
|
-
call(
|
808
|
+
call(:StartStream)
|
811
809
|
end
|
812
810
|
|
813
811
|
def stop_stream
|
814
|
-
call(
|
812
|
+
call(:StopStream)
|
815
813
|
end
|
816
814
|
|
817
815
|
def send_stream_caption(caption)
|
818
|
-
call(
|
816
|
+
call(:SendStreamCaption)
|
819
817
|
end
|
820
818
|
|
821
819
|
def get_record_status
|
822
|
-
resp = call(
|
820
|
+
resp = call(:GetRecordStatus)
|
823
821
|
Mixin::Response.new(resp, resp.keys)
|
824
822
|
end
|
825
823
|
|
826
824
|
def toggle_record
|
827
|
-
call(
|
825
|
+
call(:ToggleRecord)
|
828
826
|
end
|
829
827
|
|
830
828
|
def start_record
|
831
|
-
call(
|
829
|
+
call(:StartRecord)
|
832
830
|
end
|
833
831
|
|
834
832
|
def stop_record
|
835
|
-
resp = call(
|
833
|
+
resp = call(:StopRecord)
|
836
834
|
Mixin::Response.new(resp, resp.keys)
|
837
835
|
end
|
838
836
|
|
839
837
|
def toggle_record_pause
|
840
|
-
call(
|
838
|
+
call(:ToggleRecordPause)
|
841
839
|
end
|
842
840
|
|
843
841
|
def pause_record
|
844
|
-
call(
|
842
|
+
call(:PauseRecord)
|
845
843
|
end
|
846
844
|
|
847
845
|
def resume_record
|
848
|
-
call(
|
846
|
+
call(:ResumeRecord)
|
849
847
|
end
|
850
848
|
|
851
849
|
def get_media_input_status(name)
|
852
|
-
payload = {
|
853
|
-
resp = call(
|
850
|
+
payload = {inputName: name}
|
851
|
+
resp = call(:GetMediaInputStatus, payload)
|
854
852
|
Mixin::Response.new(resp, resp.keys)
|
855
853
|
end
|
856
854
|
|
857
855
|
def set_media_input_cursor(name, cursor)
|
858
|
-
payload = {
|
859
|
-
call(
|
856
|
+
payload = {inputName: name, mediaCursor: cursor}
|
857
|
+
call(:SetMediaInputCursor, payload)
|
860
858
|
end
|
861
859
|
|
862
860
|
def offset_media_input_cursor(name, offset)
|
863
|
-
payload = {
|
864
|
-
call(
|
861
|
+
payload = {inputName: name, mediaCursorOffset: offset}
|
862
|
+
call(:OffsetMediaInputCursor, payload)
|
865
863
|
end
|
866
864
|
|
867
865
|
def trigger_media_input_action(name, action)
|
868
|
-
payload = {
|
869
|
-
call(
|
866
|
+
payload = {inputName: name, mediaAction: action}
|
867
|
+
call(:TriggerMediaInputAction, payload)
|
870
868
|
end
|
871
869
|
|
872
870
|
def get_studio_mode_enabled
|
873
|
-
resp = call(
|
871
|
+
resp = call(:GetStudioModeEnabled)
|
874
872
|
Mixin::Response.new(resp, resp.keys)
|
875
873
|
end
|
876
874
|
|
877
875
|
def set_studio_mode_enabled(enabled)
|
878
|
-
payload = {
|
879
|
-
call(
|
876
|
+
payload = {studioModeEnabled: enabled}
|
877
|
+
call(:SetStudioModeEnabled, payload)
|
880
878
|
end
|
881
879
|
|
882
880
|
def open_input_properties_dialog(name)
|
883
|
-
payload = {
|
884
|
-
call(
|
881
|
+
payload = {inputName: name}
|
882
|
+
call(:OpenInputPropertiesDialog, payload)
|
885
883
|
end
|
886
884
|
|
887
885
|
def open_input_filters_dialog(name)
|
888
|
-
payload = {
|
889
|
-
call(
|
886
|
+
payload = {inputName: name}
|
887
|
+
call(:OpenInputFiltersDialog, payload)
|
890
888
|
end
|
891
889
|
|
892
890
|
def open_input_interact_dialog(name)
|
893
|
-
payload = {
|
894
|
-
call(
|
891
|
+
payload = {inputName: name}
|
892
|
+
call(:OpenInputInteractDialog, payload)
|
895
893
|
end
|
896
894
|
|
897
895
|
def get_monitor_list
|
898
|
-
resp = call(
|
896
|
+
resp = call(:GetMonitorList)
|
899
897
|
Mixin::Response.new(resp, resp.keys)
|
900
898
|
end
|
901
899
|
end
|
data/lib/obsws/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obsws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- onyx_online
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: observer
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: websocket-driver
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +39,19 @@ dependencies:
|
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: 0.2.1
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: standard
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: '1.30'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
54
|
+
version: '1.30'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: minitest
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,7 +116,7 @@ homepage: https://rubygems.org/gems/obsws
|
|
130
116
|
licenses:
|
131
117
|
- MIT
|
132
118
|
metadata:
|
133
|
-
source_code_uri: https://github.com/onyx-and-iris/obsws
|
119
|
+
source_code_uri: https://github.com/onyx-and-iris/obsws-ruby
|
134
120
|
post_install_message:
|
135
121
|
rdoc_options: []
|
136
122
|
require_paths:
|
@@ -146,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
132
|
- !ruby/object:Gem::Version
|
147
133
|
version: '0'
|
148
134
|
requirements: []
|
149
|
-
rubygems_version: 3.
|
135
|
+
rubygems_version: 3.4.10
|
150
136
|
signing_key:
|
151
137
|
specification_version: 4
|
152
138
|
summary: OBS Websocket v5 wrapper
|