February 3, 2021

Larix SDK 2021-01 releases and tutorials

Softvelum mobile development team has released a major release for our SDKs.

Our subscribed customers have already received respective notifications and may download new packages under their WMSPanel account, where they always download them.

Larix Broadcaster and Larix Player SDKs for both Android and iOS now have version "2021-01". You can visit mobile releases history page to see the changes and here we'll briefly describe them.

First, we've created separate pages for each individual SDK to describe what customers get when they subscribe and give some other details.
  • Larix Broadcaster SDK for Android and SDK for iOS pages have architecture overview of Larix Broadcaster to make it easier to understand for beginners.
  • Larix Player SDK for Android and SDK for iOS has basic information, we'll add architecture description later on.

Now, here's what we added to the SDKs.

Larix Broadcaster SDK for both platforms:
  • Talkback audio return feed via SRT, RTMP, SLDP and Icecast. This is a feature which was often requested by Larix users, so we released in early January into production and after a few minor fixes, the final implementation is now available in SDK.
    Notice that if you want to enable Talkback in your apps, you'll need to purchase Larix Player SDK and use libsldp library from it. You'll get more details in release not in SDK package.
  • Publishing via SRT Listen and SRT Rendezvous. Larix now supports all modes of SRT for producing the live content.
  • libsrt 1.4.2: we moved to the latest stable release of libsrt.
  • librist 0.2.0RC2: RIST is getting more attention, so we moved to one of the latest librist release candidates.
Also, additional tutorials were added on our github showing how to create minimal application for iOS and Android based on our streaming library. They are just step-by-step guides easy to follow.

Larix Player for all platforms was also updated:
  • It can be used for enabling Talkback in Larix Broadcaster.
  • Playback via SRT Listen and SRT Rendezvous was added, so Player now supports all SRT modes to consume live streams.
  • libsrt 1.4.2: we also moved to the latest stable library here.

If you'd like to subscribe for any ot all of the SDKs described above, visit mobile SDKs purchase page or any individual SDK page for respective instructions.

Contact us if you have any questions and follow us via TwitterFacebookTelegramLinkedInYouTube and Reddit.

January 20, 2021

VOD server-side ads insertion with Nimble Advertizer

Nimble Advertizer server-side ads insertion for live streaming has been used by Nimble Streamer customers for quite some time and we continuously improve it.

Now we introduce VOD ads insertion for HLS. You can now insert your ads into MPEG-TS and fMP4 containers of HLS for VOD playback. It's part of our Addenda premium package available per subscription.

Nimble Advertizer provides an extended config grammar to cover various business logic such as pre-roll and mid-roll ads, per-stream and personalized ads and much more.

The setup is simple and is similar to how it's done for live streaming.

  1. Install Nimble Streamer or upgrade it to the latest version if you already have it.
  2. Setup if up for HLS VOD transmuxing.
  3. You'll have settings for a certain application, you'll need it for further setup. Make sure your output HLS VOD stream is working without ads after the setup.
  4. Subscribe for Addenda license. Advertizer is part of Addenda premium package so you'll need to get the license and register it for your server.
  5. Set up Advertizer using Advertizer tech spec which covers all the aspects of SSAI.

As a result, your output HLS VOD streams with MPEG-TS and fMP4 containers will have ads inserted into the stream's content.

Notice that fMP4 HLS with inserted ads can only be played on Apple devices and in hls.js player as of mid-January 2021. We'll keep working on making further compatibility improvements.

If you have any questions about Advertizer and its usage, let us know.

Related documentation

VOD capabilities of Nimble StreamerNimble AddendaHLS support in Nimble Streamer for live and VOD


January 13, 2021

Larix Talkback

Larix Talkback for audio return feed is now available in Larix Broadcaster for both iOS and Android:

Now a streamer who uses Larix Broadcaster can get audio return feed as a recipient via SRT Caller, Listener and Rendezvous mode, along with RTMP, SLDP and Icecast.

