March 26, 2024

libaom-av1 and SVT-AV1 transcoding setup with Nimble Streamer

AV1 format is a promising solution for high-quality efficient video compression.

Now with Nimble Streamer support for AV1, streaming services can easily adopt this advanced format to deliver high-quality content. Adding another significant piece into AV1 support, here we describe the transcoding options available for Nimble Streamer Live Transcoder: SVT-AV1 and libaom-av1 encoders are now supported via the respective FFmpeg encoder option.

Prerequisites

Before using the Transcoder for Nimble Streamer, you must have a basic subscription to WMSPanel and a Transcoder license. Please find more details on installing and registering an instance of Transcoder on the following installation page. You should also have a basic knowledge of Live Transcoder setup, please refer to our documentation reference.

1. Decoding AV1 received streams


AV1 streams are supported as video input, and no extra setup steps are required. Just drag Video Source to a timeline, and specify the name of a stream for decoding. After that any of the Transcoder’s filters can be used on the stream.

2. Encoding with libaom-av1


Specifying libaom-av1 for encoding is not much different from any other encoders. Add the Video output to a timeline, name the output application, and stream, and then select FFmpeg as the encoder. Next, type in libaom-av1 in a Codec field. Once you click OK and then Save the scenario, the settings will be applied and you will get the output stream in AV1 format.



Here are the parameters you can use for it

2.1 libaom-av1 constant quality 

To set constant quality for the encoding process, fill in parameters as ‘crf’ and then the number in the option field.


Accepted values are 0-63. Lower values = better quality, 0 = lossless. CRF 23 ≈ x264 CRF 19 (visually lossless).

This mode ensures that each frame receives the appropriate number of bits to maintain a consistent quality level. It is set the same way as for x264 or x265.

2.2 libaom-av1 constrained quality


This one maintains desired video quality (set with ‘crf’ option) while targeting a bitrate limit (‘b’). Use for consistent encoding with a bitrate cap.


The ‘b’ value must not be 0.
Alternatively, you may specify the minimum and maximum bitrate range instead of the ‘crf’ option:


Notice that this mode doesn’t mean setting strict limits for output bitrate, and it can be even higher than  the input depending on the source’s data.
That’s a frequent question to our support team along with the question if the bitrate is specified via the ‘b’ param only (even if no ‘crf’ or ‘minrate’/’maxrate’ is set) and expected to be strictly constant.

2.3 libaom-av1 keyframe control


By default, the Transcoder suggests encoders to use keyframes as set by the ‘Keyframe alignment’ option. 
You may force keyframes via the encoder parameters also. The ‘g’ parameter can be used to set the maximum keyframe interval.
To get a fixed Interval specify both ‘g’ and ‘keyint_min’ to the same value. 
To force all frames as keyframes use ‘g’ as  ‘0’.


You can find more information about libaom-av1 on this page.

3. Encoding with SVT-AV1


SVT-AV1, also known as libsvtav1, is a video encoder that Intel and Netflix created together. In 2020, the Alliance for Open Media (AOMedia) chose it to lead the way for AV1's development and future video codecs. It's also supported by Nimble Streamer Transcoder.

To specify SVT-AV1 encoding, add Video Ouput, name the application, and stream for the output, choose FFmpeg as encoder and type ‘libsvtav1’ in the Codec field.



As you click ‘Ok’ and then ‘Save’ in the scenario window, you will receive AV1 output produced by libsvtav1 codec.

Here are some additional parameters to consider.

3.1 SVT-AV1 CRF


The 'crf' parameter ensures each frame receives the appropriate number of bits to maintain a consistent quality level.  It is set the same way as for x264 or x265, or as described above for libaom-av1.
Accepted values are 0-63. The default value is 35. Choosing a lower CRF value results in higher video quality and a higher bitrate. Encoding in a completely lossless mode is not supported at the moment.

3.2 SVT-AV1 Presets


In SVT-AV1, the ‘preset’ option is used to balance encoding speed with compression efficiency. There are 14 presets available, numbered 0 to 13, where higher numbers mean faster encoding. 



3.3 Additional options with SvtAv1Params


There are some additional options you may want to try with the SVT-AV1 encoder for getting either faster encoding or better quality.

