GithubHelp home page GithubHelp logo

steveseguin / vdo.ninja Goto Github PK

View Code? Open in Web Editor NEW
2.6K 70.0 656.0 339.09 MB

VDO.Ninja is a powerful tool that lets you bring remote video feeds into OBS or other studio software via WebRTC.

Home Page: https://vdo.ninja

License: Other

HTML 33.48% JavaScript 58.45% CSS 8.07%
vdo ninja vdoninja obsninja obs vdo-ninja vmix studio live video

vdo.ninja's Introduction

⚠ Notice! We've rebranded from OBS.Ninja to VDO.Ninja - all else is staying the same ✨

What is VDO NINJA

VDO.Ninja uses peer-to-peer technology to bring remote cameras into OBS or other studio software.

In most cases, all video data is transferred directly from peer to peer, without needing to go through any video server. This results in high-quality video with super low latency. In a small number of cases, video data may go through an encrypted TURN server, which is used to facilitate peer connections when otherwise not possible.

VDO.Ninja is designed to allow content creators to produce real-time live shows using remote media streams. It can also turn smartphones into wireless webcams, with additional Virtualcam software.

VDO.Ninja is freely available to use as a managed service over at https://vdo.ninja. There's also native app versions available on the App and Play stores, however these native apps are quite simple in comparison to the web-version.

For live support, please join our discord at https://discord.vdo.ninja

Please see the sub-reddit added info: https://reddit.com/r/vdoninja

Also check out the user documentation at: https://docs.vdo.ninja

How to use

A video demo and playlist of the basic usage of VDO.Ninja on YouTube can be found here: https://www.youtube.com/watch?v=QaA_6aOP9z8&list=PLWodc2tCfAH1l_LDvEyxEqFf42hOBKqQM&index=1.

And Here is another video series touching on some more advanced settings: https://www.youtube.com/watch?v=mQ1Jdhf5aYg&list=PL8VJWj2-XLFpFu3G35Hdm1nKZ2xn9_0_8

Check the subreddit for added use cases, advanced features, and support. Advanced features includes high-quality audio modes, custom video resolutions, and more.

What's in this repo

This repo contains the web client software for VDO.Ninja, along with many sample apps that leverage its IFRAME API. A sample config file and instructions for setting up an optional TURN video relay server is also provided here. The user documentation for VDO.Ninja itself is found at docs.vdo.ninja.

How to Deploy this Repo

VDO.Ninja is available as a free-to-use hosted service at https://vdo.ninja, so deploying is optional. If you do wish to self-deploy the service however, details are provided below.

Hosting a private/personal deployment can be as simple as hosting the files in this repository on a HTTPS-enabled webserver. For a very simple method on how to do this, there's a video guide here: https://www.youtube.com/watch?v=uYLKkX2_flY

For more advanced users, you can see the install.md file for alternative hosting options and more details on deploying additional system components. Limited technical support is provided for self-deployments, mainly due to how time-consuming such requests are, but the details to fully-deploy all required system components are provided in the install.md file.

If self-hosting, you might also wish to host your own video relay TURN server. Directions on how to deploy a TURN server are listed in the turnserver.md file. Only about ~ 5% of remote guests usually will need a TURN server, often those connected via 4G LTE or those behind a strict firewall, but most other users don't need one. While VDO.Ninja does host some pubiic TURN servers, they are quite expensive to operate, so please try to avoid abusing if possible. If you are deploying your own version of VDO.Ninja, I'd ask you to use your own TURN servers if you are capable of doing so; it's understandable if you aren't able to though.

For users wishing to host VDO.Ninja offline (where no Internet is available), there's a respository with everything needed to deploy locally and offline here: https://github.com/steveseguin/offline_deployment. The offline version includes a Docker option, and there are some community-created Dockers available for online hosting. I may eventually offer an official Docker option designed for online users with heavier requirements, but I lack time and support to maintain such a project currently.

Develop vs Release versions

The develop branch of this repo is a bit like the preview or nightly version of VDO.Ninja. It's intended to be functional, but it may not be that well tested, or there could be incomplete features. The develop version aligns closely with what is normally on vdo.ninja/alpha/, which is well suited for those wishing to submit code changes or to gain access to experimental new features. You can access a hosted version of the GitHub develop branch on Github pages here as well: https://steveseguin.github.io/vdo.ninja/

Release versions of VDO.Ninja have their own branches though. These latest release branch will be updated to fix bugs or critical issues as needed, but are otherwise unchanged. https://github.com/steveseguin/vdo.ninja/branches

Due to the nature of live video production, where unexpected changes to the app are not welcomed usually, I don't update https://vdo.ninja/ all that often. As well, constant updates to the primary hosted app makes supporting users challenging, as its hard to tell if an issue is with the code or with the user. For this reason, VDO.Ninja does infrequent updates to the primary hosted production version. Users wanting newer features, or who have greater risk tolerance, should use alpha version at https://vdo.ninja/alpha/

Server side / API software

Since VDO.Ninja uses peer-2-peer technology, video connections are made directly between viewer and publisher in 95% of cases. Hosting a TURN server yourself may help improve performance, but less than 1% of users will see an improvement to video quality by using one. They also will not help lower bandwidth usage or CPU usage, so generally you wish to avoid using them if possible.

