November 20, 2019

HTTP/2 in Nimble Streamer

The Internet as we know it was created on top of HTTP versions 1.0 and 1.1, with HTTP/1.1 being dominant for the last 20 years. The growing demand for new features and capabilities showed several cavities in it and they were addressed in HTTP/2, which has been developed and adopted as a successor for 1.1. You can read the Introduction to HTTP/2 by Google team to see what exactly HTTP/2 has to offer.

At the moment HTTP/2 is supported in all modern browsers and every time users are trying to reach some resource on the Internet, their browser tries to connect through this new protocol version. If it succeeds then all further collaboration is performed via this new channel. If HTTP/2 in unavailable then the browser switches to HTTP/1.1.

Softvelum team has implemented HTTP/2 for some of Nimble Streamer output HTTP-based protocols to provide our customers with one more advantage for their end-users and establish the ground for further development.

HTTP/2 in Nimble Streamer


Nimble Streamer now has support for HTTP/2 protocol in most popular live streaming scenarios. No change to input streams is required, you only need to enable the feature as described in "Enabling HTTP/2" section below.

HLS

HTTP Live Streaming (HLS) by Apple is a de-facto standard for end-user media consumption so we implemented full live streaming support for HTTP/2:

  • Live HLS streams with fMP4/CMAF, MPEG-TS and audio-only containers are fully supported.
  • Ads insertion in live HLS via Nimble Advertizer is working fine as usual.
  • HLS DVR output works fine with all of its features.

MPEG-DASH

Live MPEG-DASH streams can also be played via HTTP/2. Both HLS and DASH output can be generated from the same live input so having HTTP/2 enabled, you can get two outputs through it.


Other protocols

At the moment only aforementioned protocols live streaming is supported via HTTP/2. HTTP re-streaming, VOD, Icecast and HTTP MPEG-TS will be processed only via HTTP/1.1.

Enabling HTTP/2


HTTP/2 can be used only when Nimble Streamer streams over HTTPS, so in order to make it process HTTP/2 requests, you need to do the following.


After that you'll be able to use HTTP/2 to reach live streams with HLS and MPEG-DASH protocols enabled.

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. We've made several contributions to LS-HPACK code base and we plan to continue that support as long as we move forward in our HTTP/2 development.



Let us know if you have any thoughts or feedback regarding HTTP/2-based streaming.

Related documentation


Nimble StreamerNimble AdvertizerHLS in Nimble StreamerMPEG-DASH in Nimble Streamer

November 6, 2019

Wowza Streaming Engine and WMSPanel agent upgrade

Wowza Media Systems has just released Wowza Streaming Engine version 4.7.8 which has a big set of major updates. Softvelum has a wide feature set for this media server so we keep our software up-to-date with all new changes.

After this release, if you install WMSPanel agent using common procedure then it will work fine on any Wowza Streaming Engine version.

If you have WMSPanel agent installed on your server already then it will stop working after this Wowza update.

So if you plan upgrading to the latest Wowza engine release, please follow these steps:
  1. Upgrade Wowza Streaming Engine per Wowza instructions.
  2. Upgrade WMSPanel agent for Wowza using this procedure: https://wmspanel.com/docs/wowza_upgrade
The new WMSPanel agent version number will be no less than 4.0.0.10308 after that.

This will make a smooth transition from WMSPanel reporting viewpoint.

Please contact us if you have any issues or questions.

WMSPanel API to control push API

Nimble Streamer provides various push APIs which allow controlling the streaming process such as Publish controlPay-per-view or playback authorization.

Typically you set those APIs settings via web UI by opening "Control" -> "API setup" menu.

And now we have API for API setup! You can use "Push API settings" API methods to perform control by making API calls. Please open the respective section of API reference.
It has the following methods:

  • Get global push API settings gives parameters of "Global push API" tab.
  • Set global push API settings sets parameters for "Global push API" tab.
  • Get list of servers push API settings gets list of servers from "Servers push API" tab.
  • Get server push API settings gets parameters of selected server.
  • Set server push API settings sets parameters for a server.
  • Remove server push API settings removes parameters.

So having those you can dynamically control your push API based frameworks.