They are listed in the section ‘Usage of SvtAv1Params’ on the following documentation page.

Here we describe, how to apply it in Nimble Transcoder.

Type in ‘svtav1-params’ as a parameter of Video Output in the encoder settings. Set the value of the desired SVT-AV1 parameter and its value in an options input. You may chain several options via semicolons like ‘option1=value1:option2=value2…’



In the screenshot, we showed how to enable the ‘fast-decode’ option and the ‘tune’ option set to Visual Quality (0). The option string is ‘fast-decode=1:tune=0

You may find additional info about SVT-AV1 on this page.


In conclusion, the arrival of AV1 encoding offers new capabilities with its superior compression, royalty-free nature, and high-resolution support. While processing power for encoding might be higher, the long-term benefits – from reduced bandwidth costs to exceptional video quality – make AV1 a future-proof investment for the live-streaming video landscape. Don’t hesitate to evaluate it right now with Nimble Streamer Transcoder.

Live video overlays and videowall with Nimble Live Transcoder

In the dynamic landscape of media streaming, enhancing content through creative overlays has become an indispensable aspect of media delivery. Nimble Streamer Live Transcoder emerges as a powerful tool in this realm, offering a versatile platform for superimposing text, images, animations, or live video streams while preserving and enhancing your brand identity. Here, we will talk about overlaying video or pictures on top of the video.

Prerequisites


Before using the Transcoder for Nimble Streamer, you must have a basic subscription to WMSPanel, as Transcoder does not work for trial servers. The Transcoder license costs 50 USD per server per month, there is no trial version for it.

Please find more details on installing and registering an instance of Transcoder on the following installation page.

You should also have a basic knowledge of Live Transcoder setup, please refer to our documentation reference.

Basics of operation


First, a base layer that determines the output resolution to create an overlaid video must be defined. This can be a live video or an image.

Then, all other input sources will be stacked on top of this main layer via the Overlay filter. You may also need the Scale filter to adjust the size of the other sources to place and fit them on the base layer.

The next concept is that you must define one of the sources as the Main stream. Once the scenario is started, the Transcoder will start equalizing all other streams’ timestamps to the Main stream to provide a stable source for Overlays.

Let's go through the details of this scenario setup below.

Sources for overlays: live streams


All of the supported source types can be used as a source for Overlay or backing layer: live streams, image or video files, and NDI sources.

Put a Video source decoder block on a timeline, and the Add video source dialogue will appear.

This will allow choosing the source type: Stream, File, NDI. First, we describe the regular live stream setup.

Type in an application and choose the stream to auto-fill the stream’s name. If the streams are registered in the panel, they will appear for selection. Choose the required one.


Next, you must also choose the purpose of this source: it could be either the Main stream or the PTS Adjusted stream.
Checking the Main stream box will mark the stream as main. For your convenience the main input will be marked with a bull's eye:

To equalize any other stream's timestamps with the Main's timestamps, choose the PTS adjustment enabled checkbox in its source’s settings.

Since the Main and PTS Adjustment are defined, you can safely chain several Overlays (or any other filters) in a Transcoder’s scenario. This versatility will help create distinctive visual effects for your video output.

As for the Audio, the Main is the only stream that will have perfectly synced audio. We do not advise taking audio from other streams, as we cannot guarantee the audio sync in such a case.

If the source live stream is over or stopped, the decoder will hold the previously available frame in its output, making the next in a chain Overlay filter operational.

In case the Transcoder scenario is just starting and one of the live sources participating in the Overlay chain is missing, the Scenario will fail to start. We advise using hot-swap failover to ensure the source always has some viable frames to process.

Source for overlay: video file, static, or animated image files


Move on to the next type of decoder: File Source decoder. Although we already have an article about decoding from files, here we will notice the crucial points.

As the name implies, it uses files on the same server Nimble Streamer is running as input. As you specify the path to some file and the scenario is running, then the File Decoder generates looped output with stable timestamps which can be assigned as Main. This is true for both video or image files. As you might have spotted, there’s no PTS Adjustment checkbox. It is considered that if the Main stream is not specified, such sources will be forced as PTS adjusted.

