v17
Version 17 mainly focuses on user feature requests. Apologies that I didn't get all requested features included this time around, but please be sure to keep the requests coming. As always, please report bugs and provide feedback; it is critical to ensure development continues in a health direction.
If there are problems with version 17, the previous version of VDO.Ninja can still be found at https://vdo.ninja/v164
One new feature that I'd like to highlight in v17 is a new custom video mode that can be used in combination with the director's broadcast-to-room mode. With this setup, the designated broadcaster will encode just a single video stream, and then reuse that encoded stream for all the viewers, dropping frames as needed if bandwidth is limited. Since only a single video stream is encoded, much less CPU is needed to share video with a large group of guests. It's an experimental feature, but I'd love to hear feedback on if it works for you.
- Added the new virtual background functionality; you can allow a guest to select their own effect by adding
&effects
to the guest invite URL. - You can manually specify a virtual background effect via URL with the following options:
https://obs.ninja/?effects=3
(bokeh blur)https://obs.ninja/?effects=4
(greenscreen)https://obs.ninja/?effects=5
(image; guest can select an image on joining; a sunset image is used by default)- Green screen doesn't require SIMD support to work, although it won't work as well without it on. I leave a little warning info icon (!) if SIMD is not enabled. Please do enable Webassembly-SIMD support under
chrome://flags/
if you'd like to see a large reduction in CPU load when using this feature.

image
- Drop down menus created for the virtual/digital background effects. You can select a preload image also or upload your own custom one. Change it via settings of use
&effects
to pick on startup.

image
- An 'active speaker' mixing mode has been added. It auto-hides remote guests videos when added, if those guests are not speaking actively.
&activespeaker
(or&sas
or&speakerview
) - It will show multiple speakers if there are multiple simultaneous speakers.
- The last guest to speak will remain visible when speaking stops.
- Works with scenes, faux-rooms, and on guest-invites.
- Attempting to solve the CPU issue when broadcasting to many guests in a room, I created a bit of a custom video codec that bypasses the issues I've been having with WebRTC. This codec uses under 1mbps upload per connection, strives to be as low latency as possible, and uses very little CPU even with many viewers connected. It's quite experimental, not the greatest quality, and still needs the publisher to be 'visible' on the desktop (else it freezes), but it can be enabled while in a group room by adding
&broadcast&webp
URL parameter to the guest links. ie:)https://vdo.ninja/?room=xxx123&broadcast&webp
(The director just needs to go live with their camera after that.) - It must be used in conjunction with broadcast mode, but the director doesn't need to be the designated broadcaster.
- The Electron Capture app should work to allow for webp-based broadcasting even if the tab is not visible, as tab throttling is disabled with that application.
- This usese a custom video codec, which is essentially a stream of webp-based images sent over the webRTC data-channels.
- The quality by default is limited in both frame rate and resolution, as this custom video codec is very inefficient at higher resolutions and frame-rates.
- The URL paramter
&webpquality
(&webpq
or&wq
) can adjust the quality, where you can pass a value from 0 to 5. You add this parameter to the director (or designated broadcaster) and it then sets the the quality target for the&webp
mode.
5 (default) = 270p @ ~15fps ; 4 = ~30fps, 3 = ~50fps, 2 = 360p, 1 = 720p, 0 = 1080p.
Based on my testing, the webp mode is only efficient if you are keeping the bitrates under like 2mbps, so the higher qualities make little sense IMO outside of some niche use cases as they use up a lot of bandwidth. Still, I wanted to give the option.
- I felt like it would be fun to add "command" options to the chat box, turning the chat window into a bit of a console.
- "/list" will list those connected peers, in format: UUID : user label
- "/msg userid some message here" lets you send private messages to other users. You can use partial strings, and I'll do what I can to guess the user based on those partial strings. Use the UUID value or the user's label name. not-case sensitive.
ie:
/list
/msg 25e HellllOOo
- Should list user's labels in a list, along with whether they are video-muted or not, etc.
- Includes mic mute states and voice activity meters in the list.
- Isn't visible by default in scenes, faux rooms, or when using
&broadcast
mode.