reference-frontend-api.rst 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  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_SCENE_CHANGED**
  27. Triggered when the current scene has changed.
  28. - **OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED**
  29. Triggered when a scenes has been added/removed/reordered by the
  30. user.
  31. - **OBS_FRONTEND_EVENT_TRANSITION_CHANGED**
  32. Triggered when the current transition has changed by the user.
  33. - **OBS_FRONTEND_EVENT_TRANSITION_STOPPED**
  34. Triggered when a transition has completed.
  35. - **OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED**
  36. Triggered when the user adds/removes transitions.
  37. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED**
  38. Triggered when the user has changed the current scene collection.
  39. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED**
  40. Triggered when the user has added/removed/renamed scene
  41. collections.
  42. - **OBS_FRONTEND_EVENT_PROFILE_CHANGED**
  43. Triggered when the user has changed the current profile.
  44. - **OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED**
  45. Triggered when the user has added/removed/renamed profiles.
  46. - **OBS_FRONTEND_EVENT_EXIT**
  47. Triggered when the program is about to exit.
  48. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING**
  49. Triggered when the replay buffer is starting.
  50. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED**
  51. Triggered when the replay buffer has successfully started.
  52. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING**
  53. Triggered when the replay buffer is stopping.
  54. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED**
  55. Triggered when the replay buffer has fully stopped.
  56. - **OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED**
  57. Triggered when the replay buffer has been saved.
  58. - **OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED**
  59. Triggered when the user has turned on studio mode.
  60. - **OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED**
  61. Triggered when the user has turned off studio mode.
  62. - **OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED**
  63. Triggered when the current preview scene has changed in studio
  64. mode.
  65. - **OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP**
  66. Triggered when a scene collection has been completely unloaded, and
  67. the program is either about to load a new scene collection, or the
  68. program is about to exit.
  69. - **OBS_FRONTEND_EVENT_FINISHED_LOADING**
  70. Triggered when the program has finished loading.
  71. - **OBS_FRONTEND_EVENT_RECORDING_PAUSED**
  72. Triggered when the recording has been paused.
  73. - **OBS_FRONTEND_EVENT_RECORDING_UNPAUSED**
  74. Triggered when the recording has been unpaused.
  75. .. type:: struct obs_frontend_source_list
  76. - DARRAY(obs_source_t*) **sources**
  77. Example usage:
  78. .. code:: cpp
  79. struct obs_frontend_source_list scenes;
  80. obs_frontend_get_scenes(&scenes);
  81. for (size_t i = 0; i < scenes.num; i++) {
  82. obs_source_t *source = scenes.sources.array[i];
  83. [...]
  84. }
  85. obs_frontend_source_list_free(&scenes);
  86. .. type:: typedef void (*obs_frontend_cb)(void *private_data)
  87. Frontend tool menu callback.
  88. .. type:: typedef void (*obs_frontend_event_cb)(enum obs_frontend_event event, void *private_data)
  89. Frontend event callback.
  90. .. type:: typedef void (*obs_frontend_save_cb)(obs_data_t *save_data, bool saving, void *private_data)
  91. Frontend save/load callback.
  92. .. type:: typedef bool (*obs_frontend_translate_ui_cb)(const char *text, const char **out)
  93. Translation callback.
  94. Functions
  95. ---------
  96. .. function:: void obs_frontend_source_list_free(struct obs_frontend_source_list *source_list)
  97. Releases sources within a source list and frees the list.
  98. :param source_list: Source list to free.
  99. ---------------------------------------
  100. .. function:: void *obs_frontend_get_main_window(void)
  101. :return: The QMainWindow pointer to the OBS Studio window.
  102. ---------------------------------------
  103. .. function:: void *obs_frontend_get_main_window_handle(void)
  104. :return: The native window handle of the OBS Studio window.
  105. ---------------------------------------
  106. .. function:: char **obs_frontend_get_scene_names(void)
  107. :return: The scene name list, ending with NULL. The list is stored
  108. within one contiguous segment of memory, so freeing the
  109. returned pointer with :c:func:`bfree()` will free the entire
  110. list.
  111. ---------------------------------------
  112. .. function:: void obs_frontend_get_scenes(struct obs_frontend_source_list *sources)
  113. :param sources: Pointer to a :c:type:`obs_frontend_source_list`
  114. structure to receive the list of
  115. reference-incremented scenes. Release with
  116. :c:func:`obs_frontend_source_list_free`.
  117. ---------------------------------------
  118. .. function:: obs_source_t *obs_frontend_get_current_scene(void)
  119. :return: A new reference to the currently active scene.
  120. ---------------------------------------
  121. .. function:: void obs_frontend_set_current_scene(obs_source_t *scene)
  122. :param scene: The scene to set as the current scene.
  123. ---------------------------------------
  124. .. function:: void obs_frontend_get_transitions(struct obs_frontend_source_list *sources)
  125. :param sources: Pointer to a :c:type:`obs_frontend_source_list`
  126. structure to receive the list of
  127. reference-incremented transitions. Release with
  128. :c:func:`obs_frontend_source_list_free`.
  129. ---------------------------------------
  130. .. function:: obs_source_t *obs_frontend_get_current_transition(void)
  131. :return: A new reference to the currently active transition.
  132. ---------------------------------------
  133. .. function:: void obs_frontend_set_current_transition(obs_source_t *transition)
  134. :param transition: The transition to set as the current transition.
  135. ---------------------------------------
  136. .. function:: int obs_frontend_get_transition_duration(void)
  137. :return: The transition duration (in milliseconds) currently set in the UI.
  138. ---------------------------------------
  139. .. function:: void obs_frontend_set_transition_duration(int duration)
  140. :param duration: Desired transition duration (in milliseconds)
  141. ---------------------------------------
  142. .. function:: char **obs_frontend_get_scene_collections(void)
  143. :return: The list of profile names, ending with NULL. The list is
  144. stored within one contiguous segment of memory, so freeing
  145. the returned pointer with :c:func:`bfree()` will free the
  146. entire list.
  147. ---------------------------------------
  148. .. function:: char *obs_frontend_get_current_scene_collection(void)
  149. :return: A new pointer to the current scene collection name. Free
  150. with :c:func:`bfree()`.
  151. ---------------------------------------
  152. .. function:: void obs_frontend_set_current_scene_collection(const char *collection)
  153. :param profile: Name of the scene collection to activate.
  154. ---------------------------------------
  155. .. function:: char **obs_frontend_get_profiles(void)
  156. :return: The list of profile names, ending with NULL. The list is
  157. stored within one contiguous segment of memory, so freeing
  158. the returned pointer with :c:func:`bfree()` will free the
  159. entire list.
  160. ---------------------------------------
  161. .. function:: char *obs_frontend_get_current_profile(void)
  162. :return: A new pointer to the current profile name. Free with
  163. :c:func:`bfree()`.
  164. ---------------------------------------
  165. .. function:: void obs_frontend_set_current_profile(const char *profile)
  166. :param profile: Name of the profile to activate.
  167. ---------------------------------------
  168. .. function:: void obs_frontend_add_event_callback(obs_frontend_event_cb callback, void *private_data)
  169. Adds a callback that will be called when a frontend event occurs.
  170. See :c:type:`obs_frontend_event` on what sort of events can be
  171. triggered.
  172. :param callback: Callback to use when a frontend event occurs.
  173. :param private_data: Private data associated with the callback.
  174. ---------------------------------------
  175. .. function:: void obs_frontend_remove_event_callback(obs_frontend_event_cb callback, void *private_data)
  176. Removes an event callback.
  177. :param callback: Callback to remove.
  178. :param private_data: Private data associated with the callback.
  179. ---------------------------------------
  180. .. function:: void obs_frontend_add_save_callback(obs_frontend_save_cb callback, void *private_data)
  181. Adds a callback that will be called when the current scene collection
  182. is being saved/loaded.
  183. :param callback: Callback to use when saving/loading a scene
  184. collection.
  185. :param private_data: Private data associated with the callback.
  186. ---------------------------------------
  187. .. function:: void obs_frontend_remove_save_callback(obs_frontend_save_cb callback, void *private_data)
  188. Removes a save/load callback.
  189. :param callback: Callback to remove.
  190. :param private_data: Private data associated with the callback.
  191. ---------------------------------------
  192. .. function:: void obs_frontend_add_preload_callback(obs_frontend_save_cb callback, void *private_data)
  193. Adds a callback that will be called right before a scene collection
  194. is loaded. Useful if you
  195. :param callback: Callback to use when pre-loading.
  196. :param private_data: Private data associated with the callback.
  197. ---------------------------------------
  198. .. function:: void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback, void *private_data)
  199. Removes a pre-load callback.
  200. :param callback: Callback to remove.
  201. :param private_data: Private data associated with the callback.
  202. ---------------------------------------
  203. .. function:: void obs_frontend_push_ui_translation(obs_frontend_translate_ui_cb translate)
  204. Pushes a UI translation callback. This allows a front-end plugin to
  205. intercept when Qt is automatically generating translating data.
  206. Typically this is just called with obs_module_get_string.
  207. :param translate: The translation callback to use.
  208. ---------------------------------------
  209. .. function:: void obs_frontend_pop_ui_translation(void)
  210. Pops the current UI translation callback.
  211. ---------------------------------------
  212. .. function:: void obs_frontend_streaming_start(void)
  213. Starts streaming.
  214. ---------------------------------------
  215. .. function:: void obs_frontend_streaming_stop(void)
  216. Stops streaming.
  217. ---------------------------------------
  218. .. function:: bool obs_frontend_streaming_active(void)
  219. :return: *true* if streaming active, *false* otherwise.
  220. ---------------------------------------
  221. .. function:: void obs_frontend_recording_start(void)
  222. Starts recording.
  223. ---------------------------------------
  224. .. function:: void obs_frontend_recording_stop(void)
  225. Stops recording.
  226. ---------------------------------------
  227. .. function:: bool obs_frontend_recording_active(void)
  228. :return: *true* if recording active, *false* otherwise.
  229. ---------------------------------------
  230. .. function:: void obs_frontend_recording_pause(bool pause)
  231. :pause: *true* to pause recording, *false* to unpause.
  232. ---------------------------------------
  233. .. function:: bool obs_frontend_recording_paused(void)
  234. :return: *true* if recording paused, *false* otherwise.
  235. ---------------------------------------
  236. .. function:: void obs_frontend_replay_buffer_start(void)
  237. Starts replay buffer.
  238. ---------------------------------------
  239. .. function:: void obs_frontend_replay_buffer_stop(void)
  240. Stops replay buffer.
  241. ---------------------------------------
  242. .. function:: void obs_frontend_replay_buffer_save(void)
  243. Saves a replay if the replay buffer is active.
  244. ---------------------------------------
  245. .. function:: bool obs_frontend_replay_buffer_active(void)
  246. :return: *true* if replay buffer active, *false* otherwise.
  247. ---------------------------------------
  248. .. function:: void obs_frontend_open_projector(const char *type, int monitor, const char *geometry, const char *name)
  249. :param type: "Preview", "Source", "Scene", "StudioProgram", or "Multiview" (case insensitive).
  250. :param monitor: Monitor to open the projector on. If -1, opens a window.
  251. :param geometry: If *monitor* is -1, size and position of the projector window. Encoded in Base64 using Qt's geometry encoding.
  252. :param name: If *type* is "Source" or "Scene", name of the source or scene to be displayed.
  253. ---------------------------------------
  254. .. function:: void obs_frontend_save(void)
  255. Saves the current scene collection.
  256. ---------------------------------------
  257. .. function:: obs_output_t *obs_frontend_get_streaming_output(void)
  258. :return: A new reference to the current streaming output.
  259. ---------------------------------------
  260. .. function:: obs_output_t *obs_frontend_get_recording_output(void)
  261. :return: A new reference to the current srecording output.
  262. ---------------------------------------
  263. .. function:: obs_output_t *obs_frontend_get_replay_buffer_output(void)
  264. :return: A new reference to the current replay buffer output.
  265. ---------------------------------------
  266. .. function:: void obs_frontend_set_streaming_service(obs_service_t *service)
  267. Sets the current streaming service to stream with.
  268. :param service: The streaming service to set.
  269. ---------------------------------------
  270. .. function:: obs_service_t *obs_frontend_get_streaming_service(void)
  271. :return: A new reference to the current streaming service object.
  272. ---------------------------------------
  273. .. function:: void obs_frontend_save_streaming_service(void)
  274. Saves the current streaming service data.
  275. ---------------------------------------
  276. .. function:: bool obs_frontend_preview_program_mode_active(void)
  277. :return: *true* if studio mode is active, *false* otherwise.
  278. ---------------------------------------
  279. .. function:: void obs_frontend_set_preview_program_mode(bool enable)
  280. Activates/deactivates studio mode.
  281. :param enable: *true* to activate studio mode, *false* to deactivate
  282. studio mode.
  283. ---------------------------------------
  284. .. function:: void obs_frontend_preview_program_trigger_transition(void)
  285. Triggers a preview-to-program transition if studio mode is active.
  286. ---------------------------------------
  287. .. function:: obs_source_t *obs_frontend_get_current_preview_scene(void)
  288. :return: A new reference to the current preview scene if studio mode
  289. is active, or the current scene if studio mode is not
  290. active.
  291. ---------------------------------------
  292. .. function:: void obs_frontend_set_current_preview_scene(obs_source_t *scene)
  293. Sets the current preview scene in studio mode, or the currently
  294. active scene if not in studio mode.
  295. :param scene: The scene to set as the current preview.
  296. ---------------------------------------
  297. .. function:: void *obs_frontend_take_screenshot(void)
  298. Takes a screenshot of the main OBS output.
  299. ---------------------------------------
  300. .. function:: void *obs_frontend_take_source_screenshot(obs_source_t *source)
  301. Takes a screenshot of the specified source.
  302. :param source: The source to take screenshot of.