Details on how to deploy a TURN server are provided; see: turnserver.md. For those capable of hosting their own TURN server, that would be appreciated if possible, as TURN servers are the largest cost incurred by VDO.Ninja at present. (other than time, of course)

Other than TURN servers, VDO.Ninja also uses public STUN servers and a hosted handshake server. These are used to facilitate the initial setup of peer connections and are generally not required after a peer connection is established. These servers are free to access and use, even for private deployments. As of Version 17.3 of VDO.Ninja, you can host your own handshake server or use a third-party managed one (such as piesocket.com); please see details here: https://github.com/steveseguin/websocket_server

A design goal of VDO.Ninja is to be serverless and we are near 99% of the way there. This design objective ensures VDO.Ninja can be offered for free, along with providing increased levels of security and privacy.

Issues? problems? Not working?

Join me and the community on Discord for support and more: https://discord.vdo.ninja. You can email me at [email protected] for more urgent support or with other other inquiries if required.

The sub-Reddit is available at, https://reddit.com/r/vdoninja. I will often offer a single-message response to support questions posted there, but for deeper discussion, join the Discord.

Also check out the FAQ for common answers: https://docs.vdo.ninja or view recent product updates at https://updates.vdo.ninja

I maintain a Youtube playlist with VDO.Ninja related content I create at https://www.youtube.com/watch?v=vLpRzMjUDaE&list=PLWodc2tCfAH1WHjl4WAOOoRSscJ8CHACe, however Youtube is full of community-created guides that are worth checking out.

Related Projects

VDO.Ninja's Electron Capture:

A better way to perform "Window Capturing" on desktop if OBS Browser Sources fails you. A downloadable tool designed to enhance VDO.Ninja, but has been expanded to have additional functionality for content creators in general https://github.com/steveseguin/electroncapture

Social Stream Ninja

A free Chrome extension (also a Standalone app version is available now) that lets you stream and feature chat comments from Youtube, Twitch, Facebook, and more. Featured comments will appear directly in OBS or VMix as an overlay, or as a stream list of comments. It also includes a dock for more advanced function, such as text-to-speech, sentiment analysis, and saving to disk. No chroma-keying needed and the styling is pretty easy to customize without needing to modify the Chrome extension itself. http://socialstream.ninja

Rasbperry Ninja

Use a Linux system, Raspberry Pi, Nvidia Jetson, Mac, and even Windows PC (WSL) to publis or view WebRTC video using Gstreamer and Python; no browser needed . This project can use the system's local hardware encoder to enable high resolution video and even accelerated AV1 encoding. Support for USB, CSI, and HDMI video sources is available, along with options to pass-thru sources without transcoding. OpenCV-friendly, for low-latency computer vision and machine learning applications. http://raspberry.ninja

CAPTION.Ninja

A free AI-based closed-captioning tool to add speech-to-text overlays to OBS Studio. It's browser-based with an easy OBS or VMix integration. Developed by Steve as well! https://caption.ninja

Privacy

I try to avoid data collection whenever possible and video streams are generally designed to be private, but use at your own risk. It is best to not share links created with VDO.Ninja with those you do not trust. I've provided instructions on how to deploy a TURN server if IP-address privacy is an issue for you. See: turnserver.md

https://vdo.ninja may unavoidably use cookies that are exempt from EU laws of requiring notice of their use; they are exempt as they are required and necessary for the technical functioning of the web service. Our webserver is cached by Cloudflare and it provides denial of server protection for the users of VDO.Ninja.

Additional security features are being added weekly on request. Please ask about these options if added security and privacy are requirements for you.

Feedback

Ideas, feedback, bugs, etc -- all welcomed. I'm dumping many of my ideas as issues into Github. Feedback is typically most welcomed via Email or Discord.

Licence

VDO.Ninja is available as 'mostly' open-source; please see the LICENCE.md file for details.

Credit

Thank you to everyone who has helped support this project so far. From the moderators, volunteers helping with support, those contributing media assets, the project sponsors, those reporting issues, those offering feedback, and any code submissions.

Contributors of this repo

vdo.ninja's People

Contributors

andrew-gallimore avatar arteboy avatar chrismarquardt avatar cooliguay avatar duncanbarnes avatar filiptronicek avatar honklam avatar jcalado avatar jumper78 avatar kovalevartem avatar lguima avatar lindenkron avatar mixgyt avatar nagaitsev avatar nucleare avatar renthraysk avatar samthe13th avatar silverservert avatar sleavely avatar statik avatar steveseguin avatar theprincy avatar thifranc avatar tomasisainmdom avatar tychowerner avatar versuscam avatar vuvuvu avatar willl avatar wwj402 avatar yonghuang28 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vdo.ninja's Issues

On server/ws crashes, let the publisher to reclaim streamID

Some security issues here, but the hope is that for a short period after a stream dies the streamID will be held for the original publisher, who has a secret key.

I don't intend to have any "long" term store of streamIDs or secret keys; it's first come first-serve for now with a temporary hold only. Enough to regain a connection.

