Skip to content
Steve Seguin edited this page Feb 25, 2021 · 86 revisions

General

Project Information and Support Links

web service URL: https://OBS.Ninja
project development URL: https://github.com/steveseguin/obsninja
developer/maintainer: [email protected]
donations: via GitHub Sponsors

Community Support

Discord: discord.gg/EksyhGA
Reddit: reddit.com/r/obsninja

What is OBS.Ninja?

In its simplest form, OBS.Ninja brings live video from a smartphone, tablet, or remote computer, directly into OBS Studio or other compatible broadcasting software. OBS.Ninja is offered as a free web service, but it's also available as customizable and deployable open-source code. Some have called it the modern Swiss Army knife of audio and video transmission.

How does it work?

OBS.Ninja relies heavily on webRTC, a secure peer-to-peer streaming technology that exists in most modern browsers. Most of the OBS.Ninja code runs completely within your browser, although some server-side components are hosted to help facilitate an initial ‘handshake’ between connecting peers. As video data is streamed directly from one peer to the other, server-based solution alternatives simply cannot offer the same low-latency and video quality.

When using the built-in browser plugin of (OBS Studio), OBS.Ninja makes it possible for you to bring this low-latency video directly into OBS Studio without any downloads or user accounts. It's possible to start streaming within seconds.

Essentially, there are two URLs; an input and an output. The input URL is loaded onto the remote device, which obtains the user's permission to use the device's camera and microphone. The resulting output of this is another URL, which can be used to access the stream remotely. That URL can also be dropped directly into an OBS scene as a browser source element. The video will play automatically once the URL is added to OBS.

*Please note: MacOS users need to update to OBS v26.1.2 or newer to access full OBS.Ninja support in OBS. For those running StreamLabs for macOS or older versions of OBS, consider using the Electron Capture instead.

Why would you need OBS.Ninja? (use cases)

  • To allow your mobile device to be used as a wireless remote camera.
  • To pull in other people's video and audio for podcasting/broadcast (guest appearances)
  • For sharing high-quality and low-latency audio and video across the Internet and within LANs.
  • Bring a friend's remote game stream into your OBS and do side-by-side gaming together.
  • To allow you to publish to YouTube with your smartphone even though you don't yet have enough followers to broadcast to Youtube with the YT mobile yet.
  • To watch movies with friends, via screen sharing, privately, and with low-enough latency to talk on the phone together while watching it.
  • Use as a remote low-latency teleprompter feed
  • For whatever other reason you might come up with.

Why use OBS.Ninja over other solutions?

In some cases, the functionality of OBS.Ninja may overlap with existing solutions. However, in its primary function as an ultra-low latency peer-to-peer video bridge to OBS, it has many benefits and advantages over other methods:

  • 100% free. There's no downloads required, no personal data collected, and no sign-in needed.
  • Works without the need of downloads and is compatible with most browsers and mobile devices.
  • Open-sourced, so you can theme and deploy the website code however you want.
  • Free support offered via email, discord, reddit, and numerous written guides.
  • Video data is peer-to-peer, so unlike Skype, your video data does not go thru the NSA's spying servers
  • Video can be transferred over a LAN directly, so if using your phone as a webcam, you can crank the bitrates up to 40mbps if you want, and your Internet upload bandwidth won't be affected at all.
  • Video does not go thru a server, so there is less latency as there is less distance to travel. I'm talking as low as 30ms, and normally it never goes higher than 200ms.
  • There are no downloads required for sharing video -- just send the web link to a guest and they can access the service on nearly any device.
  • Playback of video has been tested to even work on LG's CX OLED displays using Amazon Silk browser
  • No plugin additional plugins are needed for OBS -- just drag the selected link into OBS (v25 or newer on PC*) and it auto generates the OBS Browser source with the correct resolution. (* MacOS users need to update to OBS v26.1.2 to access support for OBS.Ninja natively.)
  • QR Code support for invite links, which allows for easy ingestion of mobile devices without needing to use the keyboard.
  • Reusable invite links, so OBS Browser sources don't need to be re-created or changed once created and shared.
  • Adjustable resolutions and bitrates (1920x1080p60 @ 30-mbps -- or even custom resolutions). I've hit 4K @ 30fps in some testing, although it does require a fast computer in that case.
  • There is a browser-based video control room for managing feeds and control videos within scenes of OBS.
  • There are no overlays and no windows to crop -- OBS.Ninja auto-fills the window an if there is a black border, it becomes a transparent layer.
  • Control over audio denoise, echo-cancellation, and auto-gain is available, along with custom audio bitrates, and stereo-sound. It is an exceptional tool for podcasters and live streaming DJs.
  • In group chat there is an "auto-mix" mode, making for easy management of dynamic group chat sessions.
  • Free TURN servers are hosted for OBS.Ninja users, which normally are quite costly, but are kindly subsidized by community sponsors and by Steve, the developer of the application.
  • Group rooms and streams can be password protected and given extra security.
  • Tally-light support is offered when OBS.Ninja is used in conjunction with OBS.
  • The group-room director has a "push to talk" capability, along with text-chat being available.
  • Support for ISO feed recording via the director's control room.
  • Those in a group-chat can also be split up into individual streams, so the OBS director has control to treat them like different sources in OBS ,switching and mixing as they want.
  • With little dependence on video servers, at peak usage hours video quality does not suffer.
  • OBS.Ninja is a project of passion, built by creators for creators, and we like to think it shows.

