Skip to content

Releases: steveseguin/vdo.ninja

Version 14.3

20 Jan 16:24
d7117ce
Compare
Choose a tag to compare

New features at a glance

Demo of new features in Video format here

Guest labels

Display name labels have been added as a video overlay option. Thank to Jcalado for helping out here and for creating a set of styles.
You can configure a publisher with a label by using &label=some_name or by just leaving it blank; &label. If blank, it will prompt for the user’s input.

&showlabels or &showlabel will turn on this feature

  • Font-size of labels will adjust slightly based on the window size
  • Underscores "_" used in label values will be replaced by spaces, allowing for word separation.
  • CSS of the styles can be set via the OBS browser source stylesheet window. The CSS class name you can customize is called "video-label"
  • There are some "preset" styles you can use by passing skype, ninjablue, toprounded, fire, teams, OR zoom as a value. For example: &showlabel=fire

Improved Video aspect ratio change detection algorithm

Along with this change, some improvements to the auto-mixer were made, including detection and mix update of detected video aspect ratio changes.

Remote volume control

You can now remotely mute a guest from the director’s room; there are options to mute in just the scene, but also have the guest muted Everywhere.
The volume control in the director’s room for a guest now applies to that guest’s volume Everywhere.

Reworked audio pipeline

New audio pipelines for streams have been added for both inbound and outbound audio streams.
You can disable it mostly by using &noaudioprocessing or just &noap as a URL parameter.
Added a compressor, limiter, and equalizer for the guests to tinker with.

  • &compressor (preset as a basic compressor)
  • &limiter (preset as a basic limiter)
  • &equalizer or just &eq (options to manually adjust are in the settings window, if enabled). Currently must be adjusted by the guest themselves, but will eventually be an option for the director to remotely control.

Change audio processing live

You can change settings like Audio echo cancellation, noise suppression, and auto-gain dynamically during a live stream now. This will cause the video to flicker with some browsers and will only show if the browser supports it.

New TURN Servers

New TURN servers added to LA, Chicago, and I think New York? Anyways, these are all UDP-based TURN servers, while the previous set were TCP-based.
You can check what TURN server you are connected to via the stats debug menu. (Ctrl + Left-click on PC; Command+LeftClick on macOS). UDP vs TLS is listed, along with the IP address, which opens up to show the hosted location of the TURN server. Check it out with https://obs.ninja/beta/speedtest

UI/UX Tweaks

  • Scroll bar in the stats menu doesn’t keep trying to scroll back up with each refresh
  • Listed Labels and Stats in the stats debug window are less buggy when there are more than one stream active
  • There’s a drop down button on the main page that reveals a few new buttons. File share, Share Website, Speed Test, and a link to OBS.Ninja documentation.
  • Added a Bug Submission button in the bottom right. It shows up when an error occurs in the code; clicking it lets you submit that error information to an OBS.Ninja error reporting server. Only the console log errors and user-agent info is submitted.
  • I changed the "Glasses" icon that appears in the top-right of videos to a HQ and LQ icon instead. This button makes the video fill the window and increases the video bitrate to at least 1200-kbps. Useful for seeing detail in a screen-share while in a group room.
  • If entering the room "test", you’ll get a notice now alerting you to the fact it’s not a secure room to be joining. Many users seem surprised to see the room is rarely empty, so I hope this helps that out.
  • Added a notice to the Transfer room popup, alerting users that rooms being transferred to need to share the same password as the originating room.
  • Added a button that lets a user reload the video camera device without selecting another device first.
  • An incorrect password (with &hash used) returns a more stylized error message now.
  • If you hold CTRL (or command) when muting/unmuting the speaker output, it will force the audio output destinations to be reconnected. Should be useful for me to debug audio issues in the future, such as when your sound suddenly stops working.
  • The microphone icon in the bottom control bar now glows green on local mic activity. May change later.
  • Added a Reset button to the URL link invite generator.
  • Added a AUDIO ACTIVITY indicator in the top-right of the inbound videos. You can now see who is talking. You can force this on in the SCENE links by using &style=3 as well, as it doesn’t show up there by default otherwise. Disabling audio processing will hide this all, as well. (&noap)
  • Removed the header from iOS when invited as a guest. Just trying to free up more space where needed.
  • Improved the play button. Opaque and easier to see now.