Passwords or hashes or such are possible things I could add, and I think I have an idea on how to do that, but w/ed.

I need to have "new videos" added as elements to Session.rpcs[] vs DOM

Have the updateCanvas function query that instead of media pool.
I need to have a "visible" boolean flag.

This is key to organization and clean up moving forward, but also separation of the WebRTC and UI/UX aspects of the app.

Reorganization is a slow process.......................

Random WebRTC related features

https://webrtc.github.io/samples/

  • face detection / tracking
  • Choose camera resolution
  • Audio-only getUserMedia() displaying volume
  • Record stream
  • Choose media source and audio output
  • Choose media source and audio output from Director remotely
  • Record a stream from a canvas element (perhaps with drawon top of)
  • Guiding video encoding with content hints
  • Upgrade a call and turn video on (turn video off and on instead of display -- useful for director room maybe; pause and stop video to save bandwidth? )
  • Display peer connection states
  • Do an ICE restart
  • Force NACK (manual fix stream from director view)
  • Messaging

Features

have a camera join a room by QR code only

Let a user "choose" a video stream ID (if not already in use) --- atuo connect, used the signed key, dunno.

Give a user an invite link or QR code and have them auto join a room or camera. Make it an option in OBS?

invite link to a ROOM?

Link to OBS Virtual Camera

Group Chat Mute doesn't have init state

State isn't not shared with new joiners to a room.

Volume is, but nothing in the group chat is yet.

I also would like to think about moving comms into the datachannels for the ROOM, but that may be a bad idea. Its just I don't like LIve productions relying on WSS, but rather using WSS as a fall back only when main channels go down. This woudl also increase privacy and security.

Improve support for TURN SERVERs; guide and/or more servers

I think I can do this, perhaps via a URL parameter, but if people are having problems with connections, the can just optionally get one for their own private use for pennies or even free.

I just can't affordably scale a public turn server myself.

I might be able to do a guide on setting a turn server, or offering to support them for a fee, but it's not a priority right now. My goal is to do 100% free ultimately.

Black bars in OBS

My only critique is that there are black bars that frame the video that make my overlays look less clean - but I have a workaround for that so not a huge deal.

Security issue; QR code might become visible

If live-streaming, and a perma ID user disconnects, the QR code to access the stream may become visible.

I might need to have it set so by default it does not show the QR code , and you just have to do it via an INVITE link -- or maybe

I need to have it so you need to PRESS a button to say "SHOW MY QR CODE"

Galaxy S10+ rear camera not working

Is does seem like there might be a hacky-solution to getting this fixed, but it would take some time for me to adopt the code to work.
https://stackoverflow.com/questions/59636464/how-to-select-proper-backfacing-camera-in-javascript

Can you check out : https://websdk.scandit.com/ and let me know if those demos work? If so, the problem seems to stem from the fact your phone is too advanced and it isn't really playing by the older rules. This will naturally fix itself as bug reports start pilling up, but I might need to address the issue myself if I want it working sooner. I won't have time to do that today, but maybe this coming week. The code is also open-source, so having someone else submit a small patch to fix it would also work.

Save induvidual audio/video tracks

This was a feature request and it makes sense to me.

Just a matter of figuring out how I want to arrange it.

Obviously this significantly increases the performance load if I want to go server-less. Serverless is part of my design goals, as it lets me keep things free, open-source, and data-collection free.

I may focus on just providing 'audio' recording at first, for podcasters, and consider video isolation later.

back button confusing

people hit the browser's back button and it leaves the page; need to change the browser's history instead

StreamLabs for Mac has Framerate issues

While Streamlabs OBS for MacOS works, with audio and obs Ninja, it does not do a good job with frame rates.

Really bad.
Setting the resoltion to 640x360 helps, but it still is bad.

This seems to be a bug with CEF. and until that gets fixed, OBS on MacOS will be suffering.

OBS 25 [Linux]- the stream doesn't show up using the brower source

What a great tool! Thanks for this contribution!

I'm trying to follow the instructions and put the http url in a Linux Browser source (I've tried the QtWebkit too) and it seems that the video doesn't "start". I've tried the "old" and "beta" websites, without success. I notice that when going with a regular browser to the url given by obs.ninja, I have to press the "play" button for the stream to start. Could that be the problem? We can't really "interact" with the webpage from obs (at least, it didn't gave me that possibility when I tried).

I'm on Arch Linux, 64 bits, with obs studio 25

Users are clicking "Accept" webcam settings BEFORE its ready

I need to make it harder to press the "ready" button, perhaps by activiating it only after the stream is registered. pressing the button too early causes it to fail.

On some older computers with odd cameras, this can take a few seconds even, so the user may rush to press a button and break things

Reconnect Websocket automatically

Have publishers re-seed if the WS reconnects
Let those viewers re-connect as needed.

I may want to kill the WS connections for viewers, to save on server loads if it becomes an issue, but that would make ICE negotiating challenging. So for now, I will not do this.

This is different from logging back in with an ouath identity . Reconnecting offers no security and breaks state in some cases, but I need to start somewhere

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.