reference-frontend-api.rst 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. OBS Studio Frontend API
  2. =======================
  3. The OBS Studio frontend API is the API specific to OBS Studio itself.
  4. .. code:: cpp
  5. #include <obs-frontend-api.h>
  6. Structures/Enumerations
  7. -----------------------
  8. .. type:: enum obs_frontend_event
  9. Specifies a front-end event. Can be one of the following values:
  10. - **OBS_FRONTEND_EVENT_STREAMING_STARTING**
  11. Triggered when streaming is starting.
  12. - **OBS_FRONTEND_EVENT_STREAMING_STARTED**
  13. Triggered when streaming has successfully started.
  14. - **OBS_FRONTEND_EVENT_STREAMING_STOPPING**
  15. Triggered when streaming is stopping.
  16. - **OBS_FRONTEND_EVENT_STREAMING_STOPPED**
  17. Triggered when streaming has fully stopped.
  18. - **OBS_FRONTEND_EVENT_RECORDING_STARTING**
  19. Triggered when recording is starting.
  20. - **OBS_FRONTEND_EVENT_RECORDING_STARTED**
  21. Triggered when recording has successfully started.
  22. - **OBS_FRONTEND_EVENT_RECORDING_STOPPING**
  23. Triggered when recording is stopping.
  24. - **OBS_FRONTEND_EVENT_RECORDING_STOPPED**
  25. Triggered when recording has fully stopped.
  26. - **OBS_FRONTEND_EVENT_RECORDING_PAUSED**
  27. Triggered when the recording has been paused.
  28. - **OBS_FRONTEND_EVENT_RECORDING_UNPAUSED**
  29. Triggered when the recording has been unpaused.
  30. - **OBS_FRONTEND_EVENT_SCENE_CHANGED**
  31. Triggered when the current scene has changed.
  32. - **OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED**
  33. Triggered when a scenes has been added/removed/reordered by the
  34. user.
  35. - **OBS_FRONTEND_EVENT_TRANSITION_CHANGED**
  36. Triggered when the current transition has changed by the user.
  37. - **OBS_FRONTEND_EVENT_TRANSITION_STOPPED**
  38. Triggered when a transition has completed.
  39. - **OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED**
  40. Triggered when the user adds/removes transitions.
  41. - **OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED**
  42. Triggered when the transition duration has been changed by the
  43. user.
  44. - **OBS_FRONTEND_EVENT_TBAR_VALUE_CHANGED**
  45. Triggered when the transition bar is moved.
  46. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING**
  47. Triggered when the current scene collection is about to change.
  48. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED**
  49. Triggered when the current scene collection has changed.
  50. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED**
  51. Triggered when a scene collection has been
  52. added/removed/renamed.
  53. - **OBS_FRONTEND_EVENT_PROFILE_CHANGING**
  54. Triggered when the current profile is about to change.
  55. - **OBS_FRONTEND_EVENT_PROFILE_CHANGED**
  56. Triggered when the current profile has changed.
  57. - **OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED**
  58. Triggered when a profile has been added/removed/renamed.
  59. - **OBS_FRONTEND_EVENT_FINISHED_LOADING**
  60. Triggered when the program has finished loading.
  61. - **OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN**
  62. Triggered when scripts need to know that OBS is exiting. The
  63. **OBS_FRONTEND_EVENT_EXIT** event is normally called after scripts
  64. have been destroyed.
  65. - **OBS_FRONTEND_EVENT_EXIT**
  66. Triggered when the program is about to exit.
  67. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING**
  68. Triggered when the replay buffer is starting.
  69. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED**
  70. Triggered when the replay buffer has successfully started.
  71. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING**
  72. Triggered when the replay buffer is stopping.
  73. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED**
  74. Triggered when the replay buffer has fully stopped.
  75. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED**
  76. Triggered when the replay buffer has been saved.
  77. - **OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED**
  78. Triggered when the user has turned on studio mode.
  79. - **OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED**
  80. Triggered when the user has turned off studio mode.
  81. - **OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED**
  82. Triggered when the current preview scene has changed in studio
  83. mode.
  84. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP**
  85. Triggered when a scene collection has been completely unloaded, and
  86. the program is either about to load a new scene collection, or the
  87. program is about to exit.
  88. - **OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED**
  89. Triggered when the virtual camera is started.
  90. - **OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED**
  91. Triggered when the virtual camera is stopped.
  92. .. type:: struct obs_frontend_source_list
  93. - DARRAY(obs_source_t*) **sources**
  94. Example usage:
  95. .. code:: cpp
  96. struct obs_frontend_source_list scenes = {0};
  97. obs_frontend_get_scenes(&scenes);
  98. for (size_t i = 0; i < scenes.num; i++) {
  99. obs_source_t *source = scenes.sources.array[i];
  100. [...]
  101. }
  102. obs_frontend_source_list_free(&scenes);
  103. .. type:: typedef void (*obs_frontend_cb)(void *private_data)
  104. Frontend tool menu callback
  105. .. type:: typedef void (*obs_frontend_event_cb)(enum obs_frontend_event event, void *private_data)
  106. Frontend event callback
  107. .. type:: typedef void (*obs_frontend_save_cb)(obs_data_t *save_data, bool saving, void *private_data)
  108. Frontend save/load callback
  109. .. type:: typedef bool (*obs_frontend_translate_ui_cb)(const char *text, const char **out)
  110. Translation callback
  111. Functions
  112. ---------
  113. .. function:: void obs_frontend_source_list_free(struct obs_frontend_source_list *source_list)
  114. Releases sources within a source list and frees the list.
  115. :param source_list: Source list to free
  116. ---------------------------------------
  117. .. function:: void *obs_frontend_get_main_window(void)
  118. :return: The QMainWindow pointer to the OBS Studio window
  119. ---------------------------------------
  120. .. function:: void *obs_frontend_get_main_window_handle(void)
  121. :return: The native window handle of the OBS Studio window
  122. ---------------------------------------
  123. .. function:: char **obs_frontend_get_scene_names(void)
  124. :return: The scene name list, ending with NULL. The list is stored
  125. within one contiguous segment of memory, so freeing the
  126. returned pointer with :c:func:`bfree()` will free the entire
  127. list.
  128. ---------------------------------------
  129. .. function:: void obs_frontend_get_scenes(struct obs_frontend_source_list *sources)
  130. :param sources: Pointer to a :c:type:`obs_frontend_source_list`
  131. structure to receive the list of
  132. reference-incremented scenes. Release with
  133. :c:func:`obs_frontend_source_list_free`
  134. ---------------------------------------
  135. .. function:: obs_source_t *obs_frontend_get_current_scene(void)
  136. :return: A new reference to the currently active scene
  137. ---------------------------------------
  138. .. function:: void obs_frontend_set_current_scene(obs_source_t *scene)
  139. :param scene: The scene to set as the current scene
  140. ---------------------------------------
  141. .. function:: void obs_frontend_get_transitions(struct obs_frontend_source_list *sources)
  142. :param sources: Pointer to a :c:type:`obs_frontend_source_list`
  143. structure to receive the list of
  144. reference-incremented transitions. Release with
  145. :c:func:`obs_frontend_source_list_free`
  146. ---------------------------------------
  147. .. function:: obs_source_t *obs_frontend_get_current_transition(void)
  148. :return: A new reference to the currently active transition
  149. ---------------------------------------
  150. .. function:: void obs_frontend_set_current_transition(obs_source_t *transition)
  151. :param transition: The transition to set as the current transition
  152. ---------------------------------------
  153. .. function:: int obs_frontend_get_transition_duration(void)
  154. :return: The transition duration (in milliseconds) currently set in the UI
  155. ---------------------------------------
  156. .. function:: void obs_frontend_set_transition_duration(int duration)
  157. :param duration: Desired transition duration, in milliseconds
  158. ---------------------------------------
  159. .. function:: void obs_frontend_release_tbar(void)
  160. Emulate a mouse button release on the transition bar and determine transition status.
  161. ---------------------------------------
  162. .. function:: void obs_frontend_set_tbar_position(int position)
  163. Set the value of the transition bar.
  164. :param position: The position to set the T-bar to, with a range of 0-1023
  165. ---------------------------------------
  166. .. function:: int obs_frontend_get_tbar_position(void)
  167. Get the value of the transition bar.
  168. :return: The value of the position of the T-bar to, with a range of 0-1023
  169. ---------------------------------------
  170. .. function:: char **obs_frontend_get_scene_collections(void)
  171. :return: The list of profile names, ending with NULL. The list is
  172. stored within one contiguous segment of memory, so freeing
  173. the returned pointer with :c:func:`bfree()` will free the
  174. entire list.
  175. ---------------------------------------
  176. .. function:: char *obs_frontend_get_current_scene_collection(void)
  177. :return: A new pointer to the current scene collection name. Free
  178. with :c:func:`bfree()`
  179. ---------------------------------------
  180. .. function:: void obs_frontend_set_current_scene_collection(const char *collection)
  181. :param profile: Name of the scene collection to activate
  182. ---------------------------------------
  183. .. function:: bool obs_frontend_add_scene_collection(const char *name)
  184. Add a new scene collection, then switch to it.
  185. :param name: Name of the scene collection to add/create
  186. ---------------------------------------
  187. .. function:: char **obs_frontend_get_profiles(void)
  188. :return: The list of profile names, ending with NULL. The list is
  189. stored within one contiguous segment of memory, so freeing
  190. the returned pointer with :c:func:`bfree()` will free the
  191. entire list.
  192. ---------------------------------------
  193. .. function:: char *obs_frontend_get_current_profile(void)
  194. :return: A new pointer to the current profile name. Free with
  195. :c:func:`bfree()`
  196. ---------------------------------------
  197. .. function:: char *obs_frontend_get_current_profile_path(void)
  198. :return: A new pointer to the current profile's path on the
  199. filesystem. Free with :c:func:`bfree()`
  200. ---------------------------------------
  201. .. function:: void obs_frontend_set_current_profile(const char *profile)
  202. :param profile: Name of the profile to activate
  203. ---------------------------------------
  204. .. function:: bool obs_frontend_create_profile(const char *name)
  205. :param name: Name of the new profile to create (must be unique)
  206. ---------------------------------------
  207. .. function:: bool obs_frontend_duplicate_profile(const char *name)
  208. :param name: Name of the duplicate profile to create (must be unique)
  209. ---------------------------------------
  210. .. function:: void obs_frontend_delete_profile(const char *profile)
  211. :param profile: Name of the profile to delete
  212. ---------------------------------------
  213. .. function:: void *obs_frontend_add_tools_menu_qaction(const char *name)
  214. Adds a QAction to the tools menu then returns it.
  215. :param name: Name for the new menu item
  216. :return: A pointer to the added QAction
  217. ---------------------------------------
  218. .. function:: void obs_frontend_add_tools_menu_item(const char *name, obs_frontend_cb callback, void *private_data)
  219. Adds a tools menu item and links the ::clicked signal to the
  220. callback.
  221. :param name: The name for the new menu item
  222. :param callback: Callback to use when the menu item is clicked
  223. :param private_data: Private data associated with the callback
  224. ---------------------------------------
  225. .. function:: void* obs_frontend_add_dock(void *dock)
  226. Adds a QDockWidget to the UI's Docks menu.
  227. :param dock: QDockWidget to add/create
  228. :return: A pointer to the added QAction
  229. ---------------------------------------
  230. .. function:: void obs_frontend_add_event_callback(obs_frontend_event_cb callback, void *private_data)
  231. Adds a callback that will be called when a frontend event occurs.
  232. See :c:type:`obs_frontend_event` on what sort of events can be
  233. triggered.
  234. :param callback: Callback to use when a frontend event occurs
  235. :param private_data: Private data associated with the callback
  236. ---------------------------------------
  237. .. function:: void obs_frontend_remove_event_callback(obs_frontend_event_cb callback, void *private_data)
  238. Removes an event callback.
  239. :param callback: Callback to remove
  240. :param private_data: Private data associated with the callback
  241. ---------------------------------------
  242. .. function:: void obs_frontend_add_save_callback(obs_frontend_save_cb callback, void *private_data)
  243. Adds a callback that will be called when the current scene collection
  244. is being saved/loaded.
  245. :param callback: Callback to use when saving/loading a scene
  246. collection
  247. :param private_data: Private data associated with the callback
  248. ---------------------------------------
  249. .. function:: void obs_frontend_remove_save_callback(obs_frontend_save_cb callback, void *private_data)
  250. Removes a save/load callback.
  251. :param callback: Callback to remove
  252. :param private_data: Private data associated with the callback
  253. ---------------------------------------
  254. .. function:: void obs_frontend_add_preload_callback(obs_frontend_save_cb callback, void *private_data)
  255. Adds a callback that will be called right before a scene collection
  256. is loaded.
  257. :param callback: Callback to use when pre-loading
  258. :param private_data: Private data associated with the callback
  259. ---------------------------------------
  260. .. function:: void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback, void *private_data)
  261. Removes a pre-load callback.
  262. :param callback: Callback to remove
  263. :param private_data: Private data associated with the callback
  264. ---------------------------------------
  265. .. function:: void obs_frontend_push_ui_translation(obs_frontend_translate_ui_cb translate)
  266. Pushes a UI translation callback. This allows a front-end plugin to
  267. intercept when Qt is automatically generating translating data.
  268. Typically this is just called with obs_module_get_string.
  269. :param translate: The translation callback to use
  270. ---------------------------------------
  271. .. function:: void obs_frontend_pop_ui_translation(void)
  272. Pops the current UI translation callback.
  273. ---------------------------------------
  274. .. function:: void obs_frontend_streaming_start(void)
  275. Starts streaming.
  276. ---------------------------------------
  277. .. function:: void obs_frontend_streaming_stop(void)
  278. Stops streaming.
  279. ---------------------------------------
  280. .. function:: bool obs_frontend_streaming_active(void)
  281. :return: *true* if streaming active, *false* otherwise
  282. ---------------------------------------
  283. .. function:: void obs_frontend_recording_start(void)
  284. Starts recording.
  285. ---------------------------------------
  286. .. function:: void obs_frontend_recording_stop(void)
  287. Stops recording.
  288. ---------------------------------------
  289. .. function:: bool obs_frontend_recording_active(void)
  290. :return: *true* if recording active, *false* otherwise
  291. ---------------------------------------
  292. .. function:: void obs_frontend_recording_pause(bool pause)
  293. :pause: *true* to pause recording, *false* to unpause
  294. ---------------------------------------
  295. .. function:: bool obs_frontend_recording_paused(void)
  296. :return: *true* if recording paused, *false* otherwise
  297. ---------------------------------------
  298. .. function:: void obs_frontend_replay_buffer_start(void)
  299. Starts the replay buffer.
  300. ---------------------------------------
  301. .. function:: void obs_frontend_replay_buffer_stop(void)
  302. Stops the replay buffer.
  303. ---------------------------------------
  304. .. function:: void obs_frontend_replay_buffer_save(void)
  305. Saves a replay if the replay buffer is active.
  306. ---------------------------------------
  307. .. function:: bool obs_frontend_replay_buffer_active(void)
  308. :return: *true* if replay buffer active, *false* otherwise
  309. ---------------------------------------
  310. .. function:: void obs_frontend_open_projector(const char *type, int monitor, const char *geometry, const char *name)
  311. :param type: "Preview", "Source", "Scene", "StudioProgram", or "Multiview" (case insensitive)
  312. :param monitor: Monitor to open the projector on. If -1, this opens a window.
  313. :param geometry: If *monitor* is -1, size and position of the projector window. Encoded in Base64 using Qt's geometry encoding.
  314. :param name: If *type* is "Source" or "Scene", name of the source or scene to be displayed
  315. ---------------------------------------
  316. .. function:: void obs_frontend_save(void)
  317. Saves the current scene collection.
  318. ---------------------------------------
  319. .. function:: obs_output_t *obs_frontend_get_streaming_output(void)
  320. :return: A new reference to the current streaming output
  321. ---------------------------------------
  322. .. function:: obs_output_t *obs_frontend_get_recording_output(void)
  323. :return: A new reference to the current srecording output
  324. ---------------------------------------
  325. .. function:: obs_output_t *obs_frontend_get_replay_buffer_output(void)
  326. :return: A new reference to the current replay buffer output
  327. ---------------------------------------
  328. .. function:: config_t *obs_frontend_get_profile_config(void)
  329. :return: The config_t* associated with the current profile
  330. ---------------------------------------
  331. .. function:: config_t *obs_frontend_get_global_config(void)
  332. :return: The config_t* associated with the global config (global.ini)
  333. ---------------------------------------
  334. .. function:: void obs_frontend_set_streaming_service(obs_service_t *service)
  335. Sets the current streaming service to stream with.
  336. :param service: The streaming service to set
  337. ---------------------------------------
  338. .. function:: obs_service_t *obs_frontend_get_streaming_service(void)
  339. :return: A new reference to the current streaming service object
  340. ---------------------------------------
  341. .. function:: void obs_frontend_save_streaming_service(void)
  342. Saves the current streaming service data.
  343. ---------------------------------------
  344. .. function:: bool obs_frontend_preview_program_mode_active(void)
  345. :return: *true* if studio mode is active, *false* otherwise
  346. ---------------------------------------
  347. .. function:: void obs_frontend_set_preview_program_mode(bool enable)
  348. Activates/deactivates studio mode.
  349. :param enable: *true* to activate studio mode, *false* to deactivate
  350. studio mode
  351. ---------------------------------------
  352. .. function:: void obs_frontend_preview_program_trigger_transition(void)
  353. Triggers a preview-to-program transition if studio mode is active.
  354. ---------------------------------------
  355. .. function:: obs_source_t *obs_frontend_get_current_preview_scene(void)
  356. :return: A new reference to the current preview scene if studio mode
  357. is active, or *NULL* if studio mode is not active.
  358. ---------------------------------------
  359. .. function:: void obs_frontend_set_current_preview_scene(obs_source_t *scene)
  360. Sets the current preview scene in studio mode. Does nothing if studio
  361. mode is disabled.
  362. :param scene: The scene to set as the current preview
  363. ---------------------------------------
  364. .. function:: void obs_frontend_set_preview_enabled(bool enable)
  365. Sets the enable state of the preview display. Only relevant with
  366. studio mode disabled.
  367. :param enable: *true* to enable preview, *false* to disable preview
  368. ---------------------------------------
  369. .. function:: bool obs_frontend_preview_enabled(void)
  370. :return: *true* if the preview display is enabled, *false* otherwise
  371. ---------------------------------------
  372. .. function:: void *obs_frontend_take_screenshot(void)
  373. Takes a screenshot of the main OBS output.
  374. ---------------------------------------
  375. .. function:: void *obs_frontend_take_source_screenshot(obs_source_t *source)
  376. Takes a screenshot of the specified source.
  377. :param source: The source to take screenshot of
  378. ---------------------------------------
  379. .. function:: obs_output_t *obs_frontend_get_virtualcam_output(void)
  380. :return: A new reference to the current virtual camera output
  381. ---------------------------------------
  382. .. function:: void obs_frontend_start_virtualcam(void)
  383. Starts the virtual camera.
  384. ---------------------------------------
  385. .. function:: void obs_frontend_stop_virtualcam(void)
  386. Stops the virtual camera.
  387. ---------------------------------------
  388. .. function:: bool obs_frontend_virtualcam_active(void)
  389. :return: *true* if virtual camera is active, *false* otherwise
  390. ---------------------------------------
  391. .. function:: void obs_frontend_reset_video(void)
  392. Reloads the UI canvas and resets libobs video with latest data from
  393. the current profile.
  394. ---------------------------------------
  395. .. function:: void *obs_frontend_open_source_properties(obs_source_t *source)
  396. Opens the properties window of the specified source.
  397. :param source: The source to open the properties window of
  398. ---------------------------------------
  399. .. function:: void *obs_frontend_open_source_filters(obs_source_t *source)
  400. Opens the filters window of the specified source.
  401. :param source: The source to open the filters window of
  402. ---------------------------------------
  403. .. function:: void *obs_frontend_open_source_interaction(obs_source_t *source)
  404. Opens the interact window of the specified source. Only call if
  405. source has the *OBS_SOURCE_INTERACTION* output flag.
  406. :param source: The source to open the interact window of
  407. ---------------------------------------
  408. .. function:: char *obs_frontend_get_current_record_output_path(void)
  409. :return: A new pointer to the current record output path. Free
  410. with :c:func:`bfree()`