Tools

  • Jcalado has revamped the Speed Test to be pretty dapper and stylish. Graphs and more.
  • The Speed Test contains more accurate packet-loss values and a "quality limitation reason" output now for publishers. This Quality LImitation value defines why a stream you are outputting isn't performing well; CPU or Network issues are options, if there are issues.

  • Jcalado again rescues us with an updated https://obs.ninja/devices page that lists available devices, but also it can be used to find the audio-device ID for a given audio output destination. An alternative to using the Electron Capture app. And you just need to click to copy to the clipboard.

Improved reconnection logic

A significant amount of work has gone into adding reconnection logic for audio and video devices. If unplugging a device or adding a new device to the computer, or if a device is temporarily disconnected, the new logic will try to handle it. This will hopefully solve problems with Bluetooth headphones disconnecting during live streams and not reconnecting.

Improved file sharing

The &fileshare sharing function has been improved; more stable and less freezing for remote viewers.

New website sharing

The Share Website feature is experimental; it allows you to share third-party websites as an IFRAME. Some Youtube videos can be shared as "embedded" links, for example, with this option.

Chat window pop out

The chat window can now Pop Out, allowing you to type and read messages from another window. This cannot be shared cross-browsers, as it uses in-browser messaging.

Translations

  • The Language translator has been improved. It now supports placeholder text and tool-tip text. Please feel free to update translation files on github if not fully translated.
  • Portugese language updated (thank you again, Jcalado)

More parameters

  • The &enhance flag was added; this causes the Viewer of a stream to request its publishers to prioritize encoding and network sending of the audio stream. If you are facing clicking sounds as a viewer, such as with an OBS view link, this might help reduce audio clicking.

  • The parameter &iframe (aka &website) is added; this allows you to share a website with viewers. Please be aware this is still an experimental feature.

  • There are toggles for Advanced Video and Audio in the settings menu now. You can disable access to the settings menu by adding &nosettings.

  • Added a RAISE YOUR HAND feature, via an icon in the guest’s control bar. It causes a yellow button to appear on the director’s page when pressed. You can enable this with the &hands feature, added to the guests' URL link.

    • A new screen-share button was added. You can FORCE it on with &ssb, or hide it with &nosettings. The UX for screen sharing is not quite perfect yet, but I’m interested to hear feedback regarding it. If you toggle the button off, it will open the settings menu currently, letting you change to a different video device --- It does not STOP the screen sharing when pressed. Not yet at least. (maybe in v15)
  • &nopreview now works when doing screensharing.

  • Added &exclude=xxx,yyy,zzz as a new parameter, which is like &view, but in reverse. Any stream ID added to the list of values will NOT be allowed to load. So, you can eliminate specific publishers in a room from loading in your group video layout.(no audio or chat either)

  • &audiooutput is now an alias of &outputdevice / &od.

  • You can use the URL parameter &controlroombitrate or &crb to allow a guest to control their total allow room video bitrate. When added, a slider appears in the guest’s settings menu. For guests that have limited CPU or Network bandwidth, lowerin...

Read more

Version 13.4 Release

25 Nov 05:10
d48483f
Compare
Choose a tag to compare

Version 13.4 is another minor update release 💥, mainly focusing on polish, stability, and a few new features. (Live as of November 24th).

Change Log here:

https://www.reddit.com/r/OBSNinja/comments/k02enh/version_134_of_obsninja_released_change_log_here/

Version 13.2 - bug fixes and camera settings

09 Nov 21:26
9d1e1d7
Compare
Choose a tag to compare

Version 13.1 Release

02 Nov 07:43
589d0e4
Compare
Choose a tag to compare

