December 24, 2018

2018 summary

The New Year of 2019 is approaching so it's time to look back at what Softvelum has accomplished.
We've had an interesting year as you will find out below.

First, take a look at a few numbers in our State of Streaming Protocols for 2018, our customers stream more each year and we're excited to see continuous connections number growth.

We had a couple of publications which you may find interesting:

Speaking of streaming use cases, this year we started making series of "snapshots" to show how Softvelum products can be used for real-life streaming scenarios. As example, check first case study with mobile-to-mobile delivery chain or "power origin" approach to building CDN. Let us know if you'd like to see more scenarios covered like that.

Nimble Advertizer


The biggest start of this year is Nimble Advertizer. It's a live streaming server-side ads insertion (SSAI) framework for Nimble Streamer media server.

Key features of Advertizer are:
  • Pre-roll ads per each connection.
  • Mid-roll ads flexible timing setup.
  • Per-stream ads insertion business logic.
  • Personalized ads based on users' IDs.
Advertizer supports HLS, RTMPSLDP and Icecast protocols output. It supports both video+audio and audio-only modes. Advertizer may use all input live protocols supported by Nimble Streamer, which are RTMPRTSPSRTUDTHLSMPEG2TSIcecast and SHOUTcast.

The workflow is easy to adopt within any business logic:
  1. Nimble Streamer media server processes incoming streams to get the content.
  2. Nimble Advertizer calls your handler web application to get business logic description.
  3. Advertizer gets files with advertisements to process them via Nimble Streamer according to your logic defined via handler.
  4. Nimble inserts the ads into original media and packages it into output protocol.
  5. End user connects to Nimble and gets the stream containing original content mixed with advertisements.
  6. Playback is running smooth regardless of ads insertion over time in any player which supports the output protocol.
You can read full technical spec for more information. Also Nimble Advertizer demo shows simple ad insertion scenarios for HLS/RTMP/SLDP/Icecast in action, with all setup details.

SLDP


Softvelum Low Delay Protocol was introduced in 2017 and this year it's been widely adopted among our customers as a replacement for RTMP low latency delivery.
It's now gaining momentum since Adobe announced that it's going to decline Flash in 2020 which will cause elimination of Flash-based RTMP playback. Major browsers will also decline its usage in 2020 so those who need to have low latency real-time streaming, will have to choose other technologies.

SLDP is a great replacement with its sub-second latency, buffer control, adaptive bitrate and multiple codecs support. Based on WebSockets, it allows playback on MSE-enabled browsers with our HTML5 player, as well as mobile playback on iOS and Android devices with our free apps. Early next year we'll introduce more details on transition from RTMP to SLDP for your ultra-low latency, so stay tuned for our blog and social networks.

Meanwhile, CDNs start adding WebSockets support which allows SLDP delivery natively through their networks. Take a look at CloudFront WebSockets delivery setup with Nimble Streamer as example of such support.

We've been improving SLDP protocol through this year to make it a great solution for RTMP playback replacement.

Nimble Streamer


Besides Advertizer and SLDP, Nimble Streamer also got a number of improvements.

The aforementioned Jan Ozer article How to Create a Live HLS Feed With HEVC refers to fMP4 container support for live streaming. In addition to fMP4 support for live streams, Nimble now has VOD support for fMP4 HLS. So if your customers use latest iOS version, you could use that container for both live and VOD to optimize your distribution costs.

Our customers have been requesting more features regarding end-users connections control. Nimble Streamer now supports sessions authorization via external handler to decide which of the connecting users may continue receiving the stream. Player connects to Nimble Streamer instance via any stream URL, then Nimble reaches the external handler which returns response to define further behavior of the server.
This gives even bigger flexibility to paywall feature set which allows building monetization solution for your content.

Nimble Streamer now has DVR thumbnails generation as JPG files and as single-frame MP4 files, this helps showing preview for any point in recorded stream.

Mobile products


Our mobile solutions are being improved all the time following customers' feedback.

Larix mobile SDK now supports SRT streaming from Android and iOS devices. Nimble Streamer had SRT support for a couple of years so far, so adding that protocol to a mobile publishing SDK has been highly anticipated.

Modern devices are getting support for HEVC (H.265) encoding, so Larix apps and SDKs have support for it as well. You'll need to use RTSP or SRT protocols as a transport for it, as RTMP has no HEVC support.