The use cases can be different. It can be a talent who needs to talk to a studio. Or a live show director can give instructions to an operator who uses mobile device to stream.

So basically this is our mobile implementation of Interruptible foldback (IFB) which you might know from professional-grade production setup.

The SDKs for Larix Broadcaster and Larix Player with talkback capabilities on board will be available soon.

December 30, 2020

Recap of 2020: NDI, Low Latency HLS, DRM, SRT, RIST, Larix Broadcaster and more

The year of 2020 is over and our team is glad to wish you a Happy New Year!

Despite everything that happened this year, our team kept moving forward and improving our products.

So let us show you briefly what we have accomplished this year. You could find more details and minor updates in our earlier newsletters and social media so here we'll just point to significant ones.

Nimble Streamer

Low Latency HLS

Apple Low Latency HLS is the next generation of Apple's HTTP Live Streaming protocol created to achieve latency of around three seconds. Nimble Streamer now supports LL HLS and it generates the output stream according to the latest spec.
Read LLHLS setup and usage article which includes video tutorial. Currently the output plays only on Apple platforms and via THEOPlayer. You can watch our sample stream on their LLHLS demo page.

DRM on board

Nimble Streamer now has full support for DRM. Our customers can protect their live streams, DVR and VOD output by encrypting them with Widevine, Playready and FairPlay. Key management can be done via BuyDRM, EZDRM, Pallycon and Verimatrix. Visit DRM feature set page to learn more about setup and usage.
DRM is available as part of our Addenda premium package. It covers DRM, Advertizer and a set of other premium features.

More protocols

NDI support was added into Nimble Streamer. It allows receiving NDI input for transcoding it into any supported output protocols, as well as turning any input stream into the NDI output. This is extremely useful for live production teams. Read NDI setup article to learn more and watch video tutorial to see it in action.

SRT protocol feature set had a break-through this year among our customers. We saw it gaining a huge momentum across the industry. And our team also improved our implementation in Nimble Steamer this year:

  • SRT Publisher Assistance Security Set (SRT PASSet) is our new security and management framework for SRT. It allows processing incoming streamid, making per-server, per-application and per-stream authentication, managing published streams and more. Read framework overview in this article to see what it can do for you.
  • In addition, we've added SRT playback protection to Paywall feature set and added playback stats for WMSPanel.
Read more about how Softvelum products implement SRT.

RIST is another technology which we've added this year. This is a new protocol for reliable streaming over UDP, you can read more about its advantages on RIST forum website. Nimble Streamer supports RIST in Push, Pull and Listen modes.

SLDP low latency protocol was another streaming technology that we improved. Synchronized playback on multiple devices became available as part of all SLDP implementations. You can stream simultaneously from Nimble Streamer to SLDP Player on HTML5 web page, Android and iOS for better user experience. View video demonstration of this feature in action, you'll love it.

If you build big infrastructures based on Nimble Streamer and WMSPanel, you will also like slice-wide permissions which you can use for assigning any group of non-admins to any group of servers, in order to give them a specific set of permissions for controlling Nimble instances.

Improving Transcoder 

Nimble Live Transcoder was also improved significantly this year with a bunch of sophisticated features:

More media

You may find interesting these articles mentioning the usage of Nimble Streamer in complex scenarios:

Side note: we've started producing video tutorials on various subjects, e.g. Nimble on Amazon EC2: installation and SRT setup. Check our YouTube channel to see more and subscribe if you want to get new videos as soon as they arrive.

Larix Broadcaster and mobile streaming

This year Larix Broadcaster had a huge increase in usage.

Larix was mentioned in a few articles on SVG News:

You can find more links, including industry leaders mentioning Larix, on our documentation reference.

This year we've put significant efforts into the quality control of mobile solutions. Softvelum apps now pass through a series of tests before being released into production. We've published our basic description of connectivity testing to demonstrate the most important aspect of that.

