Applying Audio Delay

Let’s say you need to send your signal to an external mixer, where channels 1+2 are the original channels with video/audio lipsync. In addition channels 1+2 are duplicated to channels 3+4 and are send with an audio delay of 600ms. The mixer then can use channels 1+2 for regular small screens and streams, while channels 3+4 (together with video) are being used on a huge LCD screen with 600ms processing lag.

This is actually pretty fast to implement in PLAYDECK. Open the settings. First make sure your Playlist operates with 4 or more channels.

Next hop over to Audio Settings and enter the values likes this and press “Update Clips”.

The first Line “1,2,1,2” means, that you want to copy channels 1+2 to 3+4. The comma seperate the outgoing channels, while the numbers represent the input channels.

The next Line “adelay=0|0|500|500” means, that you want to use the “adelay” audio filter. The “|” sign seperates the channels, while the number is the delay in milli seconds.

Set per Clip

Both Settings can also be applied to indivual Clips, overwriting the Global Settings for this Clip. For this right-click any Clip and select:

You will find additional samples and a complete list of all options within those Clip Properties.

Set for Live Input

Audio Filter are also applied to any Live Input in the Playlist in the same way, you would do for Clips. This allows you to use PLAYDECK to pass-thru any signal and apply Audio Delay.

Set for complete Playlist

The Clip-method to apply Audio Delay has one significant disadvantage, if you work with a lot of Clips in a Playlist: If you have Audio at the End of the Clip within the Audio Delay Duration, that Audio will be cut of, when the new Clip starts playing. Luckily there is a Workaround for that, but this will utilize your 2nd Playlist.

First, we are going to tunnel Playlist 1 to Playlist 2 via NDI. This loop can also be setup via SDI.

First we move the Audio Delay from Playlist 1 to Playlist 2:

Then we enable NDI Output for Playlist 1.

And create a new Live Input for that NDI Channel.

Now add Live Input 1 to Playlist 2.

Create Video Engine Snapshot

This article will show how to create a snapshot of the Video Engine for us to analyze.

1. Download and Install

Please download this Tool called “Snapshot.exe”:

Please start the executable once to make sure, it starts without issues, before we continue to step 2.

If during startup the Tool asks for a NET installation, please install NET manually from this link. On the webpage, please select “Windows > Installers > x64”.

2. Reproduction

Not please start PLAYDECK and reproduce the issue. DO NOT CLOSE PLAYDECK.

Now start the Tool “Snapshot.exe”. On the left side, right-click the first item you see, which IS NOT “MFFactory” and select “Save Snaphot”. As file format please use the pre-selected JSON format.

Now repeat this for every Item that is following. You will now have created a Snapshot of every Item, that is not MFFactory. So in the above Sample, we have 10 files in total.

3. ZIP’ing and Sending the Snapshots

Create a new ZIP File and add all Snapshots (*.json).

Upload the ZIP to our Download Server:

After uploading click the COPY Button and send the Download Link to [email protected].

4. Clean Up

You can now safely delete the Snapshots.

Create Video Engine Logs

This article will show how to enable detailed logs for us to analyze.

1. Enable Logging

In PLAYDECK goto Advanced Settings and activate “Video Engine Logging”. PLAYDECK will now ask you to restart.

Note: You need at least PLAYDECK in version 3.8b4 to create detailed Video Engine Logs.

2. Reproduction

After restarting now please reproduce the issue. Please note your PCs Date and Time of the issue occuring. Now close PLAYDECK (or use Task Manager to terminate). Do NOT OPEN PLAYDECK again, otherwise the Logs will be lost, as they are being cleaned on every Start to reduce Upload Size.

Note: The shorter the Logs the better, as it is more easy to isolate the issue. Make sure to start PLAYDECK only to reproduce the issue and don’t let PLAYDECK run for a long time.

3. ZIP’ing and Sending the Logs

Create a new ZIP File and add the following Folders:


Note: The ProgramData Folder is hidden in Windows. You have to enter it manually into your File Explorer.

Note: To create a ZIP File in Windows, mark the above Folders with CTRL, then right-click on any marked Folder and select “Compress to ZIP File”.

Upload the ZIP to our Download Server:

After uploading click the COPY Button and send to [email protected]:

– Download Link of your ZIP file
– Date and Time of the occurance of the issue

4. Clean Up

You can now safely delete your ZIP File.

Also make sure to deactive the Setting “Video Engine Logging” in PLAYDECK, as it will slow down your PLAYDECK performance. This setting is not meant to be enabled all the time.

5. (Optional) Video Engine Snapshot

We might also ask you to send us a Video Engine Snapshot, which is described here:

