January 17, 2024

Zixi streaming setup in Nimble Streamer

Zixi is a well-known brand in the broadcasting and streaming industry. It provides a reliable and secure technology to transmit video content, especially in situations where maintaining low latency and high video quality is crucial.


Nimble Streamer provides integration with Zixi Broadcaster in order to create a bridge between the Zixi protocol and all the technologies that are supported by the Nimble Streamer live streaming feature stack. This article describes the technical details of Zixi-Nimble integration.

1. Prerequisites


We assume that you already have some experience with Nimble Streamer and WMSPanel, so the basic topics are not covered here.

The concept is to have Zixi Broadcaster be controlled by WMSPanel as a backbone for receiving the Zixi stream, while all further processing is performed by Nimble Streamer with its variety of features including live streaming protocols transmuxing and transcoding, Paywall, Reporting, DRM and others.

A dedicated server is required to concurrently operate Nimble Streamer and Zixi Broadcaster on the same hardware.

Both Windows and Linux platforms are supported. The setup is tested with Zixi Broadcaster v16 and the latest version of Nimble Streamer.

Both Zixi Broadcaster and Nimble Streamer need active licenses or subscriptions.

The installation process for Zixi Broadcaster is not covered in this article. Please refer to Zixi documentation or reach out to Zixi support about this.

As for Nimble, you can find all related technologies’ documentation on this page and beyond. If you have any questions or issues installing a Nimble instance, please contact our support team.

Notice that the Zixi Broadcaster will be used by Nimble exclusively, and any additional manual settings of Zixi Broadcaster will be deleted.

2. Setting up Nimble Streamer config


In order to allow Nimble to control Zixi Broadcaster, please specify Broadcaster’s admin user credentials in the nimble.conf file.


The location of the Nimble’s config for the Linux version:
/etc/nimble/nimble.conf
The location of the Nimble’s config for the Windows version:
C:\Program Files\Nimble Streamer\conf\nimble.conf
Do not forget to elevate the current user permissions for accessing the config files, like running the editor via sudo for Linux or ‘as Administrator’ for Windows.


Add the following lines to the end of the config file and substitute *actual_zixi_broadcaster_password* with a real one (without asterisks).

### Zixi ###
zixi_port = 4444
zixi_username = admin
zixi_password = *actual_zixi_broadcaster_password*

Next, restart Nimble to apply the above changes e.g. via the command line for Linux or services snap-in for Windows.


If you succeed you will notice Zixi interfaces detected on the Server Info page in WMSPanel:



3. Receiving Zixi stream via Nimble


Navigate to 'Live Streams Settings' and go to the MPEGTS IN tab. Find and click the 'Add Zixi Stream' button. A dialogue will appear for specifying parameters to receive a Zixi stream. The Receive mode options include 'Listen' for pushing a stream to this server (e.g. by Larix Broadcaster for iOS) and 'Pull' for retrieving a stream from another location, such as another Zixi server or source.

3.1 Setup Listening for Zixi Stream


Choose Receive mode as Listen:


When Listen mode is selected, a notification that Nimble detects Zixi Broadcaster by the ‘Zixi input interfaces:

zixi://*:2088’ is displayed. If there’s no such line then it’s a sign that Nimble can’t reach the Broadcaster.

For unified management of any incoming MPEGTS streams, Alias, Description and Tags could be specified for additional identification. These handy labels help quickly find and group streams through WMSPanel. They are available for many other settings and we advise using them.

A Zixi stream must have a unique StreamID to be accepted. The StreamID is a string that identifies the stream. It is set in the respective field and must be the same as on the sender.

Next, the fields for Custom parameters and Values where optional parameters for the Zixi stream can be filled out.

These are used to specify additional options like latency, stream password, encryption type, etc.

We suggest referring to Zixi documentation for details, however, here's a description of options shown on a screenshot:
  • password - Set stream password (blank by default)
  • latency - Set latency in milliseconds: overrides remote latency configuration (this one is optional, by default the latency is defined on the sending device)
The ‘Add outgoing stream’ checkbox will add the respective MPEGTS OUT at the moment when MPEGTS IN is created. The output will be named the same as set in the Application name and Stream name fields. This step may be omitted if you decide to make outputs later: Nimble will receive the stream in this case, but no output will be generated. That’s why specifying the output name at this step is recommended. The stream will be transmuxed into the protocols defined for the specified Application.

Click Save to initiate synchronization of the settings between Nimble Streamer, Zixi Broadcaster and WMSPanel.

Any manually created settings of Zixi Broadcaster will be erased and substituted by the parameters received from WMSPanel. The record for the Listening for Zixi stream settings will appear in the MPEGTS IN section. As the syncs are complete a green checkmark will confirm Nimble received and is ready to use this setting:




By the way, sharing Zixi’s publishing URLs is also supported by the Larix Grove format. To get a publishing URL or a QR code for it, click on a ‘?’ icon:


Set up the source for streaming and start pushing the stream from another Zixi-capable software like Larix Broadcaster to your Nimble instance.


