Skip to content
SML_MeSo edited this page Jul 22, 2020 · 63 revisions

XSplit JS Framework 2.0

Welcome to the Wiki. This is where we post our release notes for new releases, and outline our software roadmap for upcoming features.

If you're interested in learning how to use the framework, please visit our Github Page instead.

Development Roadmap

We are hard at work to develop the next version of xjs (3.0.0). The goals for this is version are threefold:

  • modernize the library: ensure good support across different possible JS development configurations, update our internal workflows and the Typescript dependency
  • create a leaner, cleaner API: the current API feels bloated due to arguably excessive abstraction of the core Broadcaster API that xjs is meant to wrap. We are trying out much smaller rewrites of a subset of core APIs in our internal projects to determine ease of use for developers.
  • improve our documentation system: we are exploring trade-offs with changing our docgen tool, as we'd like to make it easier to navigate through our now cluttered API documentation.

xjs@3.0.0 will probably break a lot of existing code but it will be a while yet until we can confidently release. In the meantime, we will continue to release bugfixes and potentially new features in 2.x.x versions until we deem it necessary to drop support for this major version.

Release Notes

2.10.2 (issues)

This release handles several bugfixes and inconsistencies within the framework and standardizes most of its functionalities with that of the source properties dialog

Minor Features and Enhancements

  • Allow duplicate item call to return the new item created
    • Release 2.9.0 introduced the xjs.ready argument listenToItemAdd which when enabled, allows addToScene calls to return the UIDs of newly added sources. This release brings that change into the Item class duplicate call, which, when listenToItemAdd is set to true, returns the newly created Item object, instead of original object.
  • Ability to check for availability of source for file itemtypes
  • Ability to refresh source on show and on scene enter
  • Ability to refresh source on show and on scene enter
  • Expose MicrophoneDevice name via getName

Bugfix

  • Names of sources are not being updated on item/value change
  • Several issues on case-sensitive regex matching
  • Update prop:FilePlaylist alongside prop:item when changing value for MediaSources

2.10.0 (issues)

This release adds direct support for the newest features of XSplit Broadcaster (v.3.9 at the time of release)

New Features and Enhancements

  • Support for GroupItems
    • Release 2.9.1 initially provided a GenericItem fallback for new and still to be supported new ItemsTypes. As promised, this release provides full support for GroupItems, including creating and adding GroupItems into scenes, getting, adding and removing child items, knowing if an Item belongs to a group, and its parent Item, and searching only for non-Child items within a scene.
  • Support for SceneSources/SceneItems
    • Also promised as a follow-up for last release, is full support for SceneSources/SceneItems. This includes getting and setting which it is assigned to, as well as a special LiveScene Scene object which denotes to whatever scene is currently active.
  • Support for ReplaySources/ReplayItems
    • This includes ability to get and set the channel it connects to, as well the replay duration and the hotkey to trigger it.
  • Support for Filters
    • One of the cooler features of the latest XBC version is the ability to add post-processing shader effects to videoitems, which is now also supported in the XJS Framework.
  • Support for Scene presets
    • This includes functionalities such as adding, removing and switching presets. This also provides methods to get/set transition time and transition easing function.
  • Support for enabling/disabling noise suppression in XBC Microphone device
  • Ability to assign transition effects per scene
    • XBC now provides a way to override the general transition (transition function and time) settings and assign any setting to any scene
  • Ability to assign a scene for recording
  • Static methods to pause, unpause, start and stop local recordings
  • Method to get current language
    • Language-change event together with the changed language has been added since XJS 2.7, but no on-demand way of getting it until added recently to XBC
  • Additional settings for GameSource
    • This includes gamesource transparency, and game fps capping
  • Refactor on usage of scene UID or scene index on different versions of XBC

2.9.1 (issues)

This release mostly contains ad hoc features, improvements, and bugfixes especially for use in our very own plugins.

New Features and Enhancements

  • Create generic item as fallback
    • The latest XBC recently added several source/item types such as Groups and Scene sources. This change doesn't necessarily expose their specific properties but at least provides a fallback for every new source/item types so their general properties, such as value, name, kept-loaded state, etc. can still be accessed.
    • Note: On the earlier-mentioned new source types, actual support for them will be for the next milestone, which hopefully will come a whole lot earlier as compared to this release.
  • Provision for setting window params for NewDialog
    • This provides window customizations for dialogs even before it is spawned.
  • Expose audio properties for the VideoPlaylist source