Inserting SCTE-35 Marker

SCTE Marker are mainly used to insert Ads into the Video Output by signalling the Receiver (e.g. Streaming Server) at what time to insert Ads and with what Duration. This allows 3rd Party Systems to dynamically pick Ads from a Database. You can read more about SCTE in general on this website. We also support SCTE-104 and ANC, but for the sake of simplicity, we stick to SCTE-35 in this guide.

In PLAYDECK you can send SCTE Marker in 2 different ways:
– Embed in SDI Signal via compatible Output Device
– Embed in Outgoing UDP (MPEG-TS) Stream

You can attach SCTE Marker to 4 different Objects in PLAYDECK:
– Attach to Clips (any Position)
– Attach to Blocks (Start and End)
– Attach to Overlays (Show and Hide)
– Attach to Actions Buttons

In PLAYDECK we picked a different approach over other Systems: Here you write your own SCTE Marker instead of PLAYDECK sending predefined Marker. This could mean a bit of a learning curve, but in the end, it is much more flexible. The advantage is, that you will always be compatible to all receiver.

SCTE Marker Examples

Let’s look at some SCTE-35 Sample. It represents the most used form of SCTE called “Splicing”.

Note: The SCTE Format presented here works best with Nimble Streamer (see below). Depending on your Stream Server, the Format might be different.

    <Program />
      duration="{clipduration}" />

This will insert an Ad and return to your Program automatically after the given duration. The duration will be set automatically by PLAYDECK for your current running Clip. This can be exchanged with {blockduration} or a manual value. If you pick a manual value for duration, the formula is: CLIP DURATION multiplied by 90000 and rounded. The reason behind this is, that 90000 is default Timescale most SCTE Systems use. Example: The Clip is 12.4 seconds, so the SCTE duration would be 1116000.

Note: You need at least PLAYDECK in version 3.8b6 for this example.

Instead of sending a duration, you could also send 2 seperate SCTE Marker to Start/End the Ad. Those are called CUE-OUT (leaving your Program for Ad) and CUE-IN (return to your Program).

    <Program />

    <Program />

As you most likely have observed already, the only difference is “outOfNetworkIndicator” being 1 (CUE-OUT) and 0 (CUE-IN). The SCTE System itself will pair both Marker based on the “spliceEventId”.

Test SCTE Marker locally

Open PLAYDECK. You dont need to load any Clips yet. Right-Click on the “ACTION 1” Button and select SCTE.

Now click on SCTE-35 to insert the Sample (which is the same as above) and click OK.

Now let’s start a Stream and write it to a File. Go to Settings (Main Menu) and to Stream Output. Select “UDP Streaming” and insert “c:\Users\Public\Documents\stream.ts” as Stream URL (or other location of your choice). Also make sure “Embed SCTE triggers” is enabled.

Now start the Stream with the “Start stream now” Button, close Settings and tap your “COMMAND” Action Button several times to send your SCTE Sample to your running Stream Output. Now go back to the Stream Settings and end the Stream (same Button). You will now have a “stream.ts” File at the given Location, which is a MPEG Transport Stream File with your SCTE Marker embedded.

NOTE: If the Stream does not start or shows “Stream ERROR”, please goto “Settings > Workflow > GPU” and set “CPU” for both GPU options. Then restart PLAYDECK. If it works now, you need to check, if your GPU needs a driver update.

To make your SCTE Marker in the File visible, we need a 3rd party tool called “DVBinspector”. This is a small Java Application to inspect those TS Files:

This Tool requires JAVA Runtime. If it is not installed already, you can download here:

Now unzip your “” (or similar) and start “DVBinspector-1.18.0.jar”. Then Drag+Drop your TS File onto the Application. Open the Tree as follows to view your SCTE Marker.

Test SCTE Marker in Nimble Streamer

We will show a complete Setup of a Stream Server and how to convert SCTE-35 Marker from our PLAYDECK UDP Stream into HLS Manifest Tags in our Outgoing HLS Stream. We are going with the famous Nimble Stream Server for this, but you can adept this procedure to basically any other Streamer:

Install the 14-day Trial Version of Nimble to the same machine that PLAYDECK is running. This is not a necessity, but makes things simpler, as you don’t have to put up with a network setup. You will also be asked by Nimble to create an account with WMSPanel, which is a web based setup tool for Nimble, as the Nimble Streamer itself installs without User Interface.

INFO: For this SCTE Sample to work, you DONT need to have “Nimble Live Transcoder” or “Nimble Advertizer” PlugIns, if you test this on a Live Installation. They are disabled in the Trial Installation by Default.