If you subscribe to any of our mobile SDK you can be sure you get a properly tested solution.

Before we go on to the features from past year, we'd like to share an awesome upcoming update.
  • Talkback provides audio return feed from the studio back to the mobile streamer. You can get feedback via SRT (all receiver modes), RTMP, SLDP and Icecast.
  • Besides Talkback, Larix Broadcaster will support publishing via SRT Listen and SRT Rendezvous modes.
  • To use these features right now, join Beta program in Google Play, and use this link to install it via TestFlight on iOS. Let us know how it works for you.

As for major Larix Broadcaster functionality, we've added plenty of major and minor 
updates, including more RTMP authentication compatibility with servers and services, audio-only mode, streaming pause, RIST streaming and more. We also introduced Larix Grove, a simple format which allows distributing streaming setup details across mobile devices.

Larix Player is the new name of our playback solution formerly known as "SLDP Player" which is available on Android, iOS, Android TV and tvOS. It can play SRT in Caller, Listen and Rendezvous modes, RTMP, SLDP, Icecast, HLS and MPEG-DASH.

SDK release notes has a list of all significant features added this year.

Also, we created mobile products playlist on YouTube to show our own video tutorials. Check SRT to OBS from Larix tutorial as an example.

That's it for now.

Our team wishes you a Happy New Year and we'll see you in 2021!

Follow us any way you like for future updates: Twitter, Facebook, Telegram, LinkedIn, YouTube and Reddit.

November 27, 2020

VOD DRM support in Nimble Streamer

We've previously introduced DRM support in Nimble Streamer which included Widevine, Playready and FairPlay encryption support for MPEG-DASH and HLS streams in live and DVR mode.

Nimble Streamer now supports DRM for VOD, allowing to encrypt MPEG-DASH and HLS streams generated from VOD files. VOD DRM covers CENC-based encryption for MPEG-DASH and fMP4 HLS.

When a viewer connects to MPEG-DASH or fMP4 HLS VOD stream within an application protected by the DRM, its output will be encrypted with respective DRM engine.

  1. For VOD setup please refer to this digest page. Check MPEG-DASH VOD setup and HLS VOD setup articles.
  2. For DRM setup details visit DRM feature set page.
  3. If you use FairPlay, you need to use fmp4 container in playlist name, e.g. https://servername/stream/name/playlist_fmp4.m3u8
  4. You also need to explicitly forbid access to VOD files via progressive download as described in this article.

Watch this video tutorial showing EZDRM setup for live, DVR and VOD content protection.

Contact us if you have any questions regarding this feature.


November 24, 2020

Apple Low Latency HLS setup in Nimble Streamer

Apple has introduced Low Latency HLS spec back in 2019 and has officially released the final version of the spec in the fall of 2020, along with making the playback available on iOS and Mac.

Nimble Streamer now has full support for Apple LL HLS in addition to "legacy" RFC8216 HLS. You can read about major advantages on LL HLS digest page. This article describes the setup process of Nimble Streamer.

We assume you already have Nimble Streamer installed on one of your servers,or upgraded to the latest version and you have full access there.

You watch a short version of this article in our video tutorial below.

However we highly recommend reading this article to use this feature efficiently.

LL HLS uses HTTP/2 via SSL as a transport protocol. So you need to enable it before performing any further setup.

1. HTTP/2 setup

1.1 First, install the latest Nimble Streamer or upgrade your existing instance. 

1.2 Now set up the SSL certificate for Nimble Streamer. This is an important steps so please make sure SSL is working before moving forward.