Latest mobile devices also have high frame rate, e.g. 60fps, so Larix has that for both for iOS and Android on those devices which have that feature support. On Android phones you can now select fixed or variable frame rates, depending on current device capabilities - that's crucial for some transcoding solutions.

SLDP Player for Android and iOS now has Icecast support to give playback capabilities for numerous online radios.
In case you use HTML5 browser player on iOS and have any issues, take a look at SLDP iOS Player fallback setup.

Minor improvements and updates were continuously added to both products during entire year.


We have a couple of new products to deliver for you next year, so stay tuned for updates and we'll continue providing the best possible improvements to help you grow your business.

Our team wishes you a Happy New Year!

The State of Streaming Protocols - 2018 summary

Softvelum team continues analyzing the state of streaming protocols. It's based on stats from WMSPanel reporting service which handles data from Wowza Streaming Engine and Nimble Streamer servers.

In 2018, WMSPanel collected data about 48 billion views.
We also added a new metric - total view time for our server products. It's nearly 6.7 billion hours.
On average, there were 3600 to 3900 servers under WMSPanel observation at any moment of time.

Let's take a look at the chart and numbers of this quarter:

The State of Streaming Protocols - 2018

December 23, 2018

DVR JPEG thumbnails in Nimble Streamer

DVR feature set in Nimble Streamer covers the majority of use cases for streams recording and playback, its setup is described in this article.

We've recently introduced MP4 snapshots of DVR stream which you may use directly via URL or certain kind. MP4 output was chosen over JPG images due to resources usage. MP4 frame can be extracted and inserted into MP4 container with relatively small amount of CPU and RAM. Thumbnails are generated as .mp4 files containing a single key frame. This allows inserting thumbnail in any modern browser using <video> element.

When it comes to saving still image snapshots via JPG, it requires frame decoding and encoding into proper format. That's why you'll need Nimble Streamer Live Transcoder to be available at your DVR server.

Install Live Transcoder and enable thumbnails


Nimble Streamer uses decoding and encoding libraries from Nimble Live Transcoder to get the image from the stream and then encode it into JPG.
So to get his feature working, first you need to install Live Transcoder and subscribe for a license. Once you've installed Live Transcoder and registered the purchased license, you can enable this feature in DVR settings.

Go to Nimble Streamer menu and click on Live streams settings. Once you open settings, go to DVR tab to see your DVR settings. To enable JPG thumbnails, open your stream DVR setting, click on Advanced settings and scroll to Generate JPEG thumbnails checkbox.

Enabling JPG thumbnails generation.
Check that box to enable the feature and use Thumbnail width and Thumbnail height edit boxes to specify dimensions of images. If you leave them as 0, Nimble will save full-size images. If you specify exact values, they will be used for every thumbnail. Another option is to specify only one of those dimensions, in this case, the image will have both sides proportional to each other. E.g. if you set up Thumbnail height to 480 with width set to 0, this will produce thumbnails with 480 height and proportional width, whatever it is for the original image.

Once you start recording any stream via DVR with the feature enabled, it will generate a JPG thumbnail for every recorded segment, its length is defined during the DVR setup. A thumbnail will be a key frame picture at the start of the corresponding segment. Notice that thumbnail generation takes time depending on your hardware so for large resolutions it might take a few seconds. However small resolutions on powerful hardware will allow generating it within a split of a second.

Get thumbnails


Now when DVR is working and pictures are generated continuously, you can get them using the followings URLs.

Latest available thumbnail can be obtained using this type of URL:
http://<server>/<app>/<stream>/dvr_thumbnail.jpg
If you'd like to get specific time spot, add epoch time:
http://<server>/<app>/<stream>/dvr_thumbnail_<utc>.jpg
E.g. http://serverip/live/stream/dvr_thumbnail_1542708934.jpg. In this case Nimble Streamer will return a key frame image at the start of the corresponding segment.

Optimization


If you see that your DVR thread is consuming too much resources, you can add working threads by using thumbnail_transmuxer_threads parameter. Read this article for more details about Nimble configuration. By default, this parameter's vaule is "1".

You may also find useful the API call for DVR export to MP4.

If you have any questions on this or other features, let us know.

Related documentation


Nimble StreamerLive streaming scenariosDVR feature setDVR setup for Nimble StreamerUsage snapshots