Bugfix

  • Unable to get items present within a group source.
    • This only handles listings from Scene.getItems(), Scene.getSources(), Source.getAllSources() to include items found within group sources. As noted above in features, proper support for group sources will be for the next release.
  • Prolonged resolution of Output instance method getDisplayName promise

2.9.0 (issues)

This release adds extensibility to the framework along with several bugfixes dealing with code efficiency.

New Features and Enhancements

  • Allow addToScene calls to return UIDs of newly added sources
    • This is by default disabled and can be enabled via adding an object argument in the xjs.ready call having a property listenToItemAdd.
  • Expose exec internal function
    • This enables developers to use the internal callback implementation of XJS, therefore providing them an alternative to use the native Broadcaster API. This is also especially helpful in supporting newly created and yet-to-be abstracted Broadcaster properties and methods without waiting for changes in the XJS framework itself.
  • Add new parameter on NewDialog for cookie configuration for setting cookie path
  • Ability to defer plugin-load in ready call
    • This is also disabled by default and also can be enabled via adding an object argument in the xjs.ready call, this time by having a property deferLoad. Helpful in situations where several calculations needed by UI are done before showing the plugin configuration HTML

Bugfix

  • Change getVersion regular expression in line with XBC useragent format change
  • Inefficient static getCurrentSource function for Source
  • getCurrentSource returns basic Source object, not the type-specific ones
  • Register sources list events regardless of mode
  • Inconsistent escaping for active streams, output plugins, and channels

2.8.0 (issues)

This release mainly deals on fixes for the remote functionality of the framework, together with some enhancements and features.