You can check our Nimble Streamer configuration reference page for more API descriptions.

Related documentation

November 5, 2019

SRT playback support in SLDP Player

SRT became a popular transport protocol for live streams secure delivery over unreliable network. Softvelum team has been an active contributor to SRT open source community being part of SRT Alliance.

Softvelum products lead products have full support for SRT:

  • Nimble Streamer, a software media server, has rich SRT feature set for receiving and sending live streams via all available transmission modes.
  • Larix Broadcaster, Larix Screencaster and Larix SDK allow streaming from Android and iOS to multiple destinations, including those which support SRT input.

Now we introduce SRT playback support in SLDP Player for Android and SLDP Player for iOS.

Mobile SLDP Players provide low latency consumption of SLDP, RTMP, Icecast, HLS and MPEG-DASH and adding SRT gives more flexibility, robustness and reliability for end-user last-mile playback.

You can get SLDP Player free app in Google Play and AppStore.

SRT can be obtained via SRT Pull mode, so you need to make sure your source media server or streaming service has SRT Listen mode enabled for the output stream. Read SRT setup description for Nimble Streamer to see how it can be set up there.

The player setup is easy, just open the application, add new connection and enter your stream with srt:// protocol prefix. Once you save it and tap on it, it will connect to your server and will start playing the stream.

 


Let us know if you have any questions or suggestions regarding SLDP Player.

October 7, 2019

Enable hardware acceleration for Intel Quick Sync on Ubuntu

Nimble Streamer Transcoder supports Intel® Quick Sync technology for encoding acceleration using Intel® processors feature set. Nimble Streamer allows using Quick Sync as AVC/H.264 video encoder in transcoding scenarios.

Once you have Quick Sync installed, the encoding becomes available in our Transcoder.

The instructions below describes how to enable hardware acceleration on Ubuntu 19.04 and later releases.

Install required packages


Run the following command to install required packages on Ubuntu:
sudo apt-get install intel-media-va-driver-non-free libmfx1

Notice hat they are available on 19.04 and later releases.

Set up Nimble Streamer Transcoder


Follow Transcoder Ubuntu installation procedure to install it on your server.
Use Ubuntu 18.04 instruction there as it works fine on 19.04.

This articles describes how to use this encoder: H.264/AVC QuickSync encoder parameters.
After that you'll be all set to use Intel acceleration on Ubuntu with our live Transcoder.


If you face any questions, feel free to contact us for any questions.

Related documentation


Live Transcoder for Nimble Streamer, Live Streaming features, Transcoder support for Intel® Quick Sync,  Enabling hardware acceleration on CentOSEnabling hardware acceleration on Windows,

Intel is a trademark of Intel Corporation in the U.S. and/or other countries.

October 1, 2019

Stream availability push API notification

Nimble Streamer provides a variety of APIs and frameworks, including Publish control, Pay-per-view and playback authorization framework, along with other solutions.

Now this tool set has event notifications for incoming live streams' availability, like RTMP and RTSP publish/unpublish events, MPEG-TS streams, Icecast pulled streams and also Live Transcoder output. Nimble Streamer can inform you about the start of stream ingestion and stop of incoming stream.

Why we implemented this as a push API which notifies your handler about all live streams; behavior.

If you want to use the notifications API, the major steps for usage are as follows:
  1. Create a processing script on your web site.
  2. Specify a processing script URL via WMSPanel UI.
  3. Test the solution.
After that, your script will be automatically called each time your Nimble Streamer instances gets proper events.

Let's go step by step to see what you need to do.

1. Create a processing script


Nimble Streamer uses POST request to call your URL. Your script MUST get request body first.

Request body will look differently for different types of calls. Here are examples, with additional formatting, the fields are described below.

RTMP is published into Nimble:
{"ID":"c581b1c2-686a-8140-8deb-f44031fa393f",
  "Signature": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTg",
  "Puzzle": "42342-33434-343434-34343",
  "publish":[{
      "stream":"live\/4k",
      "protocol":"RTMP",
      "time":1569999976249,
      "type":"push",
      "remote_ip":"127.0.0.1"
    }]}

