forked from midnight-studios/obs-lua
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MediaSwitchScene.lua
362 lines (326 loc) · 35.4 KB
/
MediaSwitchScene.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
-- Open Broadcaster Software®️
-- OBS > Tools > Scripts
-- Original Code: @Exeldro
--
-- 27/03/2021 13:59 @midnight-studios
--
-- Globals
obs = obslua
luafileTitle = "MediaSwitchScene"
gversion = 0.3
luafile = "MediaSwitchScene.lua"
obsurl = "media-switch-scene.1386/"
icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAACXBIWXMAAC4jAAAuIwF4pT92AAAFyGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTEwLTI1VDExOjI4OjE3KzEzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIxLTEwLTI1VDExOjI4OjE3KzEzOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0yNVQxMToyODoxNysxMzowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMmNjZDk0NS03MDI4LWY4NDQtOWM5OS1iNzhiY2Q3ZjFhMmIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjY2ZkNmU5YS00MGU5LTM5NDQtOTcyYi1l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"
desc = [[
<hr/><center><h2>]] .. luafileTitle ..[[</h2>(Version: %s)</center>
<br><center><img width=50 height=50 src=']] .. icon .. [['/></center>
<br><center><a href="https://github.com/midnight-studios/obs-lua/blob/main/]] .. luafile ..[[">Find it on GitHub</a></center>
<br><p>Switch to Scene when media end.</p>
<p>Select media from a list, when it ends playing, the Script will switch to your selected scene.
<ol>
<li><tt>`Select Media`</tt></li>
<li><tt>`Select Scene`</tt></li>
</ol></p>
<p>Find help on the <a href="https://obsproject.com/forum/resources/]] .. obsurl ..[[">OBS Forum Thread</a>.</p>
<hr/>]]
p_settings = nil
media_name = ""
p_media_name = nil
scene_name = ""
disable_script = ""
last_state = obs.OBS_MEDIA_STATE_NONE
--[[
--------------------------------------------------------------------
--------------------------------------------------------------------
]]
function script_description()
return string.format(desc, tostring(gversion))
end
--[[
----------------------------------------------------------
-- Use this to create a Script Log Output used in testing
----------------------------------------------------------
]]
local function log(name, msg)
if msg ~= nil then
msg = " > " .. tostring(msg)
else
msg = ""
end
obs.script_log(obs.LOG_DEBUG, name .. msg)
end
--[[
--------------------------------------------------------------------
--------------------------------------------------------------------
]]
function pairsByKeys(t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
--[[
----------------------------------------------------------
Callback on property modification
----------------------------------------------------------
]]
function property_onchange( props, property, settings )
--[[
get mode for Monitor Type
use this here to determine visibility
for property list item
]]
media_name = obs.obs_data_get_string( settings, "media_name" )
--[[
]]
if ( media_name == "Select" ) then
--[[
]]
obs.obs_property_set_visible(obs.obs_properties_get( props, "scene_name" ), false )
else
--[[
]]
obs.obs_property_set_visible(obs.obs_properties_get( props, "scene_name" ), true )
end
--[[
update previous name
]]
p_media_name = media_name
-- IMPORTANT: returns true to trigger refresh of the properties
return true
end
--[[
--------------------------------------------------------------------
script_update(settings)
--------------------------------------------------------------------
Called when the script’s settings (if any) have been changed by the
user.
Parameters:
settings – Settings associated with the script.
--------------------------------------------------------------------
]]
function script_update(settings)
--[[
Update globals
]]
media_name = obs.obs_data_get_string(settings, "media_name")
--[[
Update globals
]]
scene_name = obs.obs_data_get_string(settings, "scene_name")
--[[
Update globals
]]
disable_script = obs.obs_data_get_bool(settings,"disable_script")
-- Keep track of current settings
p_settings = settings
end
--[[
--------------------------------------------------------------------
script_properties()
--------------------------------------------------------------------
Called to define user properties associated with the script.
These properties are used to define how to show settings
properties to a user.
Returns:
obs_properties_t object created via obs_properties_create().
--------------------------------------------------------------------
]]
function script_properties()
--[[
Create a property list
]]
props = obs.obs_properties_create()
--[[
Create a Media List
]]
local props_source = obs.obs_properties_add_list(props, "media_name", "Media Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
--[[
Add a no select
]]
obs.obs_property_list_add_string(props_source, "Select", "select")
--[[
An array of reference-incremented sources. Release with source_list_release().
]]
local sources = obs.obs_enum_sources()
--[[
fetch source list
]]
if sources ~= nil then
local list = {}
--[[
Check Source one at a time
]]
for _, source in ipairs(sources) do
--[[
Get name for current source
]]
local name = obs.obs_source_get_name( source )
--[[
Get id for current source
]]
local id = obs.obs_source_get_id( source )
--[[
if id match, list it
]]
if id == "ffmpeg_source" then
--[[
add it to list so that it can be reordered
]]
list[name] = name
end -- if id == "ffmpeg_source"
end -- for soures
--[[
]]
for key, value in pairsByKeys(list) do
--[[
add item to property list
]]
obs.obs_property_list_add_string( props_source, value, value )
end
end -- sources ~= nil
--[[
Release obs_enum_sources
]]
obs.source_list_release(sources)
--[[
Create a scene list
]]
local scene_list = obs.obs_properties_add_list(props, "scene_name", "Scene:", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
--[[
Add a no select
]]
obs.obs_property_list_add_string(scene_list, "Select", "select")
--[[
The scene name list, ending with NULL.
The list is stored within one contiguous segment of memory,
so freeing the returned pointer with bfree() will free the entire list.
]]
local scenenames = obs.obs_frontend_get_scene_names()
--[[
Found names:
]]
if scenenames ~= nil then
--[[
Cycle through items
]]
for _, scenename in ipairs(scenenames) do
--[[
add item to property list
]]
obs.obs_property_list_add_string(scene_list, scenename, scenename)
--[[
]]
end
--[[
Free list segment of memory
]]
obs.bfree( scenename )
--[[
]]
end
--[[
Add one more property item to disbale script if needed
]]
obs.obs_properties_add_bool(props, "disable_script", "Disable Script")
--[[
OnChange Events
]]
obs.obs_property_set_modified_callback( props_source, property_onchange )
--[[
Calls the callback once to set-up current visibility
]]
obs.obs_properties_apply_settings( props, p_settings )
--[[
return the properties
]]
return props
end
--[[
--------------------------------------------------------------------
script_defaults(settings)
--------------------------------------------------------------------
Called to set default settings (if any) associated with the script.
You would typically call Default Value Functions for the on the
settings in order to set its default values.
Parameters
settings – Settings associated with the script.
--------------------------------------------------------------------
]]
function script_defaults(settings)
--[[
Set default
]]
obs.obs_data_set_default_string(settings, "media_name", "Select")
--[[
Set default
]]
obs.obs_data_set_default_string(settings, "scene_name", "Select")
--[[
Set default
]]
obs.obs_data_set_default_bool(settings, "disable_script", false)
end
--[[
--------------------------------------------------------------------
script_load(settings)
--------------------------------------------------------------------
Called on script startup with specific settings associated with the
script.
The settings parameter provided is not typically used for settings
that are set by the user; instead the parameter is used for any
extra internal settings data that may be used in the script.
Parameters:
settings – Settings associated with the script.
--------------------------------------------------------------------
]]
function script_load(settings)
end
--[[
--------------------------------------------------------------------
script_unload()
--------------------------------------------------------------------
Called when the script is being unloaded.
--------------------------------------------------------------------
]]
function script_unload()
-- not in use by this script
end
--[[
--------------------------------------------------------------------
--------------------------------------------------------------------
]]
function script_tick(seconds)
if disable_script then
return
end
--[[
]]
if media_name == "Select" or scene_name == "Select" then
return
end
local source = obs.obs_get_source_by_name( media_name )
if source ~= nil then
if obs.obs_source_active( source ) then
local state = obs.obs_source_media_get_state(source)
if last_state ~= state then
last_state = state
if state == obs.OBS_MEDIA_STATE_STOPPED or state == obs.OBS_MEDIA_STATE_ENDED then
local scene_source = obs.obs_get_source_by_name(scene_name)
if scene_source ~= nil then
obs.obs_frontend_set_current_scene(scene_source)
obs.obs_source_release(scene_source)
end
end
end
end
end
obs.obs_source_release(source)
end