UXR @ Microsoft
Published in

UXR @ Microsoft

Running a Workshop Remotely — Part 2: The Technology

This is part 2 of 3 in a series where I’ll share our learnings in transforming an in-person workshop into one that was run completely online.

In the previous post, we discussed our goals for running a remote workshop. One of our biggest goals was to create a fun, vibrant, and engaging virtual “classroom”, particularly we needed to present concepts to attendees, before they went off to work on their group activities.

I was inspired by the work of Twitch streamers like Jeff Fritz and the highly engaging performance of Scott Hanselman and team when they presented our first, completely online, Build conference.

I would encourage you to read Jeff’s and Scott’s writeups on how they achieved their setups.

In my situation however, as a workshop facilitator, I couldn’t use a live stream broadcasting configuration; like broadcasting to Twitch, YouTube, Mixer, or even Microsoft Teams Live Events. Largely because we needed the ability to use the chat and hand raise features — and leverage the familiarity our employees had of traditional Microsoft Teams meetings.

Also, we wanted to schedule traditional Microsoft Teams meetings for all attendees, for each day of the workshop. This ensured that all attendees would know where to find us (in the General channel of our workshop’s Microsoft Teams space), before we split up to complete group activities.

A meeting scheduled in a Microsoft Teams General channel
A meeting posted in the General channel for each day of the workshop.

Even though it was a traditional Microsoft Teams meeting, I still wanted our classroom sessions to have a “broadcast vibe”. I wanted music while attendees were waiting to get started, I wanted sound effects to punctuate points or land jokes, and I wanted the ability to play funny video clips on command.

With the configuration detailed below, I was able to achieve that and I really do believe it offered a great deal energy and polish to our remote workshop.

So, let’s dig into it.

What You’ll Need

Camera: I used a Microsoft LifeCam Studio for Business, but you can use any webcam. Just remember, your video quality is important. If attendees can’t see you, they’ll lose interest in what you have to say.

Ring Light (optional): I don’t know about your office setup, but I have a lot of natural light coming from my window. This is awesome, but it also casts a lot of shadows across my face. I bought a 12" LED Ring Light to provide directional light on my face. Bottomline, lighting is also crucial. Again, if attendees can’t see you, then they’ll lose interest in what you have to say.

NOTE: There’s not a straightforward way to mount this light to your workstation, so I used a monopod and some Velcro ties to attach it to my monitor arm. Not the prettiest of solutions, but it worked great!

Photograph of a ring light attached to a monitor arm using a monopod and Velcro ties
Ring light, attached to a monopod, and affixed to the arm, just behind my monitor

Headset/Microphone: I use a Hypercloud Cloud X Gaming Headset. You can use any other headset if you’d like, but microphone quality is key. No one wants to listen to a static-ky or garbled mic all day. And please, please, for your attendee’s sake, don’t use your onboard laptop mic. Invest in a nice headset or microphone. It makes a dramatic difference. You can certainly invest in a broadcast microphone — similar to what live broadcasters or podcasters use, but then you may have to introduce a hardware mixer (if the microphone is not USB-based). These microphones are not a bad option and it’s a configuration I’m quite familiar with; having podcasted for years. But here’s the thing, when you’re running a workshop, you don’t want a microphone in front of your face. It gets in the way and there’s just too much you need to pay attention to on screen. For those reasons, I chose the headset for this context.

OBS Studio: The open-source gold standard for broadcasting, OBS Studio allows you to have complete control over the video feed you’re sending through your Microsoft Teams call. You can pre-configure “scenes” and different layout configurations and they can be brought into the call with ease.

Screenshot of OBS showing a split presentation view with a PowerPoint slide and a camera feed of the presenter in the corner
OBS helps me manage my scenes for the workshop. For example, I’m using the “Split Presentation” here scene to show my PowerPoint slide with my camera feed layered on top