New Features and Enhancements

  • Support for re-initialization of sendMessage method used by Remote (#199)
  • Push-to-live event (#201)
    • This is called when pushing changes from the preview editor into the main view
  • Native resolution of camera and game sources (#207)

Bugfix

  • Scene-add and scene-delete events do not fire on Remote (#197)
  • Possible cause for memory leak (#202)
    • Callback functions for Broadcaster API calls are not being disposed after resolving them
  • Internal getGlobalProperty call not resolving when accessed internally by Remote.type proxy (#205)
  • ChannelManager does not have an off method
    • Previously, you can only subscribe via on, but no means of unsubscribing

2.7.0 (issues)

This release tackles different fixes on the framework, together with enhancements and features for that provides more information and better handling of events that will be very useful for plugins.

New Features and Enhancements

  • Scene thumbnail (#136)
    • A new Thumbnail class that allows you to acquire a base64 PNG thumbnail of a scene.
  • Add the Scene’s unique Id when firing the scene-add and scene-delete events (#193)
  • Added getDisplayName method on the Output class (#194)
    • The names being returned in getOutputList are the actual channel names while the ones listed in the Output menu are their corresponding display names.
  • Implement event for loading a scene from a file (#195)
  • Add a rejection notice for invalid UID parameter on Scene.getBySceneUid (#196)
  • Add property types in package.json (#188)

Bugfix

  • Handle channel names with xml-encoded characters on outputs (#194)
  • addToScene() method for System/Screen adds to live on Split mode(#183)
  • item.getSource doesn’t properly resolve the source type (#185)
  • Properly subscribe to item-destroyed event (#186)
    • Item-destroyed event is not being called if you are not subscribe to any other event that listens to ItemSubscribeEvent
  • Getting the sceneId for multiple scenes return with the same sceneId (#187)
  • Implement scene-add and scene-delete events for all scenarios (#191)
    • Here are other scenarios where scene add/delete should fire:
      • scene add by New Scene in XBC
      • scene add by Duplicate Scene in XBC
      • scene add when setting active scene to non-existing scene
      • any other API call which may remove or add scene
      • scene delete by Delete Scene in XBC (I'm guessing via API)
      • scenario when deleting the only scene, wherein current scene is deleted, then a new scene is added (no events for both, except when pressing delete
  • Item-destroyed event does not trigger when deleting an item after accessing its properties (#192)

2.6.0 (issues)

This release focuses on bug fixes and enhancements that would handle different scenarios where the framework is loaded/used(i.e Remote connections).

Also, the changes in this version implements strict enforcement of xjs, having all environment checking, initialization, and other xjs calls to be done after xjs.ready().

Enhancement

  • Allow server-side-rendering support for XJS framework (#177)
  • Read-only property for source loaded state (#179)

Bugfix

  • Proper type handling for invalid values on setValue for ImageSource and AudioSource (#176)
  • Missing Remote Handlers for Event Manager and Channel Manager (#181)
  • getSceneId in preview returns NaN [Regression] (#180)

2.5.0 (issues)

This release presents multiple new features that provides additional information to your sources, and enhancements on the Scene methods to standardize how we handle and provide scenes, while addressing Scene method error while on using XBC on split mode.

New Feature:

  • Additional Flexibility when adding Screen Capture(#82)
    1. A new static getAvailableScreens method that returns an array of available screen windows that you can add to XBC
    2. Screen instances from getAvailableScreens can be added using the addToScene method
    3. A static addToScene method is added to Screen to provide an option to fire the screen selector.
  • Remove video item function remove(#159)
  • Check browser source optimizationisBrowserOptimized (#167)
  • Language change event listener LanguageInfo class(#168)
  • Get rendered framesgetFPS(#170)

Enhancement

  • Standardization of Scene methods(#165)
    1. Add getSceneIndex and getSceneUid, and deprecated getSceneNumber
    2. Add getBySceneIndex and getBySceneUid, and depreacate getById
  • Improve error messages to provide more information about the error(#169)

Bugfix

  • Scene methods and event handling on Split Mode(#140)
    1. This fixes instances where methods return errors and events are not fired when using Split Mode.
  • Unable to replace device of Live sources(Camera/Audio) via setValue(#160)

Documentation

  • Additional information on developing sources(Source Properties).
  • Update links and correctly target pages.

2.4.0 (issues)

This release is focuses on improvement on the documentation and fixes on missing functions on a couple of Classes, but also includes a new feature and enhancement that would improve functionality on Scene layout and streaming.

New Feature:

  • ItemLayout methods to set item z-order(#161)
    1. bringToFront (absolute front)
    2. sendToBack (absolute back)
    3. bringForward (front, one level)
    4. sendBackward (back, one level)

Enhancement:

  • Start stream while suppressing pre-stream dialogs(#157)
    1. Outputs.startBroadcast() now accepts an optional JSON object argument to indicate a certain flag that would bypass the showing of pre-stream dialogs.

Bugfix:

  • Erroneous values when dealing with multiple videoitem's properties(#153)
  • HtmlSource class is missing the call function(#155)
  • ScreenSource class only contains Source functions(#156)
  • VideoPlaylist class is missing the SourcePlayback and IAudio functions(#164)

Documentation:

  • Output and StreamInfo documentation update(#151)
    1. This gives more detail on how StreamInfo and Output could be used together for functionality and detail.
  • Missing MaskEffect Enum in documentation(#162)

2.3.0 (issues)

This release focuses on delivering new features, improvements, and bug fixes, but is primarily aimed at making the documentation more friendly to novice developers who want to make simple plugins for their XSplit streams.

New Features:

  • Added recording-renamed event on Channel Manager Class that provides a recording information containing the complete file path of the recording(#91)
    1. Recording information contains file path, oldName, and newName
  • Added a listener to item property change(#104)
  • Allow hidden plugins to make noise(#131)
  • Get GOP drops on StreamInfo Class(#133)

Improvements:

  • Add a new source to any scene instead of just the current scene(#83)
  • Minified build for es2015 output(#138)
    1. This targets those who want to use xjs as a JS module import without adding TypeScript to the build system. We already supply an xjs-es2015.js output and is now adding a minified version of this.
  • Avoid overriding global callbacks(#137)

Bugfix:

  • Sources-list events not firing in XSplit Broadcaster 2.9(#124)
  • Handle special case for transparent/no color for utility Color class and get/setBorderColor(#141)
  • Same toString and toTransitionKey returns for RE3 (non-stinger) transition objects from Transition.getSceneTransitions(#146)
  • Some source interface classes don’t follow special process for source method(#149)

2.2.0 (issues)

This release is focused on the addition of Remote xjs to the framework. The goal here is to allow developers to easily develop HTML pages that can perform XSplit method calls remotely.

New Feature:

  • Added Remote Class that works as middleware for communication for a remote and proxy xjs(#121)
    1. Rework on some of the internals to handle calls from a remote to a proxy and vice versa
    2. Differentiation of Remote, Proxy and Local mode
    3. Serializing of xjs calls to be sent through the network to an XSplit extension configured to be a proxy

This feature is still in its BETA phase and there might still be instances/methods that may not be handled properly. For more information and tutorial on how to use this, please check our API and Remote xjs tutorial page.

Improvement:

  • Allow browser sources to render up to 60fps(#129)
    1. For additional information on how to set browser fps to 60, please check the Tutorial

Bugfix:

  • Fix streamTime unit is not in microsecond(#130)
  • Fix getBandwidthUsage not returning any value(#134)

2.1.1

Minor patch update to handle a minor issue on handling local recording.

2.1.0 (issues)

This release is mainly focused on adding the ability to Start and Stop Stream through the framework and the ability to pause or unpause a Local Recording.

Features and Improvement:

  • Added Output class that handles Start/Stop stream and Pause/Unpause local recording.
    1. Output class also includes Output#getOutputList method that fetches all available/installed outputs on your XBC.
    2. For additional information and guide on how to use this you can check the (Tutorial) or directly go to the (API).
  • Updated the class name of Channel into StreamInfo to properly represent the Class as a means to get details about the stream.
    1. Added the StreamInfo.getBandwidth that shows the average current bandwidth usage of the stream.
  • Add Extension.getId, allowing extensions to get it’s Id that could be used for getting the available Output list.
  • Add audio, video and output encoded values in StreamInfo class passed by stream-end event of ChannelManager.

Bufix and other Changes:

  • Fix App.getFrameTime typo error on code to be similar with the documentation. (#127)
  • Fix mono mix value defaults to 0 when setting the value of mic/speaker. (#126)
  • Stats for Channel passed on ChannelManager Class for stream-end events now contain more information such as audio, video and output encoded values. (#114)

2.0.0 (issues)

This release reflects the changes to XSplit 2.9, which introduces linked property and and contains breaking changes from xjs 1.4.1. Also, 2.0 encourages manipulating

Notable Changes:

  • Handling of VideoItems Linked to the same Source (#119). Items identified as linked are multiple items that are tied up to a single Source.
  • Undeprecate Source and rework on Source/Item property handling (#111).
    1. Items are rendered from Source.
    2. Source properties(value, custom name, etc...) should now be rendered through sources.
    3. Item properties(position, crop, etc...) should be rendered through each item.
  • Global Source is now separate from Keep Loaded in Memory (XSplit 2.9 change). In line with this, the concept of global source has be replaced with Linked items.

New Features / Improvement: Major:

  • Name and Custom name are now source properties, reflecting the changes to XSplit 2.9 (#119).
  • Undeprecate Scene methods searchSourcesById, searchScenesBySourceId, searchSourcesByName, filterSources and filterScenesBySources. These methods were also update to handle the changes on Source and Item.

Minor:

  • Added Source#getAllSources method to get all unique Source from every scene
  • Added Item.getSource method to allow items to get their source.
  • Item.duplicate now has optional parameters ({linked?:boolean, scene?:Scene}) to allow the creating duplicates of an item to other scenes. Setting the duplicate as linked would make them to be tied up to a single source.
  • Allow unlinking of items to a source through Item.unlink. Note that once an item is unlinked, there’s still no method to reverse the process.
  • Added Playback-related methods for VideoPlaylist to allow the use of all playback functions (duration, playback position, etc...) for the current active video. (#120)

Bugfix and Other changes:

  • Bugfix Having XJS framework on an HTML and an iframe within it may cause wrong videoitem properties to be returned.(#112)
  • Always ensure dropped frames, encoded frames and stream time parameters for stream-end event to be number type
  • Replace non-existent Scene.getId with getting static value of _id for setActiveScene
  • Reject when scene is not in scene pool for getById, instead of returning undefined
  • Reject when non-integer number is used for setActiveScene
  • Exclude Intel realsense from camera listing
  • Consider preset's defpos in assigning position to gamesource autoDetect
  • Consider preset's defpos in assigning position to VideoPlaylist object to be added
  • Check for presence of file parameter in static getVideoDuration method of IO class as it may result to unresolved calls
  • Reject toXML method of VideoPlaylist class when no file is added
  • Convert RGB and BGR to uppercase for Color util class, as parseInt base 16 to lowercase
  • Check for all coordinates and not only left when converting Color object to coordinate string
  • Reject getVideoDuration and openFileDialog methods of IO class when called in source
  • Resolve videoDuration as a number, not as a string
  • Emit scene index based in 1 instead of 0 on scene-delete and scene-add events
  • Add unbind (‘off’) method to event emitter class
  • Ensure that subscription to EventManager is done only once
  • Throws errors when window classes are called not from their respective environments
  • Include scene-load in list of supported events for SourcePluginWindow

Deprecated methods:

  • Environment.isSourceConfig use Environment.isSourceProps
  • Scene.getByIdAsync use Scene.getById