1.3 Add ssl_http2_enabled=true parameter into nimble.conf and restart Nimble Streamer. Read parameters reference to find more about config location and restart.
LiteSpeed HPACK library: Nimble Streamer uses LS-HPACK library for encoding and decoding HTTP headers using HPACK compression mechanism. Softvelum team would like to say thank you to LiteSpeed team, we appreciate their effort and technical expertise.
1.4 After that you'll be able to use HTTP/2 to reach live streams with HLS and MPEG-DASH protocols enabled. You can check if Nimble Streamer delivers HTTP/2 by checking access log. Read this article to get familiar with logging. E.g. you can enable logs by using log_access=file parameter. Once you add it and re-start Nimble, you'll be able to view the log. In Ubuntu it's located in /var/log/nimble/access.log by default.
Now when you try to get your regular HLS live stream via https:// via curl or HTTP/2-capable player, you'll get this kind of record in access log:
Dec 24 17:43:09 nimble[5500]: [nimble-access.log] - - "GET /livell/stream/playlist.m3u8 HTTP/2" 200 84 1114 372 "-" "AppleCoreMedia/ (iPhone; U; CPU OS 13_3 like Mac OS X; en_us)"
You can see HTTP/2 there which means it's working. In other cases it will have HTTP/1.1 and this will mean you need to check what's wrong.

If a client tries to access LL-HLS stream via HTTP/1.1, or if HTTP/2 is not properly set up, then the player will fall back to legacy HLS and will not use any advantages of LL-HLS.

2. Live streaming setup

Now you need to set up transmuxing settings via WMSPanel web service. If you are not familiar with live streaming setup of Nimble Streamer, please refer to live streaming digest page, or respective input protocol pages, such as RTMP streaming.

You may use any RTMP, RTSP, SRT, RIST and MPEG-TS input stream as a source for LLHLS.
Please make sure you have a correctly set up live stream (like regular-latency HLS, RTMP or SLDP) before trying to use LL HLS.

Once you have a live stream set up in WMSPanel, go to Nimble Streamer top menu and select Live streams settings. You will see Global setting tab for selected server. You may create application-specific setting as well if it's needed for your streaming scenario.

Currently, Nimble Streamer supports all 3 container types available for HLS, you can see their respective check boxes on the screenshot above. Those types have the following meaning for Low Latency HLS case:
  • HLS - this type is recommended for audio-only LL streams. It's optimized for audio delivery and it has a reduced chunk size. This allows significantly saving bandwidth for audio streams. The ID3 tags are also inserted in each audio part.
  • fMP4 (CMAF) - fragmented MP4 for video+audio, audio-only and video-only modes. We highly recommend using this type of container for video+audio and video-only cases as it allows utilizing all advantages of LL HLS.
  • HLS (MPEGTS) - this type supports both video+audio, audio-only and video-only modes, however we do not recommend it for LL HLS. It brings a lot overhead which diminishes all advantages and increases the latency. Also it does not support HEVC unlike fMP4. We've added this type support as a fix for a bug of iOS 12 which implemented previous LL HLS spec. So even though you can use it with LL, Apple does not recommend using it and Nimble Streamer team does not as well.
Once you select either of those containers, WMSPanel will show Enable Apple's Low Latency HLS checkbox and you need to select it. You will then see HLS part duration edit box to define parts' duration in milliseconds.
Please consider the following when choosing parts duration:
  • We recommend using part duration of 2000ms with chunk duration of 6 seconds. The expected latency will be about 6 seconds in this case. This duration provides optimal bandwidth and latency as well as good playback buffer.
  • The minimum recommended part duration of 1000ms. The expected latency will be about 4-5 seconds in this case. This duration gives better latency but less playback buffer and more bandwidth consumption as well as server resources' usage.
  • The smallest duration value allowed by the web UI is 500 ms because it's the minimum that makes sense in terms of low latency delivery. The latency will be around 2 seconds in this case. This duration gives very low playback buffer, severe bandwidth consumption and server resources' usage. Use it only if you have a managed network and latency is crucial for your case.
  • Part size smaller than 500ms does not make any practical sense because of the overhead in delivery and processing chain. Even though Nimble is able to produce smaller parts, we just don't want our customers to deal with potential bottlenecks in other areas.
  • You may align key frame interval with chunk size. E.g. for 6 seconds chunk and 1000ms part duration the valid key frame intervals would be 1, 2, 3 seconds. For same chunk size and part duration of 2000, the valid key frame intervals will be 1, 2, 3, 6 seconds.
  • Key frame interval can be set on your encoder side. Nimble Live Transcoder allows setting it as well.