NDI Tools: NDI makes tools that can be used in conjunction with OBS to help you integrate OBS into Microsoft Teams.

NDI OBS Plugin: This plugin will take the video source out of OBS and send it through a virtual webcam feed for use in Microsoft Teams.

VB-Cable: A virtual audio cable by the folks over at VB-Audio is the standard. It’s free (although you should donate) and it’s the easiest way to get additional audio sources into your Microsoft Teams calls, without having to buy expensive hardware.

VoiceMeeter Banana: a completely free, software-based, audio mixer also made by VB-Audio. Seriously though, you should give them a donation. This application enables you to route audio to wherever you need.

Multiple displays: At minimum, you’ll need two displays, a primary monitor, and a secondary monitor (I eventually used three, which I’ll cover at the end of the post). The additional monitors don’t have to be high quality; they just need to support 1920x1080 resolution at minimum.

Windows 10: I’d recommend upgrading to the latest version of Windows 10 to ensure you can take advantage of some of the system level audio settings we’ll be using.

Installing and Configuring Your Audio

This is, by far, the hardest and most frustrating part of the configuration — so take it slow and read these steps carefully.

Step 1: Installing the Audio Tools

  1. Install VB-Audio Virtual Audio Cable Device (when you’ve downloaded and unzipped the executable, make sure to right-click on it and select Run as Administrator)
Screenshot that shows right-clicking on the VBCABLE_Setup executable and selecting “Run as Adminstrator” from the menu
Make sure you install VBCABLE_Setup by right-clicking and selecting “Run as Administrator”

2. After the installation completes, reboot your computer

3. Install VoiceMeeter Banana Audio Mixer

4. After the installation completes, <sigh> reboot your computer again

Step 2: Configuring Audio in Windows

  1. Right-click on the Windows button and select Settings from the menu
Screenshot of the Settings menu in Windows
Access the Settings menu in Windows

2. Select System > Sound