4.2 Setup Pulling of a Zixi Stream


The 'Pull' mode is used to fetch a stream from a different location. To switch to it, please choose ‘Receive mode’ as ‘Pull’ in the ‘Incoming Zixi stream’ window. The dialogue will change to the following:

In order to confirm that the stream is received, navigate to the ‘Live Streams’ page. There’s a handy way to do it: click on a server name in a breadcrumb located between ‘Live streams /’ and ‘/ Live stream settings ‘ to switch to the Live Streams page instantly.

The received stream’s parameters are stored here. Click ‘?’ to get the output stream’s URL or play this stream with the embedded set of video players.


It is crucial to properly define the Remote IP or domain name and the Remote port of a remote Zixi server. Make sure they are reachable from the Nimble instance for successful reception.

The ‘Source’ value is a StreamID of a Zixi stream defined on a remote machine.

The ‘StreamID’ field refers to the unique name which Nimble will use after receiving the Zixi stream locally.

All other configuration options are the same as for Listen mode as explained above.

Please refer to the previous section for respective details.

Click ‘Save’ to sync and apply settings to Nimble and Zixi Broadcaster. The settings record will appear with a Bandwidth, program count and a green check mark.

If MPEGTS OUT was defined, please navigate to Live Streams to check the received stream settings or watch it via video player.

4. Publish a Zixi stream from Nimble to another Zixi Broadcaster instance


Any stream that reaches Nimble by any supported protocol can be re-published as a Zixi stream to other destinations.

4.1 Push mode Zixi streaming


First, ensure the reception is defined on a remote Zixi Broadcaster server. Login to Zixi Broadcaster’s panel, Click ‘+New Input’ in the ‘INPUTS’ section, and type in the Stream ID which will be used to identify the stream coming from Nimble:



Use any other Zixi options as required.

Click ‘OK’ and switch to WMSPanel to set Nimble for sending Zixi stream.

Navigate to the ‘Live Streams Settings’-> ‘UDP Streaming’ tab and click ‘Add Zixi settings’.

The setup is similar to MPEGTS UDP Streaming, which you may be familiar with.



To Push a stream, fill in the Remote IP, Remote Port and Stream ID of a Zixi’s remote point. Note the same ‘Stream ID’ is used as defined on Zixi Broadcaster earlier.

Any additional Zixi parameters can be passed via the ‘Custom parameter’/’Custom value’ fields.

Specify a stream to send, by typing its application and name in the ‘Source application name’ and ‘Source stream name’ under the ‘Set source streams’ bullet. It’s allowed to specify several apps/streams here to form a multiple-program TS stream.

The ‘Raw MPEGTS source’ is also available to pass through some received sources intact, as described in the respective documentation page.



On a Nimble side, the Push record appears in the MPEGTS IN tab:


4.2 Listen mode Zixi streaming


The ‘Listen’ mode assumes that Nimble will wait for a connection from a remote Zixi server, and as soon as it is established, it will serve stream data for pulling.

On a Zixi Broadcaster side, click ‘+New Input’ in the ‘INPUTS’ section, and select the ‘Pull’ radio button:

Click ‘Save’ to start pushing a Zixi stream from Nimble and find it on a remote Zixi Broadcaster server:


The StreamID here will be the RemoteID for Nimble. Use some unique name.

‘Host’ is a Nimble Streamer box, and ‘Port’ is the port used for output in Zixi’s integration. 2088 is the default.

‘Stream’ is the StreamID we will define on Nimble side a bit later. It’s used to link Nimble’s streams with the Zixi protocol under this ID. This is a stream that will be taken from Nimble by Zixi Broadcaster.

Use any other parameters here, but don’t forget to ‘mirror’ them on the Nimble side if it is required by the protocol. For instance, if you define encryption type and string on a source, don’t miss to set the decryption params on the receiver.

Click ‘OK’, and move on to WMSPanel to configure Nimble.

As before, navigate to the ‘Live Streams Settings’-> ‘UDP Streaming’ tab and click ‘Add Zixi settings’, but now choose ‘Listen’ mode.


The dialogue will highlight available Zixi’s interfaces.

The crucial difference with the Push mode is that you must specify a StreamID of Zixi’s remote Pull settings, which is named ‘Remote ID’ here.

Specify the ‘Source application name’ and ‘Source stream name’ of streams which are available on Nimble, and assumed for transfer.

Fill a local ‘StreamID’ that will unite the streams that are specified in the Source Application/Stream name fields to transfer to Zixi Broadcasters. Keep in mind, that on a Zixi Broadcaster’s side, this name must be specified in a ‘Stream’ field of a Pull settings.

All other options are similar to Push mode and already described in the Zixi Push section above, please refer to them.

Click ‘Save’, and WMSPanel will confirm the settings are accepted by a green checkmark:


Navigate to Zixi Broadcaster to confirm reception:


This article has taken you through the process of integrating Zixi streaming with Nimble Streamer. With the combined capabilities of Nimble and Zixi Broadcaster, you’ll get efficient and top-notch video content delivery.