Once LL HLS is enabled, you need to re-start the input stream so Nimble Streamer could start producing LL HLS output stream.

3. Workflow and playlists

Now as the set up has been made, you can use the player to consume the stream using the usual playback URL. The main playlist will have proper chunklists which will have a content according to LL-HLS spec. Here is an example of such chunk list (obtained via video.m3u8).


Parts in chunklist. Comparing to regular HLS, you see a lot of lines representing parts like this:
The full chunk which contain these parts will be described after all parts' lines:
All parts within chunks are numerated starting from zero. So "a_6_18006_3_0.fmp4" mean its the first part of chunk number 3.

Part length. This attribute declares a designated size of upcoming parts:
In this example it's 512 milliseconds.

Can block reload
. Check this line:
The "CAN-BLOCK-RELOAD" declares that media server allows holding playlist request.

Hold playlist request. LL-HLS allows requesting the server to hold sending out the playlist until a specific chunk and/or part is available for the stream.
So a player may request some part which is going to be available within a few seconds from now, then Nimble Streamer will check if that part is available. Once the requested part is ready, Nimble will return a playlist.

Check this request example:
curl -k "https://localhost:8443/livell/stream/chunks.m3u8?nimblesessionid=1&_HLS_msn=59&_HLS_part=5"
The highlighted _HLS_msn=59 and _HLS_part=5 parameters indicate that the server must hold the request until Nimble Streamer has part number 5 of chunk number 59 or later and then it could return a playlist. You can use only _HLS_msn=59 parameter, in this case the playlist will be sent out only once full chunk is available.

The resulting chunklist will look like this:



You can see it ends with part a_6_354006_59_5.fmp4 - it's part number 5 of the upcoming chunk 59. That chunk will be available only a few seconds later, but the player can already perform the playback, this helps a lot with reducing the latency.

Pre-load hint. Check this line:
Here Nimble declares that part 6 of chunk 59 is being created right at this moment. The player may request this part and it will get it as soon as that part is available.

4. Playback

Low Latency HLS is now supported in all Apple devices that are capable of HLS playback. So you can use an iPhone with iOS 14 to play this HLS even in your browser. We also have support for LL HLS in Larix Player for iOS which uses platform playback component.

Also, THEOPlayer has a test page with their implementation of LLHLS which is working in various other browsers on other platforms. You can read configuration guide to see how you can adapt THEO Player to your use case.

Other platforms do not have LL HLS support yet. Once we know of that kind of solutions, we'll mention them here.

5. Known issues and troubleshooting

5.1. Chunk duration and key frame alignment
If the playback has issues, you need to make sure that chunk duration is equal to the duration that you specified for your stream settings.

Let's check a couple of examples.
In this example we set up chunk of 6 seconds with part duration of 1000ms. So you see 6 parts for each chunk, and every chunk has equal duration:

Now check your chunk list. Get your playlist via URL like https://yourdomain.com/test/stream/playlist.m3u8 and then find the chunklist that corresponds to the video, like https://yourdomain.com/test/stream/video.m3u8. You can do that via various tools like "curl".

Check the following real-life example of LLHLS stream.
It has chunks of various durations which differ from the duration requested during the setup (you can see 4.338, 5.005 and even 10.01). This may cause some players to work incorrectly.
So your original stream source need to have proper key frames setup in order to produce playlists for smooth playback.