Version 13.1 Changes:

  • added the ability for the director to use the &push= parameter, which is really only useful for manually setting a streamID. Doesn't do anything else or unlock other special powers. (dev)

  • made it easier for those deploying OBSN to change the room bitrate to default to whatever they want.

  • also changed some of the default room bitrate math as well; bitrates are slightly higher for guests in small groups now.

  • added the option &totalroombitrate , which I might delete or modify still, but it lets a guest set the total amount of bitrate they will pull from other guests, as a total. Default is 500-kbps. This could cause problems for mobile guest users, so I want to add more protections in before I am done.

  • added &nosettings as a way to disable the gear-icon for publishers. They won't be able to change their camera/audio settings once they start streaming with this flag set.

  • fixed a typo; "broacast". ugh.

  • made it so a &scene types won't show certain error popup messages. added just in case.

  • Rewrote some of the code to deal with a possible race condition; hoping this will mitigate any stream ID errors in use problems. users on proxied networks (or spied on) connections or such could potentially run into the race condition this tries to fix).

  • added a retry time out to cases where the stream ID is already in use. Checks every few seconds, up to 20 seconds, at which point it throws the error.

  • If a user refreshes the page, I no longer pop-up an alert warning the user that they are leaving the page. Instead, I use it as a moment to just disconnect the user from all camera/audio/rtc/hss connections properly. (browsers are horrible at garbage collection. they take forever sometimes, causing issues. This should solve that.)

  • modified the way chat looks based on user feedback.

  • text bars are no longer transparent

  • outgoing text bubbles are blue (akin to iOS sms messages)

  • background for chat window is darkened to give some contrast to the white bubbles.

  • added labels to chat; you need to use &label=somename to have them show up tho.

  • made the chat clip at 100 msgs instead of 10; also I made chat scrollable.

  • fixed an issue with chat where Chinese didn't wrap lines right due to lack of spaces used in that language.

  • fixed a few text typos in the group room.

Version 13.0 Changes:

New parameters

  • The option to share a video or audio file can be enabled with the &fileshare (&fs) URL parameter. The media will auto-loop and can be scrubbed by the publisher only. The viewers remain in sync with the publisher, including play-state and volume-level.
  • &maxpublishers now exists ( previously it was just &maxviewers). Limits the number of incoming p2p connections.
  • Added &randomize as a new parameter. Just makes it so videos in a room don't always load in the same order. If you set &maxpublishers, combined with &randomize, you can now get a random sub-sample of the room's guests.
  • The &label=VALUE has added value. The label's value shows up in the Debug/stats window, the title of the Browser's window, and in the director's room. Additional uses for the label parameter are coming, but not yet done.
  • If setting &label and leaving it blank, it will request a user for a name via a pop-up prompt.
  • added the ability to select audio and video device via the URL, by specifying a text phrase. Spaces can be represented by a "_" underscore character. Capitalization does not matter. &audiodevice=usb_preamp or something I guess
  • Added the &stats parameter, which causes the stats window load immediately without user input. This is useful for VMIX users who cannot hold CTRL to trigger the stats window that way.
  • Added the &hash parameter. It stores a 4-character hashed representation of the password, which acts as a pre-validation step in ensuring the user types in the correct password. It auto adds when creating a room or generating a custom link with the invite section. If the user's entered password does not match the hashed expected result, then the user will get an alert the password is wrong. It's not a 100% check, but good enough to deal with accidental incorrect password entries.
  • You can set the TITLE of the Tab now using the &label command: ie) https://obs.ninja/?label=SomeNameGoes_here
  • Added the ability to change the background color to a HEX color code: &chroma=0fa or &chroma=ff00aa (black by default)
  • &effects=x are added as well; 1 is face align and 2 is mirrored video. BOTH are experimental and are not fully fleshed out yet. &effects=1 requires Face Detection turned on in the Chrome experimental flags.
  • added a viewer-side keyframe control param. This essentially tells the remote publishers to send keyframes at a specified rate. ie) &keyframerate={milliseconds between forced keyframes} You don't need to be using OBS or VP8 to use it, and it is disabled by default, but it will reduce visual quality if set to a short interval. Useful if packet loss is really bad I guess?