3. Under Choose your output device select VoiceMeeter Input (VB-Audio VoiceMeeter (VAIO)

4. Under Choose your input device select VoiceMeeter Output (VB-Audio VoiceMeeter AUX VAIO)

Screenshot of sound settings in Windows
Sound settings in Windows

Step 3: Configuring an Additional Audio Source

If you want to have audio from your browser, PowerPoint, favorite music application, or any other application, you’ll need to route that audio source through your virtual audio cable.

  1. Under the Advanced sound options, select App volume and device preferences
  2. Launch the applications you would like to send audio from. In this example, I want to be able to send music from iTunes and audio from videos I plan to present from PowerPoint. When I launch both of those applications, they now show up under the App menu in the dialog window.
  3. For both iTunes and PowerPoint, I’ll set their Output to CABLE-A Input (VB-Audio Cable A)
Screenshot of App volume and devices preferences dialog in Windows
App volume and device preferences dialog in Windows

Note: I’ve also set the output volume to 10 for iTunes. This is to ensure the music that gets played during the Microsoft Teams call isn’t too loud for attendees and that they can comfortably talk over it.

Step 4: Configuring the Audio Mixer

Now that we’ve set up all our virtual audio devices in Windows, we need to configure how sound gets routed to our headset, speakers, and Microsoft Teams. To do that, we’ll use VoiceMeeter Banana.

We’ll start by labeling all our inputs and outputs. This will make it easier for us to track all our audio routes.

  1. Launch VoiceMeeter Banana
  2. Right-click Hardware Input 1 and enter Microphone
  3. Right-click Hardware Input 2 and enter Select PC Audio
Screenshot of VoiceMeeter Banana showing how to rename Hardware Input 2 to Select PC Audio
Naming our hardware inputs will make it easier to keep track of them

4. Right-click the space above Voicemeeter VAIO and enter V Playback

5. Right-click the space above Voicemeeter AUX and enter V Recording

Screenshot that shows us labeling the virtual outputs
Labeling our virtual outputs in VoiceMeeter

NOTE: For your understanding, Voicemeeter VAIO represents your Windows playback device. This interface represents all the audio that is produced by your computer. Voicemeeter AUX represents your Windows recording device, or anything that comes through your microphone or headset. These interfaces are mapped to B1 and B2 respectively in VoiceMeeter. For me, when I finally understood this, it made troubleshooting issues much easier.

Now we’ll assign devices to our input and output channels

4. Left-click on Microphone and select your headset or microphone device. In my case, I selected the Hyper X Headset Microphone (WDM stands for Windows Device Manager. There are other formats you can choose like MME, but they all sound the same in my opinion. I’d just stick with WDM.)

Screenshot of VoiceMeeter Banana showing how to select the headset as the device for the Microphone input
Selecting your headset for the Microphone channel input

5. Left-click Select PC Audio and select WDM: CABLE-A Output (VB-Audio A). This channel will represent any application that you’re sending audio over the virtual audio cable. In this case, this channel would represent my iTunes and PowerPoint audio.

In VoiceMeeter A1, A2, and A3 represent your hardware output channels. These are the devices on your computer that you will hear sound out of.

6. Select A1 and choose your headset earphones.

7. Select A2 and choose your desktop speakers (This is optional, but it’s sometimes nice to hear audio out of your headphones and your speakers at the same time).

Screenshot of VoiceMeeter Banana showing the selection of desktop speakers for the A2 hardware out interface
Setting A2 to my desktop speakers so I can hear audio from my headphones and my speakers

Now that we have all our interfaces labeled and selected, we’ll now begin routing our audio to the appropriate channels.

  1. For the Microphone channel, select B2. This will send the audio from your microphone, to the V Recording channel. This is the same channel that we’ll set Microsoft Teams to use to capture your microphone. If you want to hear what your voice sounds like in your headset or your speakers, select A1 and A2 respectively. You will hear a slight delay depending on the performance of your PC. This delay messes me up when I’m talking so I prefer it off, but you may find that you like it.
  2. For the Select PC Audio channel, select A1, A2, and B2. This will route any audio coming from select applications over the virtual audio cable (in my case, PowerPoint and iTunes) to the headphones (A1), the speakers (A2), and Microsoft Teams (B2 — through the V Recording interface).
  3. For both the V Playback and V Recording channels, select channels A1 and A2
  4. Finally, the cassette tape represents audio files that we can play, like sound effects. Check out the section below titled “Optional: Add Sound Effects” below to learn more, but for now, make sure that A1, A2, and B2 are selected. This will ensure that any sound effects that get played will be heard through the headset, the speakers, and the Microsoft Teams call.

Here’s a screenshot with the final configuration:

Screenshot displaying the complete configuration of VoiceMeter Banana
Complete configuration of VoiceMeeter Banana

Installing and Configuring OBS

The first thing we want to do is install and configure OBS. If you don’t do this step first, you’ll encounter an issue with setting up your correct resolution for your Microsoft Teams call.

Step 1: Install and Configure OBS

  1. Install OBS
  2. Launch OBS and go to File > Settings
  3. Select Audio
  4. Ensure that all audio devices are disabled.
  5. Under Advanced, select the dropdown next to Monitoring Device, and select CABLE-A Input (VB-Audio Cable A). This will send any audio from media files in OBS, through the virtual audio cable, to VoiceMeeter Banana and into our Select PC Audio channel. (If you’re trying to play media files through OBS and send them to Microsoft Teams, be sure to look at Step 4: Set up Additional Scenes in OBS > Video File below.)
Screenshot of OBS Audio settings
OBS audio settings
  1. Select Video
  2. Set Base (Canvas) Resolution and Output (Scaled Resolution) to 1920x1080
Screenshot of the Settings screen in OBS
Video settings in OBS. NOTE: These options will become disabled if you enable the OBS NDI Plugin

Step 2: Install and Configure NDI Tools and OBS NDI Plugin

  1. Close OBS if you have it running
  2. Install NDI Tools (all you need to install is the NDI Virtual Input and the NDI|HX Driver)
  3. Install OBS NDI Plugin
  4. Launch OBS again and go to Tools > NDI Output Settings
  5. Make sure both Main Output and Preview Output are checked
Screenshot of the NDI OBS plugin output settings dialog in OBS
NDI Output settings plugin configuration in OBS

6. Launch NDI Virtual Input, it will load in the system tray. Right-click on the system tray icon. In the menu, select your PC name and select OBS.

NDI Virtual input system tray icon and menu
NDI Virtual Input system tray icon

Step 3: Set up a Split Presentation Scene in OBS

Using OBS, you can set up all sorts of scenes for presenting in Microsoft Teams. The split presentation view turned out to be one of the most effective for us, so I’ll show you how to configure that one first. The split presentation view uses a signal from your secondary monitor and lays your webcam signal over the top (You can see what it looks like by scrolling up to the third picture in this blog post).

  1. In OBS, under the Scenes pane, select the “+” icon to add a new scene
  2. Enter Split Presentation as the name for your scene and select OK
  3. In the Sources pane, click the “+” icon to add a source for this scene
  4. In the menu, select Display Capture
  5. In the Create/Select Source dialog enter Screen 2 as the name of your display source and select OK.

NOTE: If you want to create additional scenes using this source, next time choose “Add Existing” and select the display from the list.

6. In the Properties for Screen 2 dialog, select your second display. You can choose the Capture Cursor option if you want your attendees to be able to follow your mouse cursor on the second screen.

Screenshot of the properties window from OBS for Screen 2
Properties window in OBS for Screen 2

NOTE: I would recommend setting your second monitor to a resolution of 1920x1080 with a scale of 150%. This will make text large and readable through Microsoft Teams. You can do this through Windows by using the system display settings.

Screenshot of the Windows display settings dialog showing scale and resolution settings
Scale and resolution settings in Windows display settings dialog

7. Under the Sources pane, select the “+” icon again to add another source.

8. Select Video Capture Device from the menu.

9. In the Create/Select Source dialog enter Webcam as the name of your video capture source and select OK.

NOTE (Again): If you want to create additional scenes using this source, choose “Add Existing” and select it from the list, next time.

10. Now that you have both sources active in your preview, resize and move them to your desired layout.

Animated .gif showing how to resize and move sources in OBS
Resizing and moving sources in OBS

Step 4: Set up Additional Scenes in OBS

The advantage of OBS is that you can quickly switch between different scenes in your Microsoft Teams meeting call. Using the exact same steps above, let’s set up a few more scenes, so you have a few to choose from on your call.

Full Presentation: Create a new scene named Full Presentation. Add a Display Capture source and choose Screen 2 from the Add Existing menu. Resize the display capture source in your preview window until it fits the entire screen. This will give you a scene to display the full PowerPoint presentation from your second screen.

Full Camera: Create a new scene named Full Camera. Add a Video Capture Device source and choose Webcam from the Add Existing menu. Resize the video capture device source in your preview window until it fits the entire screen. This will give you a fullscreen view of your webcam.

Video File: Create a new scene named <Name of Video>. Add a Media Source under Sources and browse to the local video file on your computer to select it. Resize and place the video file how you want it in the preview pane.

You’ll also want to select the gear icon under Audio Mixer, to select the audio properties of the media file. Select Advanced Audio Properties from the menu. Finally, under Audio Monitoring select Monitor and Output. This will ensure that audio from your video file goes through the VoiceMeeter Banana audio mixer (and ultimately to your Microsoft Teams call).

Avanced audio properties in OBS
Advanced audio properties in OBS

You’re all set up with your video configuration. You should now have four scenes in OBS: Split Presentation, Full Presentation, Full Camera, and Video File. There are many other options in OBS, like changing the effect of transitions between scenes or even mapping your scenes to hotkeys so you can quickly navigate between them. It’s a really cool application that can give your Microsoft Teams calls a professional broadcast quality.

Configuring Microsoft Teams

We now have our audio and video set up, so now we need to go into Microsoft Teams and configure our inputs to take advantage of OBS and VoiceMeeter Banana.

  1. In Microsoft Teams, click on your profile picture in the upper-right corner and select Settings.
  2. Under the Settings screen, select Devices.
  3. Under Audio Devices select the dropdown under Speaker and choose VoiceMeeter Input (VB-Audio VoiceMeeter VAIO)
  4. Select the dropdown under Microphone and select VoiceMeeter Aux Output (VB-Audio VoiceMeeter AUX VAIO)
  5. Under Camera select the dropdown and choose NewTek NDI Video (this represents the video coming from OBS). If your preview window is showing the video feed backwards, don’t worry, this is normal.
Screenshot showing the device options in the settings dialog for Microsoft Teams
Device options in the settings dialog for Microsoft Teams

NOTE: This configuration simulates a virtual webcam. Essentially, all video from OBS is being sent instead of your webcam video. Attendees on your Microsoft Teams call will need to right-click on your webcam feed and select “Pin” in order to ensure that your webcam (or in this case, your OBS feed) remains the featured camera on the call.

Attendees will need to right-click your webcam feed on your Microsoft Teams call and select “Pin” to make it the featured webcam feed and fill their screen.

6. Select Make a test call and have Microsoft Teams walk you through the process to test your headphones and microphone. Also, try playing audio from iTunes to make sure your virtual audio cable is being picked up by Microsoft Teams.

Optional: Add Sound Effects

Hopefully, by now, you have your complete configuration working and feel confident in understanding how it all works. You may decide you want to add additional fun, like sound effects, to your Microsoft Teams call.

The fine folks at VB-Audio have you covered here as well (did I mention you should throw a donation their way? I have no idea who they are, but you really should).

When you installed VoiceMeeter Banana, you also got a utility called Macro Buttons. This is an app that simulates popular streaming devices like the Elgato Stream Deck. It’s a series of programmatic buttons that keep sound effects at your fingertips. The key to landing a great sound effect on a live call is timing. With Macro Buttons, this makes it a lot easier.

Screenshot of Macro Buttons by VB-Audio
Macro Buttons by VB-Audio
  1. Launch Macro Buttons
  2. Resize the window to accommodate the number of buttons you’d like to use.
  3. Right-click on an available button. The Button Configuration… dialog will appear
  4. Under Button Name, name your button
  5. Under Request for Button ON / Trigger IN enter the following code:
recorder.load="File path of your .wav file";

6. Under Request for Button OFF / Trigger OUT enter the following code:


What this button configuration will do is that, when you press the button down, the sound file will play for as long as you have the button pressed down (or the file ends). If you lift up on the button, at any time, the sound file will immediately stop playing.

You may also notice that these buttons directly interact with VoiceMeeter Banana. If you look at the cassette tape, you’ll see that your audio file has been loaded into the mixer, via the recorder object.


Optional: Managing All These Windows!

You may be thinking to yourself, “How am I going to manage all these windows while running my workshop? I need to run Microsoft Teams, PowerPoint, iTunes, OBS, VoiceMeeter Banana, and even Macro Buttons. There’s just too many screens!”

Microsoft produces a set of freeware system utilities called PowerToys. These are extremely handy tools for power users of Windows. One utility included in this set is called FancyZones and it’s the perfect utility for managing application windows.

  1. Install Microsoft PowerToys
  2. Launch PowerToys (it will load silently in the system tray)
  3. Press Win+` on your keyboard to launch the FancyZones layout UI
  4. Here you can play around creating custom zones for whatever configuration you want. You can even save them for later use. Just create or select a pre-made template and select Apply.
Screenshot of the layout UI for FancyZones
Layout UI for FancyZones

5. Once the zones have been enabled, simply hold the left Shift button down on your keyboard, select a window, and drag it to an available zone. The window will automatically snap to that zone and resize itself.

An animated .gif that shows dragging windows into zones using FancyZones
Dragging windows into zones using FancyZones

It’s a super quick way to organize all your open windows! Here’s what my complete setup looked like on my primary monitor while I ran the workshop:

Screenshot showing Travis’s window layout while he was running the workshop
Screenshot of my window layout while running the workshop

A Workaround: If You’re Running into Video Resolution Problems

If you’ve reached this part of the blog post, congratulations, you win a whole heaping helping of…Knowledge.

I do, however, want to offer one last lesson we learned regarding video over a Microsoft Teams call.

You may be wondering why we opted to send our OBS video through a virtual webcam. You may also be wondering why we don’t just share our screen in Microsoft Teams and enable the sharing of our system audio.

It turns out that while both the webcam channel and the screen sharing channel support up to 1080p resolution in Microsoft Teams, the framerate is much smoother on the webcam channel.

In fact, as of the time of this blog post, Microsoft Teams supports 30fps for the webcam channel and 15fps for the screen sharing channel.

So, what does that all mean? If you want to share your webcam or play video clips in OBS, by using the screen sharing channel in Microsoft Teams, it’s going to look like you’re calling from the International Space Station. Your video will appear laggy and audio may not sync up. That’s because your attendees will be watching all that media at 15 fps (frames per second).

The webcam channel doesn’t have that problem as 30fps is much, much smoother in comparison.

However, during our workshop, we found that the webcam channel wasn’t as stable. During our Microsoft Teams call, attendees reported that my OBS feed was blurry on their end. It turns out that the webcam channel will degrade in quality in order to keep the Teams call going. This appears to be even more pronounced the more people you get into a call. At over thirty attendees on the call, my virtual webcam feed started to get really bogged down.

A screenshot showing a blurry slide, which demonstrates what it looks like when the virtual camera gets bogged down
That’s not your screen, that’s what it looks like in Microsoft Teams, for attendees, when the virtual camera started to get bogged down.

Super frustrating. I know.

I was in the middle of the workshop when this started happening and I need a fix, like fast. So, I ended up bringing a third monitor into my setup.

In OBS, there’s a feature to present whatever is in your OBS preview to another screen.

  1. Right-click anywhere in the OBS Preview surface and select Fullscreen Projector (Preview) in the menu.
  2. Select the third monitor as your output.
A screenshot of the Fullscreen Projector option in OBS
Fullscreen Projector option in OBS

Effectively, the Fullscreen Project takes everything that you’re presenting in OBS and presents it on your third monitor, in a window called “Fullscreen Projector”.

Now you can share your screen in Microsoft Teams, by selecting the Fullscreen Projector window from the share tray.

Screenshot of the Fullscreen Projector window in the share tray in Microsoft Teams
The Fullscreen Projector window in the share tray in Microsoft Teams

If you want, you can also turn off your webcam feed (you don’t need it because you’re sharing your webcam through your OBS scenes in the Fullscreen Projector).

Running the remainder of the workshop this way meant we had to compromise and run all video at 15fps, but it turned out to not be that much of a factor. In fact, whenever I used the Split Presentation scene in OBS, my webcam feed was small enough that the lower framerate was mostly unnoticeable.

We also benefitted from attendees not having to constantly “Pin” my webcam feed and the text on our slides was much crisper and more readable.

As with all things like this, your mileage may vary, but I figured this was worth pointing out in the event you run into similar issues.

So, that concludes the technology part of this blog series. Next, we’ll talk about our overall learnings and outcome of our remote workshop in Running a Workshop Remotely — Part 3: The Learning.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store