The video file formats supported are MP4, MOV and MKV. The codecs are listed in our codecs reference. Videos with alpha channel are not supported at the moment. Feel free to ask our support team if you plan using them.

Supported image formats include PNG, APNG, JPEG, GIF, TIFF and BMP. The alpha channel or GIF transparency is available. GIF and APNG animations are supported too.

In case of a single frame image, the file will be re-loaded as fast as the file is modified or overwritten. Notice that reloading will not work for video files or files with a sequence of frames, like APNG animations.

All the above makes the File Decoder a handy source for animated or updated Overlays like moving logos or bar ads.

Notice that path considerations are different between Windows and Linux.

For more information on File decoder, please read Binding un-synced video and audio sources article.

Single Overlay filter setup


Now let's move on to some practical setup that will be a basis for cases like video wall or mosaic.


We will combine a backing static layer with some live stream.

Suppose we require a standard 1080p output and on top of it a live video will be played with a resolution half that of a frame.

Prepare an empty 1080p resolution image, that will define a frame and put it in some folder accessible by Nimble. It could be a solid color, but for clarity, the color bars are used. We advise using PNG, as it is a more versatile format.




Put Video Source, select File, and type in path and filename. Set FPS to 30.

Add another Video Source and this time specify a received live stream by its application and stream names. We'll choose live/bunny here.

Next, apply a Scale filter to ensure that the live stream does not fill the background layer. Let’s make it 540p as it sounds applicable. Drag a line from the Live Stream Source decoder to the Scale filter.


Next goes the Overlay filter. Drop it on a timeline closer to File Source decoder. Connect the file decoder and Overlay filter by dragging a line between them. Specify the position of an overlaid video.
Set the output encoder by dropping Video Source to the timeline, name the output stream (like overlays/out) and choose any settings you like, default values are acceptable for checking.

One thing to note: Ensure that the Main video is received from: option refers to a File Source, as this specifies the source for the backing layer with a higher resolution.

Now it is time to decide which of the inputs to consider primary for timestamp adjustment.
The concern here is that the output stream could only have one audio source that would be synced with video and it must be marked as Main. So in this simple scenario, the preference naturally leans toward the live stream if we add its audio as an Audio source.

However, if syncing sound isn't necessary - let's say you just want background music - then specify the File source as the Main stream. In this case, the timestamps will be produced by the Transcoder itself and all other stream’s timestamps will be adjusted to them.

Click the Save button and in a few moments, you will have overlaid scaled video in the output stream via any Nimble-supported streaming protocol. Click Live Streams above the save button to jump from the Scenario to the List of Live Streams.



Multiple Overlay filter setup (videowall)


Now we're moving to a more advanced setup: chaining more video sources.