As you can see, LLHLS can be capricious when it comes to key frame alignment. So you have to make sure that your initial source stream is properly encoded and delivered prior to re-packaging into LLHLS. Reliable delivery protocols like SRT are excellent for the vast majority of streaming scenarios but this case may require additional efforts prior to transmuxing.
If you want to produce reliable output for last-mile delivery regardless of your source, you need to consider SLDP low latency protocol. We designed and implemented it having various real-life cases in mind and whatever you bring into Nimble Streamer, it will be properly played in SLDP-powered players.

5.2. Interleaving compensation
If you have video+audio stream you may have issues with playback due to interleaving as described in this article. This kind of issues becomes even more severe in case of low latency playback. In order to fix this you can try enabling interleaving compensation with Min. delay set to zero, see the image below.

Feel free to try Nimble Streamer with Low Latency HLS and let us know if you have any questions.

November 22, 2020

BuyDRM KeyOS support in Nimble Streamer

Softvelum team is glad to announce that Nimble Streamer DRM framework now supports BuyDRM KeyOS DRM solution for protecting the content using Widevine, FairPlay and Playready encryption technologies.

In order to use KeyOS, please follow setup instructions on Nimble DRM page and let us know of any questions.

November 20, 2020

Nimble Streamer on Amazon EC2: installation and SRT setup

We've released a new video tutorial about Nimble Streamer on Amazon EC2.

In this video we do the following:

  • create Amazon EC2 instance;
  • install Nimble Streamer there;
  • set it up to receive SRT stream;
  • run vMix to publish SRT stream;
  • test the playback via HLS, MPEG-DASH and SLDP.

You can watch it now:

Feel free to subscribe to Softvelum YouTube channel to watch more videos as they come out.

November 18, 2020

Nimble Live Transcoder API

Nimble Streamer Live Transcoder add-on has a convenient web UI allowing to control transcoding scenarios and pipelines via browsers. However many customers need even more flexibility so they'd like to use API to control server behavior.

WMSPanel control API now has Transcoder scenarios section which provides a list of methods to control Live Transcoder behavior via API calls.

The overall approach for Transcoder API usage is as follows.

  • Use web UI to create some general-purpose scenarios which you consider as templates. You may use your existing scenarios as well. The rest is done via the API calls.
  • Clone a designated scenario on the same server. This is what you will change via further API calls.
  • Apply any scenario to multiple servers just like you would do via the web UI by making its update and setting servers_to_apply parameter in your call.
  • Besides an update, each scenarios can be paused, resumed and even removed.
  • Each scenario has its video and audio pipelines (you can see them via UI) and you can remove them if they are not needed in some particular case.
  • For each pipeline, you will be able to change applications and streams names for encoders input and decoders output.
  • For each pipeline you can change some basic parameters of existing filters.

This way you may create some general purpose scenarios, pause them to make them to be templates, then clone a many as you want and then narrow them to specific cases.

Read more about WMSPanel API and transcoder control API methods on API reference page.

In addition to that, take a look at Transcoder documentation reference just to see if you've missed some of latest features. Our YouTube channel has Transcoder playlist with video tutorials on some popular use cases.

If you have any questions regarding the Transcoder or its API, please feel free to contact our heldpesk.

November 2, 2020

DRM-powered DVR in Nimble Streamer

Earlier this year we introduced DRM support in Nimble Streamer which included Widevine, Playready and FairPlay encryption support for MPEG-DASH and HLS live streams. Our customers like using live streaming along with DVR functionality which allows recording their streams for later playback via HLS and DASH.

Nimble Streamer now combines these two feature sets into one, allowing to encrypt recorded live streams when providing their playback.

When a viewer connects to MPEG-DASH or fMP4 HLS stream within an application protected by the DRM, its output will be encrypted with respective DRM engine, it's that simple.

Also notice that DVR DRM covers CENC-based encryption for MPEG-DASH and fMP4 HLS.

For DRM setup details visit DRM feature set page.

For DVR setup please refer to this digest page and to this DVR setup article as example.

Watch this video tutorial showing EZDRM setup for live, DVR and VOD content protection.

Contact us if you have any questions regarding this feature.