Bug fixes:

  • Fixed some issues related to the director muting audio in scenes; can't unmute unless stream has been added first, etc.
  • Stats/debug window does not stack anymore; previous windows if open get closed when a new one opens.
  • Fixed an issue in Firefox where the START button could be triggered by the stream was actually ready, causing failed connections.
  • Added some code to try to handle the case where a video freshly added to a scene changes size by a single pixel. This is in response to some odd behaviour with Chromium-based browsers.
  • Fixed an issue on Android where if rotating the device's orientation, some videos might not scale to fit their containers correctly, remaining quite small.
  • &cleanoutput had some bugs that allowed for alert pop-ups when not desired. That's been fixed.
  • The &security parameter was made less verbose and it now applies to both a max of one publisher and one viewer; not just one viewer.
  • NDI devices should now be listed at the end of the device list, rather than potentially first/default. This was done to avoid NDI Tools drivers crashing the browsers right off the bat. If you run into problems, just refresh now.
  • Fixed an issue with video disconnecting on Beta when audio sources changed
  • Fixed a bug related to the help info button being unclickable
  • Figured out the bug that was causing the audio device to fail if the video device also failed on load.
  • implemented code to 'beef up' the video bandwidth if the audio is set very high. There was a bug that caused the video bitrate to drop if the audio bitrate was too high.
  • &buffer and &sync work correctly now. &sync by default will enable &buffer=0 and offer a way to set the audio delay without impacting the video delay. &buffer will delay both audio and video, with the goal to improve lipsyncing and reduce packet loss. &sync works in OBS, but &buffer does not. &buffer only works in the Electron Capture app, VMIX, or Chromium-based browsers. &sync can accept values typically in a range from around -50 to 500 (milliseconds).
  • Increased the time before retrying to connect to a stream if the publisher disconnects. This avoids a potential race condition.