If you have any questions or issues regarding this functionality, our support team is ready to help, ensuring a successful Zixi streaming with Nimble.

Related documentation


Widevine DRM support for HLS

 Nimble Streamer has extensive DRM support for live and VOD streams. It covers all DRM systems - Widevine, Playready and FairPlay - and multiple DRM management platforms.

Traditionally, HLS streams could only be protected using Apple FairPlay and could only be played on Apple devices.

With recent updates, HLS can now be protected using Google Widevine in addition to FairPlay.

This means that you may have just a single multi-key multi-DRM HLS stream and play it on the devices that support either FairPlay or Widevine. This practically means that this single multi-key HLS stream is protected on any modern streaming device like PC, Mac, Android, iPhone/iPad and more.

This also applies to Low Latency HLS DRM protection, no special setup is needed for that.

You don't need to have a separate MPEG-DASH stream specifically for Widevine protection now.


Multi-key HLS can be protected with Widevine DRM


Widevine HLS encryption setup

The DRM setup is specific to your DRM provider and described on Nimble Streamer DRM setup page.

In addition, you need to add this parameter to your app setting section in drm.conf file:

widevine_hls_enabled = true

Like this:

drm {
  application = live_ezdrm
  type = ezdrm
  widevine_hls_enabled = true
  user = user@yourcompany.com
  password = 12yourpassword34&*@#
}

We have EZDRM here enabled for all streams within "live_ezdrm" application. This can be any other DRM management solution.

Once you save the config file and re-start Nimble, the stream will be protected right away. You may also apply drm.conf changes by using native API call without Nimble re-start.

Widevine multi-key HLS playlist example

We have a sample DRM-protected HLS stream

https://drm-test-cf.softvelum.com/live_ezdrm/bunny/playlist.m3u8

Here's an example of an HLS playlist that has both encryptions.

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:703
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://fps.ezdrm.com/;5a0XXXX4-8XX2-11ea-9XX8-040XXXXXXXXX",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYID=5a0XXXX4-8XX2-11ea-9XX8-040XXXXXXXXX,URI="data:text/plain;base64,AAAAP3Bz XXXXXXXXX nWSs6jyXXXXXXXXXXXXXXXXXXXXXXXXSkAEaBWV6ZHJtSOPclZsG",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1",IV=0x5a08XXX485XX11XXXXX401999XXXX
#EXT-X-MAP:URI="video_1.fmp4?nimblesessionid=189205"
#EXTINF:6.666,
v_42_380062500_703.fmp4?nimblesessionid=189205
#EXTINF:2.375,
v_42_380662500_704.fmp4?nimblesessionid=189205
#EXTINF:4.583,
v_42_380876250_705.fmp4?nimblesessionid=189205
#EXTINF:8.75,
v_42_381288750_706.fmp4?nimblesessionid=189205

This element is for FairPlay:

#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://fps.ezdrm.com/;5a0XXXX4-8XX2-11ea-9758-040XXXXXXXXX",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"

And this one is for Widevine:

#EXT-X-KEY:METHOD=SAMPLE-AES,KEYID=0x5a0XXXX4-8XX2-11ea-9XX8-040XXXXXXXXX,URI="data:text/plain;base64,AAAAP3Bz XXXXXXXXX nWSs6jyCfc1R0h7QAAAB8XXXXXXXSFIhHql1gEAZmSkAXXXXXXXXJtSOPclZsG",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1",IV=0x5a08XXX485XX11XXXXX401999XXXX


Widevine HLS Players

You may use Shaka Player to play this stream, it fully supports this kind of Widevine-encrypted HLS. Other commercial players have that support, please refer to their documentation.

You may try playing our sample stream above using our players page. Here's an example of Widevine playback:

https://wmspanel.com/p/#player=shaka&url=https://drm-test-cf.softvelum.com/live_ezdrm/bunny/playlist.m3u8&drm_url=https%3A%2F%2Fwidevine-dash.ezdrm.com%2Fwidevine-php%2Fwidevine-foreignkey.php%3FpX%3DB03B45

Notice the License Server URL field that you'll need to use for your stream.

The FairPlay is played the same way, with its respective License Server URL and Certificate URL fields being set properly.


Related documentation

January 2, 2024

New WebVTT Features: Transcoder Passthrough and Playout Support

We are glad to announce that we added new features to our Nimble Streamer software media server to support WebVTT subtitles. WebVTT is one of the popular formats for displaying timed text tracks in VOD or live streams. Based on the feedback from our customers, we were working on adding WebVTT support for Live Streams.

First, you can produce a live stream with WebVTT subtitles from VOD files via Nimble Playout. However, there is a limitation that only one subtitle file can be used for one VOD file. Please find more details in respective section of the Playout documentation.

Another new feature is the Transcoder Passthrough option, which allows you to pass through WebVTT subtitles if they are detected in the source stream.

Please also check Subtitles digest page to see what else Nimble can do for you.

We are continuously working on enhancing subtitles support. Any suggestions and comments are welcomed.