May 30, 2017

Using SLDP with Nimble Streamer

Recently we introduced new real-time low latency protocol called SLDP. It allows sub-second delay for live streaming delivery for the cases when it's truly important.

From the setup perspective it's just another output protocol from the list of supported once which you can see on our live streaming digest page.
However, let's see how it can be added to your streaming scenarios based on Nimble Streamer, step-by-step.

1. Install or upgrade Nimble Streamer

The installation is simple, please follow installation page to get a working instance. If you have old Nimble version, please upgrade it..

This also assumes that you have an active WMSPanel account where you've logged in successfully.

2. Incoming streams

Nimble Streamer can take input streams via RTMP, RTSP, MPEG-TS, SRT, Icecast and HLS. Let's see basic ways of getting live streams by publishing RTMP from Open Broadcaster Studio, RTSP from Larix Broadcaster and SRT from SRT-enabled encoder.

Once the settings are compete, you need to set streaming settings in Nimble Streamer, check section 3 for details.

2.a Publish RTMP from Open Broadcaster Studio

Customers who use RTMP publishing, typically want to use authorization. Nimble Streamer supports only URL authorizations for RTMP (due to patent restrictions), which means credentials will be included in connection string in a certain way.

The URL will look like this:
In Open Broadcaster Studio you need to do this:
  1. Go to Settings -> Stream.
  2. Choose Streaming Type: Custom Streaming Server.
  3. Fill the URL as: rtmp://<server_name>:1935/<application_name>
  4. Fill the Stream key with your stream name.
  5. Click on Use authentication checkbox and when you see additional fields, just add login and password information there.

Server name will have either IP address or domain name you chose to use. Port can be set to a different value other than 1935 - this can be defined in Nimble Streamer settings.

Here's an example of parameters in OBS.

This example sets up URL for application called live_app and stream name called live_stream.

2.b Publish RTSP from Larix Broadcaster

Larix Broadcaster free mobile application allows streaming from Android, iOS and WinMobile devices, it supports RTMP, RTSP and SRT transport protocols.

Here's an example of RTSP setup.

Install the app using one of the links here, then open it and click on gear icon to enter Settings window. Tap on Connections and then New connection menu to open new connection settings dialog.

The connection string will look like this:
Publishing credentials are added in separate fields. Check the screenshot below to see an example:

Once you save connection settings, you'll be able to start streaming.

If you use other software and need RTSP credentials in your connection string, you can insert them like this:
This will pass the required credentials.

2.c Push SRT from Haivision encoder

SRT is a low latency UDP-based transport technology that optimizes streaming performance across unpredictable networks. Nimble Streamer has full support for SRT and is able to take SRT input from any devices or software which supports this protocol.

Reliable Low Latency Delivery with SRT+SLDP guest post in Haivision blog gives example of setting up SRT delivery to Nimble Streamer, including further playback setup.

3. Setting Nimble Streamer

3.a Set up RTMP and RTSP input

From Nimble Streamer control perspective, SLDP is just another output protocol which needs to be enabled either for entire server or for specific application.

Notice that if you use published RTMP or announced RTSP as a source, you will need to re-publish the stream after enabling the protocol. Any newly applied protocol is enabled only when on the stream's start.

Click on Nimble Streamer -> Live Streams Settings menu. You will see Global tab for server-wise settings.

If you define only global settings, you will be able to bring any RTMP or RTSP input streams to your Nimble Streamer instance. Nimble will produce output streams according to applications and streams names - see section 4 below. If you specify values for Push login and Push password fields.

To enabled SLDP output for streaming output, click on Softvelum Low Delay and save settings to enable SLDP output.

You can also click on Applications tab to define specific settings for different applications in case you'd like to separate streams by some criteria.

Click on edit icon to see app details dialog.

Check Softvelum Low Delay and save settings to enable it for this particular application.
As we noticed earlier, you need to re-publish the stream after enabling the protocol if it uses a publishing source.

Another important step is to define interfaces to be used for processing the input streams, e.g. addresses and ports. In our examples in Section 2 we used port 1935 for RTMP and 1937 for RTSP.

Go to Interfaces tab and click on Add RTMP interface and Add RTSP interface buttons to set pairs of IP addresses and ports. If you don't specify IP, it will be mapped to all addresses available for current server.

Here you can see 2 interfaces added for both protocols.

3.b SRT input setup

If you use SRT input, you should refer to this article or guest blog post for more details. It needs different approach to defining input and output.

3.c Setting ABR

