This post has been republished via RSS; it originally appeared at: New blog articles in Microsoft Tech Community.
This time I won't blog about development content, but I wanted to share a solution to a problem that my team has faced in the latest days for which I wasn't able to find much documentation.
A little bit of context: as you know, conferences and events play a big role in AppConsult activities and it's one of the experiences that we value most of our job. Unfortunately, due to the COVID-19 situation, they're also one of the first things that have been shutdown, since mass gatherings are one of the most dangerous things to do during a pandemic. As such, we have decided to try a new way to reach developers and communities, by launching a new vlog (or a video podcast, as you prefer). In the next weeks we're going to live stream short episodes (20-30 minutes), hosted by our team and with various guests, to share our experience with many of the technologies we work with, either from the Windows and the Azure side: MSIX, WinUI, Azure Functions, .NET Core 3.0, React Native are just a few examples.
As such, we have started to setup an infrastructure to support this effort (based on OBS Studio and Skype), so that we could stream the episodes on Twitch, Mixer and YouTube and also record them, to make them available for anyone who can't follow them live.
However, our first test of the setup failed miserably. During the test call we started to see lot of issues related to echoes and "double audio" when the Skype call was hosting 3 or more people. This was a big blocker for us, because we were planning to have multiple hosts and guests in the same episode. After some tests and investigations, we finally found a solution. The goal of this post is to explain you how you can enable a live streaming with multiple Skype participants using OBS Studio.
Setting up the environment
When you want to have multiple remote people in the same streaming, the best combination is OBS Studio with Skype. OBS Studio is one of the most popular broadcasting applications, used by millions of streamers all around the world. I won't go through all the steps on how to setup OBS Studio. It would be out of scope for this post, I'm giving for granted that you already know the basics on how to use this streaming platform. There are tons of tutorials on Internet, including the official documentation. For the purpose of this post, it's important to know just that OBS Studio is one of the best (free) software on the market to turn your machine into a streaming studio. You can setup multiple scenes and each of them can contain different content: your webcam feed, screen sharing, videos, pictures, etc. During the streaming you can switch from one scene to another, in case you need to have different layouts based on the situation: for example, you may want to have a scene only with the camera feed; one with the camera feed and screen sharing; etc. In the end, OBS Studio can connect with the most common streaming platforms (Mixer, Twitch, YouTube, etc.) so that you can directly stream your content to a worldwide audience.
Skype doesn't need any introduction, since it's one of the most popular communication software in the market. The biggest advantage of Skype is that it supports a technology called NDI, which allows to handle every person connected to the call as a separate feed, that you can manipulate in your favorite broadcasting tool. Did you ever wonder why, despite the rise of other platforms like Zoom, Skype is still the most widely used communication software when it comes to TV productions, like talk shows? Skype is the only free application on the market which supports NDI, which allows TV engineers to take the video feed and incorporate it in the tools they use to handle the TV broadcast. Thanks to this feature, we can achieve the same goal with OBS Studio, allowing us to incorporate the video feed of the various people connected to the call into our scenes. In the image below you can see the final goal we wanted to achieve: not just streaming a Skype call, but having a more effective and good-looking render, thanks to the awesome graphic that my brother has designed.
These are the tools you need to achieve this goal:
- OBS Studio
- Skype for Desktop. You can't use the version which comes built-in with Windows 10, since it doesn't include NDI support.
- obs-ndi. This is a tool which installs the NDI runtime and the OBS plugin, which is required to add a NDI source to your scenes.
Setting up Skype
Once you have installed Skype for desktop, open it and login with your Microsoft Account. Then open the Settings (you can find them by clicking on the three dots near your profile name).
Move to the Calling section and choose Advanced:
You will find a section called Content Creators, with the option to turn on the NDI support:
That's it. Now you'll need to start a call with all the people that you want to include in your streaming. They won't need to install anything or turn on NDI support as well in Skype. It's important that just the machine which will be use for streaming runs Skype with NDI support enabled.
Setting up OBS Studio
Once the call is up & running, you can open OBS Studio. If you have installed properly the plugin (and rebooted the machine), when you click on the + sign in the Sources section you will find a new item called NDI source:
Once you have created a new source, you will see a panel to configure all the options.
The most important one is Source name, which is a dropdown that will list all the NDI sources that are detected from Skype. Each source will be prefixed with the name of your computer, followed by the (Skype) keyword. Typically, you will find the following sources:
- Skype - (Local) refers to the local video feed. If you have initiated the Skype meeting from your machine, this is the one you have to use for getting your audio and video.
- Skype - Active speaker always contains the feed of the speaker who is actively speaking. Unless you need a special configuration, you will hardly use it. The typical scenario, in fact, is to place each person included in the call in a specific area of the scene. However, it could be useful, for example, if you have a scene with a video or a screen sharing session and you want the NDI source to always display the person who is talking, since there isn't enough space to include everyone.
- Skype - live, followed by the Skype id of the user. You will see multiple sources like this, one for each person involved in the call (except yourself).
Once you have selected the source you need, press OK. A new item will be added to the scene and, if everything goes well, you should see the video feed of the selected person. Now you can drag and drop it around and place it in the area which fits best your scene. For example, in my case, the graphic created by my brother has 3 dedicated slots for the video feeds:
These are the three areas where I placed the three NDI sources.
Tip: sometimes you may see that, after an event (like one of the people in the call changing the camera or turning off or on the video feed), the size of the area in the scene changes. To avoid this behavior you can follow the tip provided by the Skype team:
- Right-click the NDI source, and then select Transform
- Select Edit Transform.
- Change the Bounding Box Type to Scale inner bounds.
Solving the echo problem
That's it! Now you should have in your scene the video and audio feed coming from each people connected to the Skype call. Since they are made available to OBS Studio as different sources, you are free to move them, resize them, rotate them, etc. It's a much more powerful approach than using screen sharing to share the content of the Skype application. Everything looks great. You're ready to start the show! You press the Start streaming button, you start the live show but... after a few seconds you start to receive lot of complains from your viewers! The reason is that they're going to hear a sort of echo or "double audio", like if the voice track is duplicated, but with a delay that makes it look like an echo.
After a bit of investigation, we found out that the reason is that Skype injects into each NDI source not just the video, but also the whole audio feed. This means that, if you have 3 people connected to the call, each of them will push to OBS studio not just their voice, but the whole audio track, including the voice of the other 2 participants. This is the cause of the echo effect: every person in the call is basically saying the same sentence two or three times but, due to the network delay, they aren't perfectly in sync.
The way to solve this is to make sure that OBS Studio outputs to the audio stream only a single NDI source. All the others can be turned off, since a single NDI source will contain the voice of all the people involved in the call. In order to do this, click on Edit in OBS Studio and choose Advanced Audio Properties. You will see a window like this:
The tool will list all the active audio sources in the scene, including your desktop audio, your microphone and each NDI source. Take a look at the Tracks column. You can use it to specify on which track you want to assign an audio source. This setting is important if you're planning to record your stream, since it will allow OBS Studio to store the various audio sources in different tracks. This way you will get more flexibility if you're planning to do some post-processing of the video. However, it's useful also in the streaming scenario. Track 1 is the one used by OBS Studio during streaming. Every audio source which is part of Track 1 will be also streamed to your viewers. As such, it's enough to uncheck the Track 1 in all the sources, except one NDI source, to solve our problem. You can see an example in the screenshot above: all the Track 1 checkboxes are turned off, except for the one related to Matteo, which is the NDI source connected to my local Skype feed.
That's it! Now your viewers will be able to enjoy your live stream with multiple Skype guests without any echo problem.
If you're planning to start a live stream and to have multiple remote guests, OBS Studio and Skype are a great couple. However, as soon as you start the streaming, you will hit some audio issues, caused by the way how Skype works. In this post you have learned how to handle this situation and how to setup OBS in the proper way. Now that your scene is setup, all the settings will be stored. Don't worry if you will see empty areas instead of the NDI sources when you will reopen the application. This is expected if the Skype call isn't active, since there won't be any live feed. However, OBS Studio has stored the information about the Skype account so, as long as you reuse always the same Microsoft Accounts, you're good to go. For this reason, if you're planning to invite guests to your live streaming, I suggest you to create a dedicated Microsoft Account and to ask to your guest to connect to the call using that one. This way, you won't have to reconfigure the scene every time you invite a different guest.
Happy streaming! We'll get back shortly with all the information to follow our new AppConsult podcast!