Nimble started receiving output from Live Transcoder:
{"ID":"c581b1c2-686a-8140-8deb-f44031fa393f",
  "publish":[{
      "stream":"live\/4k_ao_aac",
      "protocol":"ENCODER",
      "time":1569999976374,
      "type":"pull"
    }]}

Icecast stream is not pulled anymore:
{"ID":"c581b1c2-686a-8140-8deb-f44031fa393f",
  "unpublish":[{
      "stream":"live\/4k",
      "protocol":"ICECAST",
      "time":1570000823258
    }]}

Two major types of calls are available:

  • "publish" means that the incoming live stream has appeared in Nimble Streamer input.
  • "unpublish" means the stream is not in the input of Nimble Streamer anymore.

The following fields are used:

  • "stream" shows application and stream name in the call.
  • "protocol" is one of the following values: RTMP, RTSP, ICECAST, MPEG-TS (which covers MPEGTS and also pulled HLS) and ENCODER (output stream of Nimble Live Transcoder)
  • "time" is publish/unpublish event epoch time in milliseconds.
  • "remote_ip" is provided in case the stream is a published, it shows the IP of the publisher.


"Signature" and "Token" is what your script MAY check to make sure that it was Nimble Streamer who sent it.
Signature = BASE64(MD5(ID + Puzzle + Token))

You can find a small PHP sample of processing the incoming request in out github samples repo.

2. Set up API in WMSPanel


2.a Global setting

Go to Control / API Settings and choose Global push API tab.



Here you need to use two fields:
  1. Enter handler URL into Streams (un)publish handler URL field;
  2. Click on Enable publish/unpublish notifications checkbox.
After you click Save, the first sync-up will be sent to your handler within several seconds.

API parameters also include Token field as well as Enable mutual authorization check box. Those should be used if you'd like to use signature as described in section 1 above.

2.b Server instance setting

You may also make per-server setup. Just click on Servers push API tab to be able to define same settings for each individual server.

3. Test the complete solution


Now you can set up a testing stream or use existing one to try this feature. Just publish that stream to and get notified by the panel via the script. In the github example above you'll get a new log entry.

WMSPanel provides a test handler you can use for trying your calls. You'll be able to debug your scrip real-time.

Once you test it, you can use it in production together with other API features and frameworks.

Related documentation


Nimble Streamer, RTMP streaming in NimbleWMSPanel API reference, github API code samples

September 30, 2019

2019 Q3 summary

This quarter our team kept improving our existing products and rolling out new ones.

Before moving to certain updates, take a look at these useful articles which give broad view on our products' capabilities:


Let's go to specific pieces, there's a lot to take a look at.

Qosifire updates and free check-up

We keep improving Qosifire live streaming quality monitoring service.


Feel free to sign up and try Qosifire in action.

Larix Screencaster for iOS

We're glad to announce our new application - Larix Screencaster for iOS. It allows capturing the screen and audio of iOS device for further encoding and transmission, and has all streaming capabilities of Larix Broadcaster. Read this article to learn more about setting up iOS screencasting.
The source of iOS Larix Screencaster will be available in the nearest release of iOS Larix SDK. So if you're a subscribed SDK customer, you'll have it as soon as it's out.

We've also updated SLDP Player for Android to add HLS and MPEG-DASH playback via ExoPlayer for convenience of usage and media testing.

Also check latest information about our mobile solutions here.

Upgrades

We always recommend our customers to keep up with our software updates and upgrade Nimble Streamer accordingly.

With recent update of Live Transcoder, we require to make upgrading both Live Transcoder and Nimble Streamer at the same time. We use FFmpeg for decoding and filtering operations and we moved from FFmpeg 3 to FFmpeg 4, hence the correlated upgrade.
So if you have Live Transcoder and you plan upgrading your Nimble Streamer, please follow this upgrade instruction.

NVENC users has had some issues with upgrading NVidia drivers. So we made this detailed instruction which we recommend using during your upgrades.


SCTE-35, DVB and Icecast processing and pass-through

We've released a number of features for Nimble Streamer and Live Transcoder to cover cases when we get some data on top of media stream.


Other Nimble Streamer updates

There were a bunch of features and updates that will be important for many customers.