Once you got Nimble running, there is one more configuration you need to do manually. Open the Nimble Server Configuration file here:
c:\Program Files\Nimble Streamer\conf\nimble.conf

At the bottom of this file, add the following Lines and save the file.

scte35_processing_enabled = true 
scte35_forwarding_enabled = true 
hls_ad_scte35_forwarding_enabled = true
hls_ad_marker_format = cue
hls_ad_splice_out_cont_marker_enabled = true

Important: You need to restart Nimble now by either restarting your PC or restarting the Windows Service “Nimble Streamer” manually.Important: You need to restart Nimble now by either restarting your PC or restarting the Windows Service “Nimble Streamer” manually.

Here are the lines again, but with comments for you (dont use these):

scte35_processing_enabled = true  // Enabled the SCTE module in general. Needed for all other Options
scte35_forwarding_enabled = true  // Allows passing through the SCTE-35 markers via Live Transcoder
hls_ad_scte35_forwarding_enabled = true  // Enables forwarding of SCTE-35 markers into HLS streams
hls_ad_marker_format = cue  // Sets Nimble to use CUE-OUT and CUE-IN markers
hls_ad_splice_out_cont_marker_enabled = true  // Enables automatic insertion of EXT-X-CUE-OUT-CONT

Now let’s set up your Streams in WMSPanel:
First we are going to define our incoming Stream. Goto “Nimble Streamer” in the Menu and select “MPEGTS In” and click the “Add UDP stream” Button, then add the incoming stream like this. You can use any other Port, should 5001 be in use already.

Next we are going to setup the outgoing stream format. We want to use HLS here to demonstrate the conversion of SCTE Marker from UDP to HLS. On the same page, goto “MPEGTS Out” and click the “Add outgoing stream” Button, then add like this. Make sure you select you input streeam as video and audio source.

Next we continue our setup in PLAYDECK. Got to the Stream Output Settings and change the Stream URL to “udp://”.

INFO: You can pick any preferred Video Codec. SCTE will always be send. In this case I picked H.264 to let my Nvidia GPU do the encoding, which will lower my CPU usage.

INFO: Please note, that PLAYDECK is not capable to directly stream HLS. Tho you “could” select “Apple HTTP Live Streaming” as Streaming Format and write to File e.g. “c:\Users\Public\Documents\stream.m3u8”. Then use that File to stream using any Streaming Server. But PLAYDECK is not able to write HLS SCTE Tags into the HLS Manifest file (the *.3u8 file).

Next we want PLAYDECK to automatically send SCTE, not just via a Button, but Clip related. So we insert any Clip. If you have no Clip at hand, you can download this one (MP4 / 30s / H.264):

Set the Block to LOOP BLOCK by right-clicking STOP below the Clip. Then right-click the Clip itself and select “Commands/SCTE”, add a new Command and click “SCTE-35” at the bottom, which will insert the SCTE Sample Marker.

INFO: You can also add SCTE Marker to Blocks, Overlays and Action Buttons.

Now let’s get things rolling: CUE and PLAY the Clip and start the Stream in the PLAYDECK Settings. Hop over to the WMSPanel and open from the Menu “Nimble Streamer” the option “Live Streams”. You will now see 1 running Live stream. Click on it and pick the question mark on the far right like this.

From the list of “URLs to play” select the one with the “playlist.m3u8” ending and click “Copy”. Now paste this URL into any Browser, that has an HLS Player integrated or installed. For this example we use the CHROME Browser with the follwing HSL Player Extension:

Once you posted that URL into CHROME, you will see your PLAYDECK stream playing immediatly. Now let me show you how to monitor your SCTE Marker. In Chrome press F12 to open the Developer Tools. Ontop click the “Network” Tab. You will now see several “chunks.m3u8”, which are part of you stream. Click on one of the Chunk files (also called HLS Manifest) and select “Preview” next to it. You will now see the HLS SCTE Tag. If it isnt there, click on another chunk, as we send the SCTE only on Clip Start.

That’s it! We reached our Test Goals. Upcoming are more information which might be relevant to dig into.

Additional Information

Logging in Nimble Streamer

If anything goes wrong or doesnt happen as expected, a good start is to review the Nimble Log Files. The Log can be found here on Windows:
c:\Program Files\Nimble Streamer\log

Logging is enabled by default in the Nimble Trial addition, but in case you need to activate it, here are the flags for the “nimble.conf”.

log_access = file
logging = debug

Now open the log file and scan for “SCTE”. You might see something like this, which indicates you have a typo in your SCTE Marker in PLAYDECK:

[SCTE35] unsupported splice command type=6 for [mynewapp/mynewstream]

If your SCTE Marker parsed succesful in Nimble, it will look like this:

[SCTE35] splice_insert: event_id=4157 oon=1 immediate=1 pts_adjustment=0 pts=0 actual_pts=202593600 duration=2707200 data=0xfc....

Tool: TSDuck

This is a collection of tools and plugins with a large library to manipulate MPEG transport streams. With this you would be able to insert SCTE Marker outside of PLAYDECK based on an algorithm or other complex logic.

Tool: x9k3

This tool can also convert SCTE-35 Marker in UDP Streams or MPEG-TS Files into HLS SCTE Tags. This allows you to install a streaming server, which does not have automatic SCTE-35 to HLS conversion.

Setup DVS – Dante Virtual Soundcard

DVS stands for Dante Virtual Soundcard. Once installed it simulates up to 8 Audio Devices (16 Channels) in Windows as WDM Driver. Those Channels can be transferred seperatly via LAN (Ethernet) to any compatible receiver, which is most likely a professional Hardware Audio Mixer. The advantage is, that you can send audio from both PLAYDECK Playlist to the mixer.

This is the product page:

Once you installed DVS on the PLAYDECK machine, select WDM as Audio Interface and START:

You can now select the 8 Dante Audio Devices in PLAYDECK. Each representing a Stereo Pair:

As optional step you could set the Audio Device Properties to the same Audio Format, that you are using in PLAYDECK. The Default in PLAYDECK is: 48000 Hz, 2 Ch, 32-bit. This will avoid transcoding of the audio stream and result in higher quality audio:

If you work with Multichannel Audio, you have to mix down your Channels. See this article for how to work with multichannel audio.

Troubleshooting / Dante Leader Clock

If you dry test Dante in PLAYDECK (without any actual network receiver), you will notice that the Clip is not playing. This is because PLAYDECK waits for the Dante Clock Signal to query the next video/audio frame. Without any Dante Clock in the network, the next frame will not be processed in PLAYDECK. This is a Dante Feature to ensure, that video and audio always stay sync in case of network lagging; and to syncronize all Dante enabled devices in the network.

By default the selection of the Leader Clock takes place automatically, with no need to manually assign. You might need to consult your audio mixer manual on how to active clocking. See this Video from Dante on clocking.

If you want or need to manually assign a Leader Clock; or if you are in a test environment with no audio hardware; or your audio hardware does not support clocking:

In this case you have to install Dante Via on a second Windows machine in the same network. Dante Via is able to function as Leader Clock in your network. It cant run on the same machine as PLAYDECK and DVS. Once installed, it will automatically designate itself as the Leader Clock and connect to the DVS by itself without further user intervention.

It is recommended tho, to install Dante Controller on the PLAYDECK machine to make 100% sure, that everything is working as expected. It is simply a controlling and reporting tool:

If everything is setup correctly, you will see a GREEN LIGHT in the bottom right corner, indicating that your DVS is Clock-enabled and ready to use in PLAYDECK.

Once you see this GREEN LIGHT, PLAYDECK will now play all Clips correctly.

Use USB-GPI Interface to activate Playback

We usually use a standard USB serial interface and a miniature relay.

It depends a bit on the way your video mixer outputs the tally signals for the control. Usually it is an open-collector circuit. Some devices actually short-circuit two pins of the connection socket.

From a purely technical point of view, PLAYDECK outputs a data stream via TX when GPIO remote control is activated. When this runs back into the system via RX, PLAYDECK starts playback.

So you have to switch a bridge between TX and RX with your interface.

The Devices

The image shows a “USB TTL adapter” connected to a minituare relay connected to a COM port.

Setting in PLAYDECK

After inserting the USB TTL adapter into the PC, a new COM port will become available to activate in PLAYDECK.

Internal and External Keying

PLAYDECK supports both Internal and External Keying, given that the Output card supports it too. You can also output the key or fill signal seperatly.

Internal Keying

In internal keying mode, PLAYDECK will superimpose the graphics over an incoming signal:

External Keying

In external keying mode, PLAYDECK generates both fill and key signals and the keying is made by an external keyer:

Supported Devices

Please check your device specifications to ensure whether it support keying.

The following information is for Blackmagic cards, which are the most commonly used with PLAYDECK:

External Keying with Decklink Duo 2

Here is an example for External Keying with the Decklink Duo 2.

First you would need to combine 2 SDI Outputs into one connector with the Blackmagic Desktop Video App likes this:

In the Decklink 8K Pro, it looks a bit different:

After that a new keying option “external” becomes available within PLAYDECK:

