Blog Post

Azure Architecture Blog
4 MIN READ

Unleashing NDI’s Video Switching and Routing Power in Microsoft Azure

freddydubon's avatar
freddydubon
Icon for Microsoft rankMicrosoft
Jul 17, 2023

 

The world of media and entertainment is constantly evolving, with a growing demand for high-quality video production and streaming. In this digital era, leveraging the power of cloud computing has become essential for achieving scalability, flexibility, and cost efficiency. Microsoft Azure, a leading cloud provider, offers a wide range of services to meet these needs.

 

Leveraging Azure Cloud for simplifying for video production workflows

 

NDI (Network Device Interface) is a game-changing technology that enables real-time, high-quality video and audio transmission over IP networks in a frame-accurate manner without compromising quality. It eliminates the need for traditional video cables and hardware by leveraging existing network infrastructure.

 

This blog explores the immense potential of NDI (Network Device Interface) in conjunction with Microsoft Azure for video switching and routing, and how sources are discovered in a cloud environment.  We focus on the NDI discovery method for large NDI deployments where protocols like mDNS might not be practical.

 

NDI allows for seamless integration of multiple video sources, such as cameras and computers, enabling flexible switching and routing. This empowers content creators to easily capture, transmit, and distribute video content in real time. NDI's low-latency and high-quality transmission make it ideal for live events, virtual studios, remote collaborations, and cloud-based workflows.

 

 

 

NDI architecture / components

 

 

 

NDI Discovery Server is a key component of the NDI ecosystem. It is a software application that facilitates the automatic discovery and registration of NDI sources and receivers on a network. When NDI-enabled devices, such as cameras or computers, connect to a network, they can broadcast their presence and capabilities to the NDI Discovery Server.

 

The NDI Discovery Server maintains a central database of available NDI sources and receivers, allowing other devices or software applications to easily locate and connect to them. It provides a directory of NDI devices, along with their IP addresses, names, and metadata, making it simpler for users to identify and access the desired video sources.

 

By using the NDI Discovery Server, we can effortlessly discover and connect NDI-enabled devices across the network, eliminating the need for manual configuration or IP address management. It enhances the efficiency and ease of use in NDI-based workflows, enabling seamless collaboration, video switching, and routing within a production environment.

 

Configuring NDI for your Azure based workloads

 

We will take you through the steps to configure highly resilient NDI traffic within a virtual network (VNET) using the NDI Discovery server in Azure. 

 

Step 1.  Create a Vnet.      

  • Go to http://portal.azure.com
  • Login If you already have an account, Otherwise, create one
  • Create a new subscription
  • Create a new Azure VNET by using an ARM template or manually creating one.  Azure ARM (Azure Resource Manager) templates allow you to create and deploy an entire Azure infrastructure declaratively. 

Step 2. Install NDI Discovery Server.

            The NDI discovery server application is non-resource intensive and thus, using a General Purpose VM should be sufficient such as a Standard_B2s VM.  Which is a burstable General purpose VM.

  • Launch two Linux VMs (Ubuntu 20.x) in “availability zone” redundancy mode.  This will launch two independent VMs in two different zones.  We will use the two IP addresses as our “discovery servers” in NDI Tools configuration.
  • Once the VMs are launched ssh into them and  install the NDI Discovery server software:

 

#Download the software:

sudo wget https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v5_Linux.tar.gz

 

#extract the contents of the package:

sudo tar -xvf Install_NDI_SDK_v5_Linux.tar.gz

 

#install package and accept the license agreement:

Echo “y” |sudo ./ Install_NDI_SDK_v5_Linux.sh

 

#run service in background:

Nohup “./NDI SDK for Linux/bin/x86_64-linux-gnu/ndi-directory-service” >> /dev/null &

 

  • Configure the Network Security Group to allow all traffic for the VNET and any other VNETs that will connect to this Discovery server.

 

 

Step 3. Create two Windows instances on Azure, these instances act like NDI sender and receiver to demonstrate the video discovery and switching.

  • Launch two Windows 11 instances they can be on the same subnet or different subnets.  Use Azure General Purposes B2s or N series VMs.  N Series VMs are GPU enabled instances.
  • Configure the network security group NSG to allow traffic for the VNET classless interdomain routing CDIR block.
  • Login to both instances using valid credentials.

 

Step 4. Install necessary drivers and software on the VM’s.

  • Install OBS Studio on the instance that will be used as the receiver
  • Install OBS-NDI plugin on this instance.
  • Install NDI tools on both instances.
  • Install VLC on the VM that will be used as the sender

 

Step 5. Register the two Windows VMs with the NDI Discovery Server.

  • Login to both Windows instances with valid credentials if not already login.
  • Open NDI tools Access Manager application

 

 

  • Click on the advanced tab and select Discovery Servers under Network Mapping.  Configure IP addresses with private IP address of both NDI Discovery Servers that were created in step 2.

 

  • Save the changes.

Step 6. Test the NDI traffic.

 

            Configuring NDI on the first instance

  • Login in to the first Windows 11 VMs (the one with VLC Player) using valid credentials.  This is the Sender.
  • Configure VLC for NDI output video and audio.

 

 

Set video output to NDI

 

                       

                        Set Audio output to NDI

 

                       

 

 

                        Play a video file from VLC

                       

                       

 

 

 

 

Configuring NDI on the Second instance (Receiver)

  • Login in to the second Windows 11 VMs (the one with OBS Studio) using valid credentials.  This is the Receiver.

 

Add a new source (create new)

 

           

  • Select the VLC stream (and click ok)

 

 

  • The video playing on VLC will show up in OBS

 

 

 

 

 

 

Conclusion

 

In this post, we walked through how to use the NDI Discovery Server to configure NDI traffic within a virtual network (VNET) that facilitates communication between NDI-activated video processing software within IP network-based live video production.

 

Please remember to clean up resources or stop VM instances when not in use to stop the instance from incurring unnecessary costs when not in use.

 

NDI is a registered trademark of Vizrt Group.

Updated Jul 17, 2023
Version 1.0
  • JAFR1's avatar
    JAFR1
    Copper Contributor

    Hello!

     

    I'm in the process of setting up this method for testing...I love the concept, and I found it at a perfect time!

     

    I am quite new to the Azure space, however, and am wondering if you might be able to provide a little mentorship through my initial learning phase? I have created all of the VM servers in the instructions but they don't appear to be communicating between each other. I think my problem (and lack of knowlege/experience) is in the NSG configurations for subnets and such. 

     

    Recently (prior to finding your article) I was setting up a site to site IPsec VPN tunnel between my LAN and Azure with the hopes in mind that I would be able to ping my NDI cameras from the Azure VM and be able to use them in OBS. I got this VERY close...but I was never able to ping my LAN devices successfully. My knowledge is limited here, and maybe it isn't even possible doing it this way? Not sure...

     

    Your concept seems more sophisticated, but I ran into the same problems communicating VM to VM. 

     

    Would you possibly be willing to help me get this across the finish line?

     

    Thanks!