Rooms:

  • The ability to transfer a guest from one room to another room is avaialble now. Guests will not know which room they were transferred to, providing for a secure call screening method. Guests will revert back to the original group room if they refresh their browser.
  • Guests will recieve a message in the chat-log if they get transferred to a new room by a director.
  • Only the FIRST director into a room's control center will be able to transfer guests; at least until they leave.
  • Multiple Guests can be transferred by holding CTRL (or command) when selecting guests to transfer.
  • Added a new button to the UI that lets guests mute other videos when they are in a room
  • The click-to-reveal Notes in the Director's room have been updated
  • Organized numerous app styles, text, and the Director Room layouts to be more accessible and templated for easier customization.
  • If in a room, a guest's stream cannot be accessed from outside the room. This is a change from the previous behaviour.
  • The Director can use the hotkey CTRL-M (command-M) to toggle the mic on and off, once the director's mic option has been enabled.
  • The Director's voice-of-god audio cannot be easily muted by guests in a room.
  • The main director of a room can force a publishing room guest to remotely hang up (the remote user can just rejoin of course)
  • The main director of a room can remotely change focus/zoom of a participant without needing the &remote command now.
  • I've added code limiting the group-room audio to 32kbps. Director gets capped at 32kbps audio as well, unless stereo is enabled that is.
  • global volume control is available for group chats and directors. Mute is on by default for the directors room still, but this lets you unmute all videos easily. (Director's mic cannot be muted by guests tho)

Mobile:

  • The stats/debug window can be opened on mobile by rapidly tapping on the video of interest 5 times in a row.
  • iOS devices can no longer select a custom listening audio-bitrate; if set it will be ignored. This bypasses a bug with iOS Safari that could cause distortion or a failure. If problems still persist with audio on iOS, fully-restarting Safari can help.
  • iOS devices will show up as a low-quality video stream in the Director's room now. 30-kbps or so. It cannot be changed until adding &forceios to the director's URL.
  • iOS devices will now broadcast video to everyone in the group room. It sends a 30-kbps low-quality video stream to all the guests, using the VP8 codec, while it still sends a 720p H264 high-bitrate stream to OBS. Previously iOS devices only shared audio with other guests, unless &forceios was used. Not ide...
Read more

Version 12.2 release

24 Sep 19:53
7af76cf
Compare
Choose a tag to compare

Fixed a bug related to passwords + group-rooms + reconnections. Guests can reconnect without issue now.

Version 12.1 Release

14 Sep 14:04
b270267
Compare
Choose a tag to compare

Please find the release notes here:
https://www.reddit.com/r/OBSNinja/comments/irz5be/obsninja_version_12_released_change_log_here/

tl;dr; In this release I mainly tried to improve the connection reliability of the group rooms, added features to the Director's control room, added new URL parameters, and improved system scalability.

This version has seen about 2 days of production-level testing; some bugs may still exist. Please report them if you find any.

This is a mirrored-copy of what is currently live on OBS.Ninja -- editing index.html can of course customize things further to meet your needs.

Version 10.3 beta release

26 Aug 10:33
75ba4f4
Compare
Choose a tag to compare

Fixed some critical bugs with the version 10.1 release

  • group room reconnect issues fixed
  • iOS support improved
  • few minor new feature
  • japanese language added
  • etc....

THIS IS NOT YET FULLY TESTED

Version 10.1 release

23 Aug 07:03
588e99d
Compare
Choose a tag to compare
Version 10.1 release Pre-release
Pre-release

BUGGY - sorry

Version 8.01 Release

29 Jun 01:07
3719f4a
Compare
Choose a tag to compare

Same as 8.0 but with a few UI and flag bug fixes based on user feedback today
https://github.com/steveseguin/obsninja/releases/tag/8.0

Version 8.0 Release

28 Jun 09:07
4ec298f
Compare
Choose a tag to compare

Version 8 has just released. This change log contains some updates for v7 as well, as v7 was mainly silent infrastructure improvements.

As always, please clear your browser cache in OBS and in your browser if there are problems. This version is not backwards compatible. If problems persist, the previous version can be found at https://obs.ninja/v7

The focus on Version 8 was on UI/UX improvements, bug fixes, and adding some simple feature request.

For reference and details, all the available advanced URL parameters can be found on the updated wiki page: https://github.com/steveseguin/obsninja/wiki/Advanced-Settings

Change Log
There are new shortened aliases for most the URL parameters. &view=abc can be typed as &v=abc now, for example. This was done to both allow for obfuscating the URL parameters for links given to guests, but also to allow for shorter links. See the Wiki for details.

There is a password feature now. It applies to both rooms and stream IDs. It's a bit crude at present, but if you add &password to the URL as a viewer, director, or pusher, your room and streams will be made inaccessible to anyone who does not also enter the exact same password. Passwords can be entered as the parameter value or you will asked via a popup message prompt.

The &secure feature was fixed and improved so that it can support many of the other newly added features. It is useful for one on one conversations that require extreme privacy precautions. It should be compatible with the password feature as well.

Added language translations were added thanks to user contributions. The translation system in general was improved and more tools are available to make updating and adding new translations easier. Portuguese and Italian were the newest additions.

&icefilter=tcp was added to let users filter out ICE candidates that are UDP-based. This is mainly for debugging and testing for those deploying their own TURN servers.

If a user on macOS tries to use OBS.Ninja inside OBS v25 or Streamlabs, they will get an error message with help information. By adding &streamlabs to the URL, that error page will be removed and macOS users using StreamLabs can still try to do so.

Although persistence links exist, as per user request I've created the &sticky parameter option that will let a user store their session parameters. The next time the user visit OBS.Ninja, they can auto-load those previous settings, including push and room IDs, from a saved cookie file.

If a user fails to connect to the TURN server, which seems to happen occasionally for users that require it, the system will now auto-retry. This mostly fixes an issue with Group chat where not all guests load for all other guests.

Audio echo cancellation can be manually and individually turned on or off now via &aec URL parameters. The same goes for auto audio gain (&autogain) and audio noise reduction (&denoise)

&webcam and &screenshare will hide either the screenshare option or the webcam option for guest, when appended to their invite links. It helps funnel them to the options you want.

&maxvideobitrate can be used by a stream publisher; it sets a hard limit for a viewer so they cannot request a video bitrate higher than that of specified. 2500-kbps is the default.

For those wishing to limit the number of viewers of their stream, there is also the &maxviewers now. If the max is hit, other view requests will be ignored. It takes about 10 to 20 seconds for a disconnected users's connection to fully drop, so if you are at max already, you may need to retry connecting 20 to 30-seconds later.

If you press CTRL (or Command) AND Left Click your own local video during a stream, you will be shown stats that say how many connections you have; both inbound and outbound streams.

If you press CTRL (command) and Left Click on a remote video you are viewing, you will see added stats now; bitrates, but also the type of video codec being used and packet loss data. High packet loss can result in rainbow puke looking video; using VP9 can help resolve that.

Fixed a bug with custom bitrates when used with the VP9 video codec. VP9 with custom bitrates will use up a lot of CPU power, but it tends to not suffer from rainbow puke.

You can specify the designed audio bitrate now, individually, using &audiobitrate. 60-kbps is the default for mono, while 256-kbps is the default for stereo. 1024-kbps is the coded hard limit.

&scale can be used as viewer of a stream; it will request the publisher send video at a scaled down resolution. If the publisher has their max resolution set to 1080p, and you as a viewer set &scale=50, you will only receive the video at a max resolution of 540p; 50% of what is available. This can help give the OBS-side viewer more remote control over resolution and frame rates.

&mirror and &flip are commands for the viewer that flips and mirrors the video playback.

&optimize, if used in OBS, will have videos that are not active scale down in resolution and bitrate to 600kbps or so. Instead of disabling the Browser Source when not active, you can use this to just reduce the bitrate and CPU load, and it will automatically recover to full bitrate/resolution within about a second of being active again. By default, this feature is off.

The TURN server can be forced off with &turn=off now

&sink and the electron app lets you specific output audio devices.

&channels=8 will tell OBS.Ninja how to upmix audio tracks. This is useful when used in conjunction with &channeloffset

&channeloffset=N lets you shift audio from channel 1 to channel N. This is useful for routing audio from Chrome or the electron capture app directly to a specific channel on a virtual audio capture device, like Voicemeeter on Windows.

The auto-mixer (for group scenes) works better now; about 30% more efficient with spacing videos out, although it is still optimized for 16:9 aspect ratio videos mainly.

Vertical video in the director's room is handled better

It's possible to record multiple videos in the director room at a time now; not just one. If you run out of RAM though, the system will crash, so this is still considered experimental.

You can start the recording of several videos in the director room at once by holding down CTRL (or command) when pressing "Record" on each video. Defaults bitrate to 2500-kbps per video in this case.

The faux FullScreen icon is improved; lots of changes related to that

You can now actually full screen videos natively

New icons are used; transparent and line-based is the new theme there.

A HANG UP button has been added to streaming page now. Press it and all the connections close and the page clears.

You can create faux chat rooms by using a combination of multiple view IDs and a push ID. I fixed some bugs related to this feature. https://obs.ninja/view=guest1,guest2,guest&push=guest4

Faux chat rooms now work with custom bitrates; normal group "rooms" though have a bitrate that cannot be set by guests themselves.

Guests can no longer pause videos.

Your own local video stream does not show the control bar anymore -- this prevents guests from unmuting themselves and creating feedback during live streams

Stats get updated ever 3 seconds, instead of 5; Buffer sync code also updates more often now. Videos that are not playing also will auto-play with checks every 3 seconds. (user interaction is still needed to trigger this in Chrome)

Got rid of the large glow around videos and replaced it with a thin border. This thin border can be used for the tally light feature. In OBS, if a video is toggled into visibility, the guest of that video will see a red border around their video. This indicates that they are visible in OBS and that they may be on-air. It is experimental and can be disabled with *obsoff

An error message is given to those with NDI Tools problems when selecting a camera; after 20 seconds it will fail with an error message. Uninstalling NDI tools or updating NDI tools or using Firefox are solutions for now.

Lots of UI/UX polish to numerous places, including rounded edges, easier to read fonts, softer colours, etc.

If a connection to the handshake server fails, it will retry in 15 seconds, but it will also give a warning that it failed. This error message is mainly to help alert users that they may be blocking the required port to access the service.

Created the https://obs.ninja/dock file that can be added to OBS to help auto-generate invite links for users. The drag-into-OBS function has been improved.

Removed the messages that a user is trying to use your streamID; or at least I only show it once.

&cleanoutput is now set to hide a lot of error messages and text; useful if you want no error messages or text when doing a live stream in OBS.

Fixed an issue with iPhone 6s cameras

You cannot pause videos anymore; they will always auto-play if there is a user gesture. Auto play happens every 3 second or less, if event driven.

Overlay buttons are generally smaller; &cleanoutput will hide them also

State sync remains an issue with adding users to scenes from the Director's room, but you can now hold CTRL (or command) when pressing a button and it will re-issue the existing direction/command ; instead of toggling. This is useful if you wish to sync a scene without having to toggle a video in another scene also.

The group room video quality logic is now dependent on how many users are in the room. 1 guest is 300kbps each; while 4 guests is 120kbps each; and etc.

Managed to get NDI Tools to work in some more scenarios, but not all.

You can pass URLs via command line to the Electron Capture app; v1.0.2 via github releases if you wish to try it.

videos load faster when requested and load faster after a disconnection event.

Whew..., well, I'm sure there are lot more things I've forgotten to mention, but this is about 2 weeks worth of ...

Read more