Where can I get support?

The preferred support mechanism is via Reddit or Discord, which offer community-assisted support. Development issues, feature requests, and bugs are tracked on Github. For mission critical support issues, or business-related inquiries, you can contact Steve directly.

Where can I report a bug?

It is most helpful to report bugs via the official Github. While we monitor the Reddit and Discord channels, it is easy to miss issues/details that occur in comments and older threads.

Can I use OBS.Ninja with other broadcast software?

The technologies used in the creation of OBS.Ninja are application agnostic. It doesn’t know how the output URL is being used. To that end, any software that can use a browser-based source or has window-capture capabilities should be compatible with OBS.Ninja.

Please note though, OBS.Ninja is only officially tested using OBS (obsproject.com), and there are some OBS-specific features included with OBS.Ninja that may not work elsewhere. (tally-lights, for example)

Group Chat

The ‘Group Chat’ feature creates a virtual room where multiple devices can connect to share audio and video. It offers echo-cancellation and text-chat support as well. A room ‘director’ can manage the group rooms as well, easily accessing individual sources for integration into OBS.

How does Group Chat work?

Group chat is a work in progress, and features are actively being added/updated. Currently, this is how it is implemented:

  • Guests have their own link to join the chat room. They will be able to see all of those in the chatroom, including themselves. Settings to restrict what sources each group member can see or hear are also available.
  • The "director" will be able to view the chat room, without joining it themselves, and they will have controls provided that will let them modify aspects of how the room shows up in their OBS. For example, they will be able to mute certain people so they can't be heard or seen in OBS.
  • The director will be provided isolated direct links to each of those video streams in the group room, allowing for fine-grain mixing control in OBS.
  • Text-chat is available to those in the group chat
  • Passwords are available to keep rooms secure, but are optional
  • Guest devices present in the Group Chat room will see and hear all other present device video/audio streams.
  • The video quality of those in a group room will appear low to guests, but this is to ensure more bandwidth and CPU resources are made available for the OBS's access to the stream.
  • Group rooms are not restricted in size, although more than 10 guests can start to be challenging.

Using OBS Virtualcam (or the Mac equivalent), you can even let your guests view the OBS live stream with sub-100ms of latency. In this case, each guest only needs to view one video stream, the main mixed OBS stream, freeing up group resources to allow for even larger group rooms.

How many people does the Group chat support?

There is no technical limit restricting the number of ‘people’ in a group chat. The limitation is more a function of video decoding processor power on the host computer and (to a lesser degree) network bandwidth.

Currently it is designed to accommodate at least four (4) people; it might be able to do more, but the weakest link in the group will likely cause it to fail before then. If you want a group chat that can handle, (lets say 30 people even), it can be done, but everyone in the group needs good internet, a fast computer, or the room needs video previews disabled for guests.

For very large groups, >40, it is generally advised that you use regular server-based chatting service, like Google Meets, and send an OBS.Ninja invite links to each person individually. This way, you can record the individual streams of those in the Google Meet at a high resolution, but still have all the guests be able to see and hear each other.