Last but not least, take a look at The State of Streaming Protocols report for 2019 Q3 showing (no surprise) the domination of HLS.

We'll keep updating you with our new features and products, stay tuned.

The State of Streaming Protocols - 2019 Q3

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 - there were 4000+ servers on average this quarter. WMSPanel collected data about more than 14.5 billion views. Total view time for our server products is 2 billion hours this quarter, or 21+ million view hours per day.

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

The State of Streaming Protocols - Q3 2019

You can see HLS and RTMP shares are still bouncing around 77% and 8% while other protocols shares haven't been changed much.

You may compare that to the picture of Q2 streaming protocols landscape:

The State of Streaming Protocols - Q2 2019

We'll keep analyzing protocols to see the dynamics. Check our updates at Facebook and Twitter.

If you'd like to use these stats, please refer to this article by original name and URL.

Manual ingest of Icecast metadata into RTMP via API

Nimble Streamer can re-package incoming RTMP stream into outgoing Icecast stream, it's part of our extensive audio streaming feature set. Besides just processing an Icecast stream, Nimble Streamer can handle Icecast metadata in various scenarios, from pass-through to setup via UI and passing Icecast metadata via RTMP.

Now you can also ingest Icecast metadata into any incoming live stream any time via Nimble Streamer native API call, which makes it a real-time metadata injection. Currently only "streamtitle" and "streamurl" metadata parameters are supported. Once the metadata is ingested into the live stream, that data can be used for all RTMP- and Icecast-related scenarios as shown later in this article.

1. Enable RTMP Icecast metadata


To use this real-time injection you need to enable RTMP Icecast metadata feature first.

Follow "Generating Icecast metadata from RTMP" article to set up the processing of Icecast metadata in RTMP for further usage. Basically it's a matter of one checkbox in WMSPanel UI for given server instance or for some specific application.

Once this feature is enabled, any incoming stream will 

2. Enable Nimble API


Nimble Streamer native API allows working directly with server instance in order to get its status and control its behavior in some cases.

To start using it, you need to enable it on server side via configuration file. Please follow Pre-setup section in Nimble Streamer API reference to proceed. Once you have properly set up server, you can run the ingestion.

So whatever app or server you will enable this feature for, the incoming stream will get the metadata which you later will be able to transfer and process via RTMP.

3. Perform the injection


At this point we assume that you have a live stream to ingest metadata into, let it be "live" application and "radio" stream.
Then assuming your management interface is 127.0.0.1 and port is 9999 you can make this POST call:
curl -vvv http://127.0.0.1:9999/manage/icecast_metadata/live/radio -d "{\"streamtitle\":\"News\", \"streamurl\":\"URL2\"}"
This includes /manage/icecast_metadata method with for live/radio stream and set streamtitle and streamurl metadata parameters.

If you don't need to set streamurl you can run it this way:
curl -vvv http://127.0.0.1:9999/manage/icecast_metadata/live/radio -d "{\"streamtitle\":\"News\"}"
to apply streamtitle only.

You can find more about this and other native API methods on API reference page.

Further usage


As we've mentioned before, this metadata injection API call allows adding that data into the live stream, as if it's been ingested by some encoder before that stream entered into Nimble Streamer instance. This means that you may use ingested metadata in any output RTMP or output Icecast processing use case like those:
RTMP will still carry the data outbound as you need.


Contact us if you have any questions regarding any of our features.

Related documentation


Nimble Streamer APIAudio streaming feature setRTMP support

September 5, 2019

Larix Screencaster for iOS - live streaming from any app

Softvelum provides a number of solutions for mobile streaming and playback.

Today we introduce Larix Screencaster for iOS.

Larix Screencaster application allows capturing the content of user device and streaming it to the target media server or service. The list of supported protocols includes RTMP/RTMPS, RTSP/RTSPS and SRT, you can stream AVC/H.264 and HEVC/H.265.

Install Larix Screencaster here.

The setup of streaming is similar to Larix Broadcaster, you can read documentation reference for connectivity details.

As for the screen recording part, Apple requires additional setup:

Please study these sources to perform the setup.

Let us know if you have any questions regarding Larix Screencaster or other mobile solutions.