And this would be the SDI output mapping for key and fill signal:

Supported Input/Output cards

We basically support all cards of the following manufacturers, since we always include the latest drivers. But because of the vast amount of cards out there, we only tested the most common ones.

These are the devices that have been tested with PLAYDECK.


  • Corvid 24 R1
  • Corvid 44
  • Corvid 88
  • KONA LHi

Blackmagic Design

  • DeckLink 4K Extreme 12G
  • DeckLink 8K Pro
  • DeckLink Duo 2
  • DeckLink Intensity Pro 4K
  • DeckLink Mini Monitor / Mini Recorder
  • DeckLink Quad 1 / 2 / HDMI Recorder
  • DeckLink SDI 4K
  • DeckLink Studio 2 / 4K
  • Ultra Studio HD Mini / 4K Mini / 4K Extreme 3 / Monitor 3G


  • Epoch 4K Neutron
  • Epoch 4K Supernova S+
  • Epoch Neutron
  • Epoch Supernova CG


  • DELTA-3G-e 22
  • DELTA-3G-elp-d 8c
  • DELTA-3G-elp-key 11


  • DTA-2144B


  • Pro Capture Quad HDMI
  • Pro Capture Quad SDI


  • Osprey 915
  • Osprey 925
  • Osprey 927
  • Osprey 935
  • Osprey 945
  • Osprey 914
  • Osprey 924
  • Osprey 944
  • Osprey 1214
  • Osprey 1215
  • Osprey 1225
  • Osprey 1227
  • Osprey 1245
  • Osprey 1285
  • Osprey M15
  • Osprey M14
  • Osprey M24
  • Osprey M25

Stream Labs

  • Alpha HD
  • MH4LM
  • MS4
  • MSP2


  • SC550N1

Setup RustDesk unattended Access for Remote Support

RustDesk is a free Remote Destop Software, which we use to login to remote systems.

1. To get started, download our customized RustDesk from our website. This version will use our private RustDesk server (and not the public server) to protect your data and improve the connection speed.

2. Once you start RustDesk for the first time, you will need to install it. Please deactivate “Install virtual display driver”, which might interfere with PLAYDECK.

3. After re-starting RustDesk, you will not need to activate “Start Service”. This is important to elevate priviliges to e.g. open the device manager. After that you need to setup a permanent password: Click on the Edit Icon next to “One-time Password”.

4. Then click on “Unlock Security Settings” and scroll down.

5. Please send us your ID together with your permanent password to [email protected]

6. (Optional) If possible, please start RustDesk on a secondary PC (No need to install) and test the connection to the System you have setup for remote support. Now thru this remote connection, on the secondary system, please try to:

– Open Device Manager
– Open Task Manager
– Open NVidia Panel
– Copy any File to this Folder: c:\Program Files (x86)\JoyEventMedia\Playdeck\
– Re-Install the current PLAYDECK Version

These tests make sure, that all needed support actions can be done remotely. If is likely, that any Anti-Malware or other Protection software breaks the connection. In that case please de-activate those Tools temporarily for the remote support session.

Setup Multichannel Audio

Multichannel Audio is supported in PLAYDECK for all Inputs/Outputs, that being: Device, NDI, Internal. To activate Multichannel Audio, you only have to increase the Audio Channels in Playlist Output:

PLAYDECK Professional Video Playback Playout Software for Windows * Setting Multichannel Audio 7.1

After that you may select how many Audio Channel you want to display in the VU Meter by Right-clicking it. Now add any Multichannel Clip into the Playlist. We prepared a 7.1 Clip SAMPLE (right-click and “Save as..”) for you:

PLAYDECK Professional Video Playback Playout Software for Windows * Setting Multichannel Audio for 7.1 Audio

Audio Channel Routing

In PLAYDECK, all Audio Channels are enumerated from 1 upwards, within the current selected Audio Track. If you have multiple Audio Tracks, you first have to select the Track you want to output. Then you can mix the Audio channels in any way possible:

PLAYDECK Professional Video Playback Playout Software for Windows * Setting Multichannel Audio Routing

Now you can reference your Audio channels (source) and route them to the NEW channels seperated by comma (target). There are several examples listed with the Routing Popup:

PLAYDECK Professional Video Playback Playout Software for Windows * Setting Multichannel Audio Routing

Send to OBS via NDI

If you want to use 8 Channel in OBS, activate NDI in PLAYDECK Playlist Output, then insert PLAYDECK as NDI Source and you are ready to go:

PLAYDECK Professional Video Playback Playout Software for Windows * Sending Multiple Audio Channels from PLAYDECK to OBS
1 2