SLDP supports adaptive bitrate and it needs to be set up before any usage. If you have multiple bitrates of the same stream, you will be able to group them into ABR streams. If you have just a single input, you'll use Live Transcoder to create multiple resolutions.

Read this article to see all the details.

3.d Other features

Nimble Streamer Paywall feature set supports SLDP just as all other protocols. So if you apply geo-location block to some application, its SLDP streams will be blocked properly, the same is valid for other blocking features.

If you create hotlink protection rule, you will need to select SLDP to protect it from re-streaming.

Also, check playback session authorization which allows using external handler to process incoming connections according to your business logic.

4. Play SLDP

4.a Basic playback

SLDP is available for playback in our players on HTML5 web pages, in Android and iOS (both iPad and iPhone).
The link will be similar to other URLs
To see a sample URL, click on Nimble Streamer -> Live Streams menu, select proper server and then click on Outgoing streams area to see all produced streams.

Then click on question mark to see Sample URL for Player dialog.

It will include full URL of stream and also a sample code for HTML5 SLDP player.

As mentioned above, you can play it in Android and iOS applications in addition to HTML5 player. You may also want to build your own apps with respective SDKs.

4.b ABR streaming

SLDP supports adaptive bitrate streaming, so both Nimble Streamer and our web player has full support for ABR.

ABR setup is described in this article so follow its instructions to create proper streams. Please also take a look at SLDP real-time ABR feature review.

4.c Using SSL connection

SLDP can be secured with SSL and it's set up the same way as other HTTP protocols which Nimble Streamer supports. Read this article for all details regarding the setup.

The output URL for SSL connection will start with wss:// prefix, e.g. wss://server_name/app/stream.

4.d Synchronized playback

Synchronized playback can be performed using SLDP on multiple devices with HTML5 player and Larix Player for iOS.

4.e Closed captioning

CEA-608/708 subtitles are supported in SLDP using HTML5 Player premium SDK.

DVR in SLDP HTML5 Player

HLS DVR streams can be added to SLDP HTML5 Player for rewinding low latency streams.

Useful articles

Take a look at the answers for frequent questions to improve your SLDP usage.
Also, please read Reliable Low Latency Delivery with SRT+SLDP post in Haivision blog describing a combination of both protocols for building reliable delivery networks.

Check Opus audio support in SLDP and Play audio-only SLDP with Opus on iPhone articles as well.

Please visit SLDP website and contact us in case of any questions.

Related documentation

May 23, 2017

Introducing SLDP

Low latency has been a trending issue during past years as Flash and RTMP are being deprecated by the industry. So media streaming companies are trying different options to handle real-time video and audio delivery. Our company are getting requests about providing the solution which might address this concern.

We introduce SLDP: Softvelum Low Delay Protocol.

It's a last-mile delivery protocol to end-user devices at multiple platforms. SLDP is based on WebSockets.

It's basic capabilities are:
  • Sub-second delay between origin and player.
  • Codec-agnostic to play whatever your end-user platform has - H.264, VP9, HEVC.
  • ABR support with switching channels taking just a GOP time and each channel may use its own codec.
  • HTTP and HTTPS on top of TCP: use it with any network settings.
SLDP HTML5 playback is available in MSE and MMS browsers via light-weight JavaScript player. It works fine in Chrome, Firefox, Safari, Chromium and Microsoft Edge on the hardware platforms which have that support, like PC, Mac, iOS (iPad and iPhone), Android.

As for server side, at the moment SLDP transmission is available Nimble Streamer. It's just another protocol output supported by our server. Any supported live protocols can be used as an input.

Feel free to try it in action right now by installing or upgrading your Nimble instance and selecting SLDP in live streams settings besides existing methods.

Please visit SLDP website and contact us in case of any questions as we're moving on with SLDP so your feedback is appreciated.

Related documentation

May 5, 2017

FAQ: Why are you better than your competitors?

Our trial users often ask us similar questions like "How are your solutions better than competitors' products? What are your benefits and advantages over products X, Y or Z? Why should I choose you instead of competitors?"

So basically the question is "Why do you think you are better than your competitors?"

The short answer is simple: You tell us why.

OK, let us give you more detailed answer.

Your project needs tools for media streaming, such as a media server, or a transcoder, or a mobile broadcasting solution. So you make a list of your own requirements and your perfect solution must comply with them.

The next step for you is to make a list of solutions you'd like to try before making your choice. Each product category has several candidates these days but the list will not be huge anyway.