If you use OBS VirtualCam, now included with OBS v26, you can broadcast from OBS direclty into the Google Hangouts or other conferencing software. To avoid audio feedback/echo issues, having the guests wear headphones is suggested.

Common Errors and Known Issues

Grey spinning window

original issue thread: Reddit: Grey spinning Window in OBS

If you are experiencing this issue and you are using MacOS, please refer to the MacOS specific section

If this happens, there could be numerous reasons.

  • Check that you have hardware-acceleration turned on, within OBS, and have updated your graphic drivers
  • Ensure that you are not behind a VPN or firewall. Symmetrical firewalls may block OBS.Ninja traffic
  • If on macOS, use the Electron Capture application instead of the Browser source used by OBS (Also ensure you are running OBS v26.1.2 or newer!)
  • Try using a VPN, such as Speedify, to bypass any networking firewalls that your ISP may have enabled.
  • Check test.webrtc.org

Are you using cellular?

  • If you are on cellular, try connecting to Wi-Fi instead.
  • Ensure your are using a compatible browser (Safari on iOS or Chrome on Android)
  • Older iOS devices do not work
  • Check test.webrtc.org

Are you on IPv6?

Check to make sure your TURN server supports IPv6. The ones I provide should support it though. Check test.webrtc.org

Are you using an iPhone?

There are numerous issues with iOS devices; see the iOS help section for more info. Check test.webrtc.org

Are you within a condo building or corporate office?

Firewalls may be setup that block traffic of this type. Talk to your network administrator Other problems? Check test.webrtc.org and see if anything is marked as "RED". You can also try different networks and see if that helps.

In the meantime, OBS.Ninja/old is up, and will remain up until I can resolve all the issues with the new release. This may solve your issue temporarily. So if you have this problem , where you see the fullscreen video, but it is just grey and spinning, then it could be a network issue.

Audio is delayed in OBS

  • Might be caused by a Browser-source related bug in OBS.
  • Fully restart OBS and see if that clears the issue
  • You can try to bring in audio via https://obs.ninja/electron instead. &novideo can be used to ingest just the audio. Route the audio to a virtual audio device and then bring that into OBS as an audio device. Should be in sync this way.
  • OBS.Ninja uses 48000khz sample rate for audio; using this sample rate whenever possible can help keep things in sync
  • Try to avoid overloading your CPU or using too many browser source elements in OBS; OBS Browser Source can get overwhelmed.
  • VMix could be an alternative to OBS if problems persist; Vmix supports OBS.Ninja also.

Audio Clicking / Popping

  • Bluetooth microphones can cause clicking/popping
  • OBS.Ninja uses 48kHz audio (48000hz), so any software you connect should also use 48-KHz
  • If you have the option with any software being connected, increase the buffer size of your audio pipeline.
  • If using a macOS system, ensure your computer is plugged into the power outlet and not on battery power.
  • Consider reducing the resolution and bitrate of videos, as this can help free up CPU load.
  • Do not use Wi-Fi if streaming high-quality music; packet loss can cause clipping. Use wired Ethernet on both ends of the connection instead.

Hosted your own TURN server?

For a guide on deploying your own TURN server on a Ubuntu server, see the below link: https://github.com/steveseguin/obsninja/blob/master/turnserver.md

The benefits of a turn server include Increased security when actively used (less chance of IP leaking) and better network compatibility. Without a TURN server, about 10% of remote guests will not be able to connect with each other. In some cases, at the cost of added latency, a TURN server can also provide better video quality by means of forcing TCP data transfer.

I do offer a basic TURN server for OBS.Ninja users, but it is costly to operate and maintain. Deploying your own can offer better reliability and it frees up potential resources for other OBS.Ninja users. Please do not abuse it.

Google Cloud offers a free small server for life, so it’s possible to do this for free, so long as you keep it all private. GCP also often comes with a $300 free credit tier, even though GCP is a bit expensive for heavy usage in the long-run. It doesn't support IPv6 either, but it does have a good network backbone. (~20-cents per gig)

Twilio offers a paid TURN server service, which works well, but it's hard to setup for non-coders and it is twice the cost of Google to operating. (40-cents per gig).