Add another Video Source (we use a file here for simplicity, but it's up to you), Scale, and Overlay. Use the same params as above, and chain them as shown in the picture. In the Overlay’s filter settings, make sure Main video is received from: is set as a previous Overlay filter.

You may add more video inputs to overlay them to form a video frame like below:



Hardware accelerated Overlay and other filters


Is the hardware acceleration available for this feature set? Absolutely, but just for Ubuntu Linux users. Both NVENC and QuickSync have hardware-accelerated versions of overlay filters. It's better to use NVENC-ffmpeg or NVENC-quicksinc decoders with these filters for performance reasons. This will avoid getting and putting frames to the system’s RAM and losing CPU cycles by using additional hwupload and hwdownload filters.

However, these decoders come with certain limitations. While they allow you to decode H.264 or HEVC (if supported by the GPU) mp4/mkv video files, they are not suitable for handling static images or animated files such as GIFs.

Remember to consider the hardware-accelerated scale_npp (scale_cuda) and vpp_qsv (scale_qsv) filters for resizing a video source. NVENC-ffmpeg decoder allows scaling in its settings by the resize option. Explore additional information about NVENC-only scenarios in the following article.

If you require more details on creating an NVENC-only scenario, please let us know. We have plans to publish an article specifically addressing this topic.

Troubleshooting


Here we’ll describe some tips and common errors you may face while while using Transcoder.

Although we did an extensive job of improving the stability of the Overlay filter, anyway we recommend using the out-of-process mode to provide better stability for the Nimble Streamer server. This mode will ensure that a single scenario with an issue won’t crash Nimble Streamer. Read about it in this article.

If you’re changing source type, let's say from File to Live, scenario restart is considered. It can be performed while editing the Scenario by the corresponding icons near its name.

Some common messages in the log:
  • [video_decoder] E: failed to open stream /some/path/file.ext - You’ll get this error in the log if the specified file name is not found or Nimble has issues accessing it (e.g. due to permission restrictions).
  • [video_filter] E: failed to parse filter graph - This means something is wrong with a filter chain from the parameter or there are filter name incompatibility errors between the decoder and filter. Other messages are needed for details.
  • E: encoder too slow’  for encoder or decoder in most cases it means you are running out of processing power. If the multicore CPU is used, and you observe that some cores are not loaded when the error is present, this may be improved by allowing more cores for decoding or encoding.
  • [video_filter] E: reset video filter on pts gap(prev=XXX, cur=YYY, timescale=1/1000), filter=XXXXX, stream=larix/2 - It's not an error, but the indication that due to the timestamp jumps, the filter was re-created.
  • [video_decoder] E: decode interval gap detected, decode_interval=XXXX for [_some_path_] - it very likely is a decoding performance issue or the inconsistent system time.

What’s next?


You can place additional filters ahead of the Overlay filter to create visually appealing images that include lower thirds, L-shaped or bar images, watermarks, and even scrolling text. We'll cover this topic in upcoming articles.




March 19, 2024

Ogg/FLAC support in Nimble Streamer

Nimble Streamer Icecast streaming feature set covers many use cases and supports multiple codecs.

Now Nimble also supports FLAC (Free Lossless Audio Codec) with Ogg container for Icecast.

You may use it in various combinations:

  • Take Icecast input with Ogg/FLAC content and then deliver FLAC Icecast content further to any number of listeners without changing the codec. All features related to content protection and monetization can be applied to the output Icecast.
  • Decode FLAC via Nimble Live Transcoder, encode it into AAC or MP3 and deliver further via any supported protocol, including Icecast, audio-only HLS, SLDP or any other. You may also transcode it into Opus for WebRTC delivery. Notice that you'll need to upgrade your Transcoder package to do that.

This allows using Ogg/FLAC in any of the workflows needed to deliver high quality audio to your listeners.


Let us know of your experience with audio features of Nimble Streamer.

SRT multipoint listener in Larix Broadcaster

Softvelum products have wide support for SRT streaming, processing and playback.

Larix Broadcaster has various capabilities for SRT streaming including all modes - Caller, Listener and Rendezvous - and a number of SRT parameters.

SRT Listen mode now allows streaming as a multipoint listener on both Android and iOS.

It means that your consumers who want to get live content from same mobile can pull the stream simultaneously without waiting for connection to be available. This opens a use case when you set up your streaming mobile device and have various participants of the same production team to get same content with no need to re-set the connection settings.

If you choose to provide an SRT stream in Listen mode, Larix will also provide Max listener connections parameter to set control on how many consumers can access the stream simultaneously.

Try it now with Larix Broadcaster:

Let us know if you have any questions about this or any other feature of Larix products.

March 7, 2024

Axinom DRM in Nimble Streamer

Axinom DRM has recently been added to Nimble Streamer DRM bundle.

It allows protecting live and on-demand content with Widevine, Fairplay and PlayReady DRM encryptions.

Its setup is as easy as any other DRM, here's an example:

drm {
  application = live_drm
  type = axinom
  axinom_tenant_id = 0e51eeee-7921-5678-zzzz-xxxxxxxxxxx
  axinom_management_key = faa6dddd-1234-nnnn-yyyyyyyyyy
  content_id = 1232345-8602-11ea-b04b-7fccdabcdef1
  content_ids {
    stream1 = 1232345-8602-11ea-b04b-7fccdabcdef2
    stream2 = 1232345-8602-11ea-b04b-7fccdabcdef3
  }
}

You'll need to obtain Tentant ID and Managemetn key from Axinom.

Also notice that you need to specify the content IDs because it's being used for content licensing.


Let us know of your experience with Nimble Streamer DRM.


February 24, 2024

SLDP is now played on iOS17 iPhones with MMS

Our team introduced SLDP low latency playback protocol several years ago as a replacement for RTMP due to sunset of Flash. It's a WebSocket-based technology which can be played on any browser platform that has MSE. Up until now, this was the reason why SLDP live streams couldn't be played on iPhones since they didn't have MSE, even though, it played on Windows, Linux, macOS and even iPads. The only exception was Opus audio-only playback on iOS.

Now with the latest releases of iOS 17, iPhone iOS has full support for MMS - Managed Media Source - which provides necessary capabilities to make the MSE-based playback possible.

Hence, SLDP playback is now available on iPhones running iOS17+.

The setup is the same as for other browsers.

  1. Go to SLDP HTML5 Player page, download and embed HTML5 player into your web page.
  2. Follow Nimble Streamer setup instructions for SLDP output setup if you haven't does this yet.

That's it.

You may also try our players testing page as well as raw HTML5 reference implementation to test your streams on iPhones.

You can also subscribe for SLDP HTML5 SDK to make more customized setup for your use case and viewers' experience.

About SLDP

Softvelum Low Delay Protocol a.k.a. SLDP was created with last mile low latency in mind.

  • Close to one second delay with buffer offset support for decreasing zap time (start latency).
  • Codec-agnostic and may carry whatever your end-user platform has: H.264, AV1, VP8, VP9, H.265/HEVC video with AAC, MP3, MP2, AC3, E-AC3, Speex, PCM G.711, Opus audio.
  • ABR real-time support. Switching channels takes just a GOP time and each channel may use its own codec.
  • Simultaneous synchronized playback among multiple browsers and mobile devices.
  • CEA-608/708 closed captions are supported with HTML5 Player SDK.
Contact our team to ask questions or share your experience with SLDP playback.

Follow us in social media to get updates about our new features and products: YouTubeTwitterFacebookLinkedInRedditTelegram

February 12, 2024

SCTE-35 markers support in Nimble Streamer Playout

We're glad to introduce an update for Nimble Streamer Playout feature (also referred to as a Server Playlist sometimes). It now provides enhanced functionality for SCTE-35 markers insertion through the playlist. Any systems with SCTE35 support can process the Playlist output in order to insert ads. E.g. Nimble Advertizer can do that for you.

The latest update introduces a new section in playlists called "Scte35Markers". It allows the insertion of SCTE-35 markers at a specific time spot within a playout-generated stream. Using key parameters like "Type", "Start", and "Duration" users can precisely control marker placement.

"In" and "Out" markers types are supported.

Out” markers support either a precise time in UTC format ("YYYY-MM-DD HH:MM:SS") or the offset from the beginning of the currently running file set in milliseconds.

Here's a self-explanatory example:

{
  "Type": "vod",
  "Start": 0,
  "Duration": 600000,
  "MaxIterations": 0,
  "Source": "test/content/mp4/sample.mp4",
  "Scte35Markers": [
    { "Start": "2023-11-03 04:00:00", "Type": "Out", "Duration": 2000 },
    { "Start": "2023-11-03 04:00:02", "Type": "In" }
  ]
}


You can find full example on Nimble Streamer Playout page.

The improved Playout in Nimble Streamer allows effortlessly inserting SCTE-35 markers directly through the playlist, eliminating the need for additional Nimble API calls.

Install the latest Nimble Streamer version and check these enhancements.

We look forward to enhancing your streaming experience. Let us know if you have any questions.

Related documentation




February 6, 2024

Larix Broadcaster on MacOS

 We're glad to inform you that Larix Broadcaster for iOS is now available on the latest macOS via the AppStore!

Larix Broadcaster for macOS provides:

  • Support for MacBook's internal cameras
  • Support for Continuity Camera feature to use iPhone as an external camera
  • Support for USB cameras
  • All the basic and advanced features of a Mobile App: Multicamera(Picture-In-Picture, Side-by-Side modes), Overlays, RTMP, SRT, WebRTC and all other protocols
  • The same Apple ID can be used for several devices.

Now you may also stream with a wired connection to a preferred publish point.

Please check this video to see how it's set up:


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