Now the real work starts. You should install and try every candidate solution you find proper. Yes, install it, set it up and run your own test use cases and scenarios.
You should take a look at these areas of expertise:

  • Feature set. This is what you're actually looking for the most. All solutions on the market have ~80% of their functionality be the same. Some solutions are unique in their own area of expertise - and that 20% difference might be something needed for your project. And of course you need to check every feature you want to use, don't trust marketing materials.
  • Cost of ownership. Both CAPEX and OPEX should be considered, including license cost, hardware cost, consultants pricing etc. You must know your total expenses and revenues better than anyone, so use simple math instead of salesforce to help you.
  • Support and documentation. You should carefully check how each company support team handles your requests. You may need their help in future so need to be sure they will help accurately and on time. You don't want that documentation to be outdated and you expect it to help, not to confuse. Ask questions to support team in case if docs cannot clarify some points. 
  • Legal questions. Make sure the selected products have appropriate license agreements for used patents and technologies. Like we have. You don't want to find yourself in the middle of a lawsuit for patent infringements.

All these points matter, so you should carefully check them.

If you ask anyone about their solutions instead of trying yourself, you will probably be told lots of good things but no one's advice can compare with your own experience.

Trust your conclusions, don't listen to anyone, make your own decisions and decide what's best for you.

Another important point is that you should not rely on a single solution or tool set, you need to be familiar with several solutions. You can use them as soon as your requirements change or if any current solution becomes compromised or its support becomes discontinued.

Hopefully we answered your initial question.

Take a look at this page regarding adoption of our products and if you still have something to ask, just contact us.

May 3, 2017

Encoding to MP3 with Nimble Streamer Live Transcoder

MP3 audio format is widely used besides AAC. In April of 2017, the last patent related to MP3 expired. So it can now be used with no royalties or other limitations as part of audio processing and transmission scenarios.

Our Live Transcoder now allows taking various audio formats as input, such as

  • AAC
  • MP3
  • MP2
  • Speex
  • PCM G.711 (a-law and μ-law)

The output audio formats now are

  • AAC
  • MP3

So you can now easily transcode AAC to MP3. You can also apply various audio filters like re-sampling, transrating or audio channels manipulations.

This can be used as part of Nimble Streamer audio streaming capabilities.

Let's take a look at a simple scenario which takes incoming video+audio stream and transcodes audio into MP3, regardless of its original audio format.

Pulling HLS streams to process

Nimble Streamer has a transmuxing engine which allows taking any stream of any transport protocol in and generate streams in all available protocols as well. You can check our Live Streaming feature set to see full list.
Usually our customers use RTMP, RTSP or MPEG-TS to deliver streams to media server and create outgoing streams that can be consumed by end-users. However, there are cases when only HLS streams are available as a source. So now Nimble Streamer also supports HLS as an input.

The setup is similar to MPEG-TS input setup and uses the same approach of input and output streams. Let's see how you can set this up.

Go to Nimble Streamer -> Live Streams Settings top menu, select required server and choose MPEGTS In tab as shown below.

Here you can add several types of streams as input. Click on Add HLS stream button.

Here you will enter your HLS playlist Stream URL to pull from.

You may also optionally define any number of Fallback URLs which will be used in case your main stream goes down. You can specify both HTTP and HTTPS streams' URLs. The backup streams will remain the source of the stream as long they are active.

If you'd like Nimble Streamer to check primary stream to switch back, click on "Add primary check interval" to enter that value. Notice that interval check feature requires Addenda premium package license registered on the server where you process these streams.

You also need to specify Alias which will be used in other settings as a name for this incoming stream.

If you playlist contains several chunk lists, eg. in case you have ABR stream, then only the first chunk list will be processed.

Once you save it, click on MPEGTS Out tab to set up outgoing stream.

Here you need to click Add outgoing stream to see the dialog below.

Here you will specify Application name and Stream name which will be used for naming of your outgoing result stream. Also, as in case of MPEGTS streams setup, you will need to pick up your input stream as Video source and Audio source for this stream. 

After saving this new stream settings, you will see it being synced up with your server.

Once it's complete, you can go to Nimble Streamer -> Live streams menu to select your server Outgoing streams and check your stream output. It will be available via the protocols which you specified in Global tab for your server or in Applications tab for individual application. These settings allow to define how your stream will be handled.

If you pull hundreds of live streams, you may use live_pull_threads parameter to set the number of threads to pull HLS streams for processing. It's 1 by default. Check params reference for details.

That's it, you can now use your outgoing stream.

Contact us
if you have any feedback or questions regarding Nimble Streamer functionality and usage.

Related documentation