Releases: watfordjc/csharp-stream-controller
Stream Controller 0.0.5
Stream Controller
This is the second published release of Stream Controller and it is version 0.0.5.
For a detailed explanation of the pre-1.0.0 version numbering scheme used for this program and its libraries, see Stream Controller 0.0.4.
Most of the intended features are still missing, and this software is pre-alpha.
Release Files
64-bit
- Installer (what you probably want): StreamController_Setup_win-x64_0.0.5.0.msi
- Semi-Portable version (still stores settings in %LOCALAPPDATA%): StreamController_Portable_win-x64_0.0.5.0.zip
- DLLs (libraries) and PDBs (debug symbols): StreamController_DLLs-and-PDBs_win-x64_0.0.5.0.zip
32-bit
- Installer: StreamController_Setup_win-x86_0.0.5.0.msi
- Semi-Portable version (still stores settings in %LOCALAPPDATA%): StreamController_Portable_win-x86_0.0.5.0.zip
- DLLs (libraries) and PDBs (debug symbols): StreamController_StreamController_DLLs-and-PDBs_win-x86_0.0.5.0.zip
Features
Expected Features of a Windows Program
- It can be installed and uninstalled.
- Upgrading requires manually uninstalling the old version first.
- It has a Start Menu shortcut to both the application and uninstaller.
- It has a system tray icon as some of the features don't particularly need a window.
Workaround Features
- NVIDIA bug workaround: If your default sound output device has NVIDIA in its name, silent audio is constantly played to prevent the NVIDIA driver from putting the audio device to sleep.
- Windows UI workaround: Default sound render (i.e. speaker/headphones) and default sound capture (i.e. microphone) devices can be changed from the right-click menu on the system tray icon.
- Windows bug workaround: Customised choices of audio render/capture devices for specific applications can be changed in the application, and all customised running applications with customised choices can have their default devices toggled to the default and back again from the right-click menu on the system tray icon.
- Not thoroughly tested, but the toggling should also occur for a specific instance of an application that has customised audio device preferences within 2 minutes of it first making a sound.
Main (Limited) Features
- Connect to obs-websocket.
- Connections over network are untested.
- Connection status indicator.
- Error status.
- Supports obs-websocket authentication.
- Passwords are stored encrypted using AES-256 with the AES-256 key encrypted using RSA 4096.
- The RSA 4096 keypair is stored in a CryptoAPI key container.
- The password's security is therefore reliant on the security of your user profile credentials and operating system file system's user permissions.
- A new AES key is created when updating the password. The process has been generalised so that different credentials or other encrypted preferences will likely use different AES keys.
- Displays current OBS scene and its sources.
- Only the first layer of sources are displayed.
- Indicates audio dependency issues with first layer sources in the current scene.
- A microphone source for a microphone that isn't connected is displayed in the sources list in bold red text.
- Switch OBS scene.
- No transition customisation.
- Updates text of time and weather OBS sources.
- Weather data must currently be in a specific JSON format.
- Cycles through weather locations in sync with system time (e.g. if set to a 5 second delay, cycles through locations every 5 seconds).
- If weather location cycle delay multiplied by number of weather data locations comes to less than 60 seconds, the first location is displayed longer ("held") so that it always displayed at 00 seconds past the minute.
- Switches to next slide in a slideshow in sync with the system time (delay must currently be a divisor of 60 seconds).
- Currently hardcoded to the F20 key as OBS Studio currently only allows switching slides using hotkeys.
- Closing all application windows minimises the application to the system tray. Connections and synchronised time/weather/slideshow changes continue to operate, and the system tray icon continues to blink on obs-websocket heartbeats.
Fair Resource Usage
- On my i7-7700HQ, CPU usage for the program tends to be around 0.0% to 0.1%, peaking at approximately 0.3%.
- It uses a sizeable chunk of RAM (about 60 MiB).
- It has an in-memory store representation of (for the device it is running on):
- every audio device,
- every open application with a window,
- and for OBS, every scene, source, and filter for the current scene collection.
- There are currently two known memory leak bugs caused by (a) obs-websocket reconnections, and (b) changing Windows system theme settings (i.e. dark/light mode, high contrast mode). For now the recommendation is to restart the application periodically.
- It has an in-memory store representation of (for the device it is running on):
- About 0.0% to 0.1% GPU on my GTX 1060, mostly being used to blink the obs-websocket status indicator.
Libraries
The following library releases are also part of this release:
- NAudioWrapperLibrary v0.3.0 (version in last StreamController release: v0.2.0)
- NetworkingWrapperLibrary v0.1.0 (version in last StreamController release: v0.1.0)
- OBSWebSocketLibrary v0.3.0 (version in last StreamController release: v0.2.0)
- SharedModels v0.2.0 (version in last StreamController release: v0.2.0)
- WebSocketLibrary v0.2.0 (version in last StreamController release: v0.2.0)
Library Versioning (Warning)
At present, minor version changes (major.minor.patch) to libraries are to be assumed to contain changes that are not backwards compatible.
Stream Controller 0.0.4
Stream Controller
This is the first published release of Stream Controller and it is version 0.0.4.
As this is the first release, the version numbers of both the program and its libraries need to be defined, details of which follow the feature list.
Release Files
64-bit
- Installer (what you probably want): StreamController_Setup_win-x64_0.0.4.0.msi
- Semi-Portable version (still stores settings/data in %LOCALAPPDATA%): StreamController_Files_win-x64_0.0.4.0.zip
- DLLs (libraries) and PDBs (debug symbols): StreamController_DLLs-and-PDBs_win-x64_0.0.4.0.zip
32-bit
- Installer: StreamController_Setup_win-x86_0.0.4.0.msi
- Semi-Portable version (still stores settings/data in %LOCALAPPDATA%: StreamController_Files_win-x86_0.0.4.0.zip
- DLLs (libraries) and PDBs (debug symbols): StreamController_StreamController_DLLs-and-PDBs_win-x86_0.0.4.0.zip
Features
Expected Features of a Windows Program
- It can be installed and uninstalled.
- Upgrading requires manually uninstalling the old version first.
- It has a Start Menu shortcut to both the application and uninstaller.
- It has a system tray icon as some of the features don't particularly need a window.
Workaround Features
- NVIDIA bug workaround: If your default sound output device has NVIDIA in its name, silent audio is constantly played to prevent the NVIDIA driver from putting the audio device to sleep.
- Windows UI workaround: Default sound render (i.e. speaker/headphones) and default sound capture (i.e. microphone) devices can be changed from the right-click menu on the system tray icon.
- Windows bug workaround: Customised choices of audio render/capture devices for specific applications can be changed in the application, and all customised running applications with customised choices can have their default devices toggled to the default and back again from the right-click menu on the system tray icon.
- Not thoroughly tested, but the toggling should also occur for a specific instance of an application that has customised audio device preferences within 2 minutes of it first making a sound.
Main (Limited) Features
- Connect to obs-websocket.
- Connections over network are untested.
- Connection status indicator.
- Error status.
- Supports obs-websocket authentication.
- Passwords are stored encrypted using AES-256 with the AES-256 key encrypted using RSA 4096.
- The RSA 4096 keypair is stored in a CryptoAPI key container.
- The password's security is therefore reliant on the security of your user profile credentials and operating system file system's user permissions.
- A new AES key is created when updating the password. The process has been generalised so that different credentials or other encrypted preferences will likely use different AES keys.
- Displays current OBS scene and its sources.
- Only the first layer of sources are displayed.
- Indicates audio dependency issues with first layer sources in the current scene.
- A microphone source for a microphone that isn't connected is displayed in the sources list in bold red text.
- Switch OBS scene.
- No transition customisation.
Fair Resource Usage
- On my i7-7700HQ, CPU usage for the program tends to be around 0.0% to 0.1%, peaking at approximately 0.3%.
- It uses a sizeable chunk of RAM (about 60 MiB) as it has an in-memory store representation of (for the device it is running on):
- every audio device,
- every open application with a window,
- and for OBS, every scene, source, and filter for the current scene collection.
- About 0.0% to 0.1% GPU on my GTX 1060, mostly being used to blink the obs-websocket status indicator.
Executable/Installer Versioning
Most of the intended features are still missing, and this software is pre-alpha.
The reason for a pre-0.1.0 release is that some of the current features are workarounds for operating system and audio driver bugs, so as there is potential utility in what has so far been developed I decided to release early. Most of the workarounds don't need a window open and can operate hidden away in the system tray overflow.
For comparison, the production version of my password checker Android app is at version 1.0.6 as it has a single purpose, no public API as it is self-contained (except the use of a third-party API to check password hashes), and does the one thing it is designed for.
My (UK food) product recall Android app, on the other hand, is currently at production release 0.4.0-alpha3 and has a clearly defined release schedule on its Google Play listing up to version 1.0.0. It doesn't have the features of version 0.4.0 yet (the first planned beta release), but it was pushed from alpha to beta to production because the features it does have might be useful. It has a private API as it needs the ability to receive notifications of updates.
Version 0.1.0
As the application will eventually need to talk to an Android app on the local network, it will also need a public API.
Version 0.1.0 of the executable/installer will be the point at which the public API is acknowledged as existing. It might not be defined, let alone well-defined, but it shall exist in some non-stable form.
Version 1.0.0 is a long way away, and version 0.255.65535 is almost as far away, but at some point the API should reach the 1.0.0 milestone and become defined.
Libraries
The following library releases are also part of this release:
- NAudioWrapperLibrary v0.2.0
- NetworkingWrapperLibrary v0.1.0
- OBSWebSocketLibrary v0.2.0
- SharedModels v0.2.0
- WebSocketLibrary v0.2.0
Library Versioning (Warning)
At present, minor version changes (major.minor.patch) to libraries are to be assumed to contain changes that are not backwards compatible. The reason is as follows.
No Public API
The software and its libraries have not reached the version 1.0.0 point of semantic versioning yet, and there is no public API.
Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it SHOULD be precise and comprehensive.
—1, Semantic Versioning Specification (SemVer)
Version 1.0.0 defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes.
—5, Semantic Versioning Specification (SemVer)
Initial Development
The software and its libraries are in the initial development phase.
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
—4, Semantic Versioning Specification (SemVer)
Backwards Compatibility
New releases of the libraries are only going to occur at the same time as new releases of the software. If a library reaches the point where it needs its own release schedule, it will most likely be forked into its own repository.
As version 1.0.0 defines the public API, and backwards incompatible changes are assumed in all major version 0 releases, how would someone using a released library outside of the released software know about the compatibility of changes? You can't increase the major version number for incompatible changes when X == 0
.
Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API. It MAY also include minor and patch level changes. Patch and minor version MUST be reset to 0 when major version is incremented.
—8, Semantic Versioning Specification (SemVer)
You could, however, increase the minor version for backwards incompatible changes before version 1.0.0 is released. What about backwards compatible changes, though?
Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backwards compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated. It MAY be incremented if substantial new functionality or improvements are introduced within the private code. It MAY include patch level changes. Patch version MUST be reset to 0 when minor version is incremented.
—7, Semantic Versioning Specification (SemVer)
Backwards compatible changes get pushed back to the patch version.
A library at version 0.2.0 at the first release and version 0.2.0 at the second release can be assumed to have no changes. Windows software have a fourth build version that can be incremented (major.minor.patch.build) - Windows Installer ignores build version when comparing versions.
Version 0.2.1 would indicate new functional...