Another alternative to a TURN server is to bypass the NAT firewall that your OBS computer uses. You can do this in the network's router settings, normally by setting the DMZ to point to the IP address of your computer. This is dangerous, as it exposes you to the internet, but without a firewall you are less likely to need a STUN or TURN server.

Another option is to run OBS in the cloud on a virtual workstation, where you can open specific ports without the concern of a personal-computer hack. Some guests will still need a TURN server, but the likelihood is dramatically reduced.

You can also have remote guests who are needing a TURN server to install a VPN, like Speedify, which can bypass firewalls and other issues that might otherwise require a TURN server. Enabling TCP-mode within Speedify or other VPN service can also help combat packet loss, at the cost of added latency.

If going the VPN route, you also have the ability to secure your privacy/IP-address more securely; in some cases, more so than even a TURN server. See this article for more information there: https://www.expressvpn.com/webrtc-leak-test

Video is pixelated

original issue thread: Reddit: Pixelated Video

"Pixelation" (as seen here: https://imgur.com/oKEPOvu) is a difficult issue to troubleshoot as there are several potential upstream configurations which can ultimately lead to high packet loss which is the primary cause. Here are some potential fixes and configurations that may assist in lowering packet loss:

  • Change the video codec or video encoder used: h264, VP8, and VP9 are options. VP9 seems to handle packet loss the best within OBS, but it also creates the most CPU load. VP8 handles packet loss the worst in OBS.

  • DO NOT USE WIFI. Have everyone connect to stable wired Internet whenever possible.

  • Use Speedify.com (in AUTO or TCP mode)

  • Use the Electron Capture app instead of OBS to capture video. The Electron Capture app uses a newer version of Chromium, which works far better than OBS when dealing with packet loss related issues.

  • Lowering the framerate or resolution, especially for those using H264, can provide smoother video, and perhaps with less distortion

  • You can increase the jitter buffer size by using the "&buffer" URL parameter; such as "https://obs.ninja?view=abs&buffer=300". This only works if using Chrome/Chromium v76 or newer though; OBS v25 currently uses Chromium v75 and so is not yet compatible.

  • You connect two peers via TCP, instead of UDP, which will ensure there is no packet loss. This option is for more advanced users and requires a compatible TURN server (or VPN). Please use your own TURN servers for this option if so, as the bandwidth costs can be quite high for me.

  • You can scale down the video while viewing with "&scale=50" to potentially reduce stutter and reduce the frequency of frame corruption.

  • Normally the video should "fix itself" after a moment of so, but if not that is likely a bug in the browser used for decoding. If in OBS you can toggle the visibility of the element to try to trigger a resolution. I've also provided a "SEND KEYFRAME" button in the hidden stats menu that lets the publish do this from their end.

  • Mentioning this again, but connect over wired ETHERNET if possible and avoid wireless connections, including WiFi networks. DSL connections are also often quite poor. Do so for both OBS and the video-connected device for optimal results. Even 4G LTE is better than Wi-Fi in many cases.

  • Do not watch a 4K Netflix or Youtube video while streaming; it will increase network congestion and can cause packet loss and buffer-bloat.

  • If you have LOW QUALITY video, or low resolution or low bitrates, that perhaps can be adjusted. Please see below re: bitrates and resolutions

  • Ensure your computer and remote computer are not maxing out their CPU power. If they are, have them lower the resolution and bitrate.

Video freezes mid-stream

If the stream freezes mid-stream (e.g., 15 or 30 minutes) in, that seems to be an issue quite a few people have had when on bad connections. New code has been added in hopes it will reduce how often that happens, but just refresh if this happens. OBS.Ninja should auto-refresh frozen streams on its own in most cases after a few second.

iOS users can only send video to 3 viewers at a time. After that, videos will start freezing or turning black.

Is the OBS.Ninja server down?

The "O" in OBS.Ninja,in the top left, will go red as an indication that the client cannot talk to the OBS.Ninja server. It will NOT try to reconnect automatically, although that is a coming feature I will add eventually.

If on mobile and you tab away from the site, the server connection may be lost.

If the O is red, then you will need to REFRESH the page to reconnect. I'll fix this hassle eventually.

However, if the server goes down, the video stream will NOT stop if already start, as the video stream does not go thru the server. If the server goes down it just means that no one new can connect to the stream anymore, but if already connected, you are fine. I may also fix this in the future, but I don't see the urgency for it.

The video stream happens over a direct peer connection. This connection can be pretty unstable as cellular phones are not the most reliable things in the world. If a video stream dies, it is not the server's fault, but a failure of the peers to hold a reliable connection open.

Auto-reconnecting does depend on the server though. When connected over a high quality LAN , two devices really shouldn't see their connection fail though, but if it happens often, please let me know.

There is a backup server at https://backup.obs.ninja if the main OBS.Ninja does ever go down.

Why can’t I screen-share from certain devices?

The Screen sharing feature is highly dependent on the operating system of the device whose screen you are trying to capture.

  • Chrome browser used on a PC is most compatible, fully supporting screen sharing with audio.
  • Firefox on PC supports screen sharing, but it cannot screen share with audio.
  • Safari on iOS does not yet support it officially, although it does support it with the "technical builds" designed for developers. Until Apple officially supports, there isn't much I can do there easily.
  • Android does not support it and it is doubtful that it will in the near future.

In either case, you can use Native mobile apps to solve this problem, but I have not made one yet to do so.

Why can't I capture an application's audio when screen-sharing?

Chrome only supports audio capture from a TAB or from the DESKTOP. If you would like to capture the audio from a desktop application, use VB Virtual Cable for Windows or Loopback for macOS.

With VB Cable (Free), you can use Windows built-in "mixer" app to push the audio from the application to the virtual cable, and capture that into OBS or OBS.Ninja as needed.

With macOS, Loopback makes capturing audio from an application easy, but it is a paid app.

There are other methods and software alternatives out there to solving this problem.

I get “Overconstrained" Camera Error when using OBS.Ninja

If you get an Overconstrained error, it typically means the webcam or camera device has settings that are not compatible with OBS.Ninja code. With every camera being different, and everyone wanting high-quality video, it's a game of whack-a-mole to address each specific instance.

Some ideas though:

  • You can try unplugging and reconnecting the device, and then trying again
  • You can use a different browser: Chrome, Firefox, Opera, etc.
  • Do not try to specific a manual resolution; perhaps try the defaults
  • Do not use the camera in other applications at the same time
  • Try installing SnapCam or OBS virtual cam and try to select that; use it as an intermediary device.
  • Uninstall NDI Tools, as it sometimes can cause issues or conflicts

I am experiencing low frame rates

original issue thread: Reddit: Low Frame Rates

There are several reasons you may be experiencing low frame rates, including:

  • If you are on MacOS using StreamLabs OBS, then the frame rates will be bad because of a bug in StreamLabs for Mac. (consider the Electron Capture app instead)
  • Try switching on "Enable Browser Source Hardware Acceleration" on in Advanced settings of OBS.
  • If you are using Cellular / 4G, then the quality of the video may be poor due to the TURN server being in the USA or overloaded.
  • Lights in your room are too dim maybe; try to make your room much brighter
  • Resolution is set to high, so selecting a lower resolution might help. This is especially true for H264 streams.
  • Your Internet may be very slow or unstable. Try maybe Speedify.com and DO NOT use Wi-Fi.
  • Make sure your CPU is not running near 100%. An overloaded computer or network will lag.
  • Lower the resolution of OBS Ninja; select "Smooth and Cool" or 640x360 during camera selection.

Regardless, putting your own version of the HTML server up will not make it any faster.

To debug what the issue is, determine if it is faster when going from Chrome tab to Chrome tab on the same computer. If not, then it is nothing to do with servers.

If you are using a Mac with StreamLabs, you might be better off using the Electron Capture app instead.

Autoplay doesn't work in Chrome or Vmix v77

original issue thread: GitHub: Issue 316

Since 2017, Browsers have required users "interact" with a website in some way before videos will be allowed to auto-play. You can modify Chrome to allow for auto-play, but it's not super easy to do.

In OBS and the Electron Capture app, auto-play is allowed.

VMix v77 does not support auto-play, which must be an oversight on their behalf... right?? haha. A complaint has been filed regardless; voice your own request for the feature here: https://forums.vmix.com/posts/t22181-CEF-V77-browser-setting

How do I control bitrate/quality?

The bitrate controls are accessible via a URL parameter, along with width/height. Something like https://OBS.Ninja/?view=yyyyy&bitrate=10000 will let the viewer request different bitrates. The value is in kilobits per second and the default bitrate is 2500.

The viewer sets the bitrates generally, although you can set maximum allowed bitrates as the publisher of a stream. See the advanced settings in the wiki for more help here.

Bitrate controls work best in Chromium-based browsers. Firefox and Safari have limited support.

You can improve audio quality in the same way, by increasing the &audiobitrate, but you can get better results by just disabling noise and echo cancellation instead.

How do I set up a persistent stream that can be disconnected and reconnected, without generating a new URL?

  • If you connect with the "?push=xxxx" URL parameter set, you essentially are telling the system what you want the 'view=' ID to be.
  • As long as it is not already in use, you can publish to that 'view=' ID. If the connection fails and does not reconnect automatically, just refresh the page and it will try to connect again.
  • A 'push=' ID can be up to around 30-characters in length, so it gives you a way to label the stream for easier reference in OBS later.
  • Also there is a hack to create a reusable custom URL. If you open the the Generate Link box and then click on the Invite Link (just above the QR) to open it, you will get a link in the address bar that looks something like this: https://OBS.Ninja/?push=fH6iAk2, you can then manually change the code to something more memorable for you needs, like https://OBS.Ninja/?push=davesOBScamear. Then you can use the custom link to add a camera or screenshare.
  • The best part of this is that you can put this custom link in your OBS or OBS Streamlab (the 'view=' version, aka https://OBS.Ninja/?view=davesOBScamear and reuse it as many times as you like, providing no one else creates the same link while you are not using it. This is very nice for setting up templates in OBS.

There are black borders around the video in OBS.

original issue thread: Reddit: Advice on adding to OBS

If a black border appears around the video, check that the custom CSS settings in the browser source has not been modified from the default setting:

body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; overflow: hidden; }

If you changed the default CSS settings, then you'll need to change them back to get rid of any background.

Also, ideally the width/height in OBS Browser source should be the same aspect ratio as the video. 1280x720 (not 800x600) This will fit the window to the video.

Platform Specific Issues

Android

There is a mobile app for Android, but it is fairly simple; it is simply used for one-way publishing. https://discord.com/channels/698324796546482177/701232125831151697/809694808251433010

For most users, using Chrome on Android is the recommended way of connecting.

Not all cameras may appear as options when using a mobile device; this comes down to the manufacturer of the phone really.

If you cannot select your fish-eye camera, try instead buying a fisheye lens adapter from Amazon for a couple dollars; it will offer better performance probably anyways.

Screen sharing on mobile devices is not support via the Browser, although Android devices can screen sharing using the native Android app (linked previously). The screen sharing function may not include audio, or at least it might be unstable, and this will hopefully be addressed over time with additional development of the mobile app.

Android devices are not powerhouses; disabling video sharing for mobile users in group rooms if there are problems. More than around 7 guests in a room will probably require the Android users add &roombitrate=0 to their URL invite links, to disable their video sharing to other group members.

If using Android 11 and the camera selection page in OBS.Ninja freezes, push the browser to the background and then open it to the foreground again. This will unfreeze the window. This is a bug in Android 11; not OBS.Ninja.

USB audio devices should work with Android devices, but it will depend on numerous factors. In most cases, the 3.5mm headset port on some Android phones will be the most reliable way to attach an external headset or microphone.

On-screen overlay apps may cause some Android devices to get errors when trying to select their camera via the browser. Disable any apps on your device that may be causing an overlay on the screen or has the power to do so. Try the native Android app if this fails still.

Mac OS

As of January 2021, OBS for macOS now supports OBS.Ninja natively. Update to OBS v26.1.2 for macOS to obtain access.

Please not that only H264 hardware decoding is supported, so you may wish to specify &codec=h264 in your OBS view links to reduce CPU load.

For those using older versions of OBS or StreamLabs, I recommend instead using the Electron Capture app to assist: https://github.com/steveseguin/electroncapture. Follow the link for instructions and files.

How to capture audio on Mac?

[ Please note: This section is obsolete now, unless you are still using the Electron Capture app on macOS. For other users, update to OBS v26.1.2 to obtain audio capture support directly in OBS itself. (Be sure to select "Control audio via OBS" when setting up your browser source in OBS to allow for this) ]

To capture audio on macOS using the Electron Capture app, you'll need a virtual audio cable; something to loopback the audio-output back into the system as an input source. Some software options include:

With the above software, you can also share and stream your macOS desktop audio: Guide Here

If your mac is unable to handle OBS and OBS.NInja, another solution use the cloud to host OBS remotely.

Here is an example of a pay-by-the-hour cloud server you can rent for a few dollars: https://console.cloud.google.com/marketplace/details/nvidia/nvidia-gaming-windows-server-2019 It works great, but takes some time to setup for novices. You can also use Paperspace or AWS Workstations as a remote Windows options; Paperspace is easier to get going with. When picking a VM to use, you'll want a machine with a dozen or more vCPU cores, and/or a system with an Nvidia GPU. A GPU works quite well to accelerate RTMP video encoding and OBS.Ninja video decoding.

iOS

OBS.Ninja has been tested with iOS v12, v13, and v14, but iOS v10 and under is strictly not supported. Older iPad devices as a result are not compatible and likely never will be.

iOS users, please upgrade your iOS to at least v13.4 to avoid some critical bugs, although even newer is generally better.

Another issue with iOS is that you need to close ALL OLD browser tabs in iOS Safari that have made use of the camera, including old OBS.Ninja tabs. If not, the camera will not load/appear.

OBS.Ninja is only compatible with Safari on iOS. Chrome or other browsers are NOT supported by OBS.Ninja on iOS as Apple has disabled proper video streaming support for them.

iOS users will be able to view other guests in the Group Rooms, but they will not publish video to other guests. This is due to limitation of iOS devices. You can force attempted access to view a stream though by adding &forceios to your URL, but this might break someone else's stream.

iOS users can publish video to a maximum of THREE streams, and I've decided to reserve those for the Directors control room and for OBS feeds. Beyond three streams, loaded video streams will cut to black or fail altogether if forced.

iOS 13 and iOS 14 have support for VP8, a software-based video encoder, which can output more than 3 streams. However, it will perform very poorly on older iOS devices and will perform even worse if selecting a high resolution when joining a group-room. Use at your own risk.

H264 is the default video encoder on iOS, yet H264 only supports up to 720p30 on iOS. If you try to push 1080p via H264 (default) in OBS.Ninja, remote viewers will not receive a video stream. It will simply appear to have broken or not loaded. For this reason, I limit iOS devices to 720p max, unless explicitly defined otherwise.

VP8 supports 1920x1080p software-based encoding on newer iOS versions, but it will drain your battery fast and may perform poorly. You will have to manually specify &width=1920&height=1080 to enable it, when setting up the iOS device as a publisher. Setting &quality=0 will still publish at 720p.

VP9 is supported on iOS 14, if you enable it as an experimental flag in the iOS Safari advanced settings. It supports 1080p, software-based encoding, and acts a lot like VP8. It generally is finicky, with low-frame rates being common, so use at your own risk.

External microphones are supported on iOS, however iOS devices can be very finicky as to whether they work or not. A strong signal from your microphone and a proper connector (3.5mm TRRS and/or a legitimate Lightning adapter with microphone support). It should automatically work if it works; there is no drop down option for "external microphone" that you need to select in OBS.Ninja.

If full-screening a video on iOS devices, sometimes that can cause the outbound video to freeze.

Video out from an iOS device may initially be choppy; this usually smooths out over the course of seconds to a minute. If not, try to lower the resolution.

iOS does not support many features of OBS.Ninja. It lacks Zoom, Focus, &scale=50, &buffer, Stats, and many other advanced commands.

Audio quality from an iOS generally is pretty low quality. Disabling audio enhancements can sometimes help improve the clarity. It is recommended that the user be wearing headphones though to avoid any feedback issues.

iOS does not work with the volume visualizer meter; it causes clicking noises when used, so it has been disabled.

AirPods can create clicking or distortion if used as a microphone; please ensure they are fully-charged if you intend to use them in a live production. If they are on low-power, they will create audible problems.

Firefox

Firefox is not fully supported, although we try to maintain basic support for remote guest usage. It is recommend that you use:

  • Chrome on PC
  • Chrome on Android (maybe Opera if issues arise with Chrome)
  • Chrome on MacOS
  • Safari on iOS

Firefox can sometimes work when Chrome does not. With some video camera devices, Chrome may fail to load a camera device, while Firefox will work.

OBS uses Chromium (CEF v75 currently), so there should be fewest issues if you stick to using Chrome or another Chromium-based browser. Chromium v75 is quite dated, so OBS will not have support for things like video buffers (ie: &buffer=300), while if using Chrome for playback, you will. Firefox is much the same; it has support for some features, but many features that are offered in Chrome are not yet available in Firefox.

Firefox does not support desktop audio sharing when using screensharing. Chrome does support desktop and tab audio sharing.

Firefox may lack support for some features like remote zoom and detailed debug stats.

Firefox supports up to around 2.5-mbps for 720p video and up to around 6-mbps for 1080p. It offers little control over video bitrates.

Firefox is not treat Stereo audio in the same way that Chrome does. Results using Stereo and Firefox may vary.

Privacy, Policies, and Data-collection

OBS.Ninja is a peer-to-peer network, which implies it naturally will share your IP address with remote guests you are connecting with. There are ways to prevent this, such as using VPNs or enabling IP-leak protection in your browser, but this is not the default behavior. In no way does OBS.Ninja accept responsibility if your IP address is leaked. Connecting only with trusted peers, such as people you know and trust, is recommended for most cases.

OBS.Ninja does not store IP addresses or other personal information for longer than is needed to provide the service. This might include for purposes of TURN relay server error reporting or Denial of Service abuse prevention. There are no user-accounts, although you may use third-party services such as Discord, Reddit, Email, or Youtube to communicate with OBS.Ninja developers, support, and community.

OBS.Ninja uses Cloudflare as a file caching service and for site security. Cloudflare may use technical cookies and data-collection to provide reliable service and very basic analytics for OBS.Ninja. These general usage analytics may be shared with the community, such as when the service sees a large spike in usage.

Video data may at times be transferred via a hosted TURN video relay server, but this is done only to ensure service. This media data is not stored and only accessible to the intended remote peer. In most cases though, the video data is directly transferred between two peers, without the use of such servers. Any data that passes through the TURN server remains encrypted per the WebRTC standard, and some TURN servers provided offer further TLS encryption on top of it.

OBS.Ninja on its own does not use cookies, except for some opt-in cookies for storing preferences/settings. These are not used for analytics or tracking.

Deploying the OBS.Ninja code yourself will still reveal your IP address to some servers, such as STUN/TURN/WSS servers, which are needed for WebRTC to function. The OBS.Ninja hosted and operated servers do not collect personal data, although it may be possible that error or system logs will occasionally capture an IP address. These logs are generally cleared and are not stored longer than needed to ensure reliable and bug-free service.

When using the service, Stream ID values and Room names should be kept secure and treated like passwords when possible. Actual passwords are available additionally though, which are used to enable a client-side encryption mechanism that ensure two peers are unable to connect if passwords do not match. Passwords are not shared with any server and remain client-side. Passwords also are used to encrypt room names. To further protect the user, any deployment of OBS.Ninja to a private domain name will be further secured, as the domain name will be used as a salting mechanism for both room names, stream IDs, and encryption. As a result, a stream or room on one domain will not be accessible from another hosted deployment on another domain.

While nearly all data transfer is peer to peer based, the initial handshake between two peers is still handled by a server. Once the peer connection is established though, the two peers use that to negotiate transfer of personal data, media streams, chat messages, and other aspects. Backup handshake servers are hosted to ensure reliability, such as with https://backup.obs.ninja. Website and handshake servers are hosted in the USA, while other servers, such as TURN relay servers, are hosted internationally.

OBS.Ninja cannot guarantee privacy, service, or security, despite its efforts to protect you. You use the site, code, or service at your own risk and acceptance. Questions or requests related to privacy can be made out to [email protected].

Clone this wiki locally