October 12, 2017

DVR timeline in Nimble Streamer

As most of our customers already know, DVR feature set in Nimble Streamer allows recording any incoming live streams and provide playback capabilities for them. It has time range selection and other features.

Now we introduce time line browsing and playback. Here's how you can enable and use it.

Upgrade Nimble


Before using this feature set, please upgrade Nimble Streamer to latest version to make DVR timeline work. You can check Nimble Streamer release notes to see what's the difference between versions.

Browse time line 


To browse the recorded streams, you need to go to Nimble Streamer -> DVR streams menu. There you'll see the list of recorded streams.


To view the DVR steam directly you can click ion a question mark on the right side f the list - this will open the sample player dialog showing current playback.

To view the timeline of an individual stream, click on a "clock" icon on the right side of a stream row. You will see the timeline dialog which will immediately start obtaining data from Nimble Streamer instance which has that stream archive.


This will take a few seconds - not more than a sync-up time which is typically 30 seconds. Once the data is received, the dialog will see full timeline of selected stream's recording.


Here you will see green lines which represent recorded fragments - i.e. the time which has recorded data. The blank space shows absence of any records.

Date and time selectors allow defining the intervals to view. As soon as you start selecting date or time, the display will immediately move the focus so you'll see how far you've moved.


Also, take a look at the navigation bar on top.

Previous and Next buttons will move the focus to the points of beginning and the ending of the recorded fragments. Once it moves, you will see red dot at that point.


Zoom in and out buttons allow changing the scale of the timeline. You may also scroll with your mouse or touchpad to do the same.

You may also drag the timeline by the scale at the bottom of the chart to move between zoomed fragments.

Fit timeline button will reset all zoom and scroll to show full archive again.

You can play the DVR stream from selected point simply by clicking on it. See Play records from selected point section below for more details.

Browsing multiple archives


Besides viewing single stream archive, you can browse and compare data from multiple streams.

Select required streams by clicking on respective checkboxes and click on DVR timeline button.



You will see the same timeline dialog but it will have all streams which you picked up, being shown at the same scale and common range.


Here you can do the same operations as you could for single stream. Moving among fragments via Previous and Next button will be done on the common time scale as well so you'll jump between streams according to thier break points. To play the stream from selected fragment, just click on it - see the next section for details.

Play records from selected point


You may click on any point at the timeline to start playback from that moment. When you click you will see the sample player dialog starting the stream from selected time.


Here you see the Choose URL to play dropdown list of playback URLs - if you have multiple IPs of your server, you will see streams for all servers. Currently only HLS is supported for fragmented playback.

Then you'll be able to select a player which you'd like to test with this stream and also get the player code by clicking the Show player's code button.

And of course you will see the playback of the recorded stream in selected browser from the moment which you pointed it to. The recording will be played until the end of the fragment where you pointed.




That's it - feel free to browse your archives to see what was going on.

Let us know if you have any questions regarding this functionality.

Related documentation


October 4, 2017

Troubleshooting Live Transcoder

Live Transcoder for Nimble Streamer is being used by various companies around the globe in many live streaming scenarios. However, some customers run into typical problems which they address to our support.

Some typical troubleshooting techniques for Nimble Streamer itself are described in Before you post a question to helpdesk article.

We'd like to describe Live Transcoder issues that appear in some cases and can be solved by the customer.

Q1: Stream stops unexpectedly

Nimble Streamer goes offline, it's shown as "offline" in WMSPanel account.

Check Nimble Streamer logs located at /var/log/nimble/nimble.log

Look for this type of messages:
[2017-10-04 04:23:26 P1486-T2435] [encoder] E: encoder too slow, droped 2038/2039 audio frames for [live/stream]
[2017-10-04 04:24:58 P1486-T2435] [encoder] E: encoder too slow, droped 3765/3766 audio frames for [live/stream]
You can also check system logs in /var/log/kern.log or /var/log/messages (depending on your Linux distro) to find this type of messages
Oct 04 04:25:28 loft24330 kernel: [46756.231449] Out of memory: Kill process 1486 (nimble) score 957 or sacrifice child
Oct 04 04:25:28 loft24330 kernel: [46756.249823] Killed process 1486 (nimble) total-vm:52904636kB, anon-rss:32208832kB, file-rss:0kB
Both errors indicate that your server cannot encode all streams in time. The second system error shows that Linux Kernel shut down the process due to Out of Memory condition.

As a resolution, you should decrease the number of encoded streams on this server. You could set up another server and encoder and make those extra streams be processed there.

Speaking of the memory, you should also check and set up proper RAM cache size to and make sure that value is enough to store your live stream chunk cache.

Q2: Unsupported format 12


You may see errors like these
[2017-10-13 22:18:14 P86076-T96639] [encoder] E: failed to encode video frame for [live/stream]
[2017-10-13 22:18:16 P86076-T96641] [encoder] E: unsupported frame format, 12 
This means you need to change pixel format.
Open your scenario and add new custom parameter filter element prior to your encoder element. The parameter name will be filter and the value will be pix_fmts=yuv420p as shown on this picture.


Once you apply settings, the error error should be gone.

Q3: NVENC is not available


If you fail using NVENC as you decoder and/or encoder, you may see messages like this:
nvenc is not available
This means you don't have NVENC driver installed or properly set up in your system.

Q4: What NVENC drivers should be used?


We highly recommend using official NVidia drivers.
We may decline requests for technical support in case if a customer uses any un-official or "patched" drivers from any third-parties.

Q5: Transcoder not found after installation on Windows


Some customers install Live Transcoder on Windows 2008 and after registering the license they still get a message like
Please install 'nimble-transcoder' package
with additional info about installation procedure.

First please try re-starting Nimble Streamer and try that again.
If that doesn't help, you may need to install update KB2533623 by Microsoft. Please follow this instruction to make update and then re-start Nimble Streamer.

Q6: Failed to create NVENC context


If you use NVENC and experience some issues you may see messages like these:
[2017-10-18 12:32:54 P23976-T24004] [tranmain] E: failed to create cuda context, gpu=1, flag=4
[2017-10-18 12:32:54 P23976-T24004] [tranmain] I: create cuda ctx, gpu=1, flag=4...
[2017-10-18 12:32:54 P23976-T24004] [tranmain] E: failed to create nvenc ctx for gpu=1, flag=4, res=2
[2017-10-18 12:32:54 P23976-T24004] [tranmain] E: failed to create cuda context, gpu=1, flag=4 
The res=2 flag means that NVENC ran out of memory and couldn't create proper amount of contexts for content processing.

You need to follow this instruction to enable context caching and create contexts up-front before starting Nimble Streamer with Transcoder. The number of contexts to be created is defined by your hardware. You can find proper number by doing some testing as follows:

  1. Set up some minimum number of contexts then start Nimble and try transcoding some stream.
  2. Check logs to see if you get errors.
  3. If you don't have errors, you can increase the number and repeat steps 1 and 2.
  4. If you have errors, you need to decrease the number step by step until you don't get errors.

Or you may start with some big number of contexts and decrease it ste-by-step until the errors are gone. You will end up with some number of contexts which you can use for your scenarios with your current hardware.

Q7: Failed to encode, status 10


You may see these messages when using NVENC:
[2017-10-16 10:58:36 P138405-T141721] [encoder] E: failed to init encoder=0x7f1b540008c0, status=10
[2017-10-16 10:58:36 P138405-T141721] [encoder] E: failed to encode video frame for [live/stream_1080]
[2017-10-16 10:58:36 P138405-T141721] [encoder] E: failed to flush nvenc encoder
This also indicates too many contexts in use. Please refer to Q5 for more details on how to use context cache and find the right number of contexts.

Q8: Video and audio are un-synced


Sometimes streams are published to external destinations like Akamai or other CDNs with un-synced video and audio. This may be caused by the originating encoders.

Try applying interleaving compensation to your streams to eliminate the un-sync.


Feel free to contact us if you have any other questions or issues with Live Transcoder.

Related documentation


Live Transcoder for Nimble StreamerBuild streaming infrastructureTranscoder web UI previewLive Streaming featuresBuild streaming infrastructure,

October 1, 2017

Softvelum 2017 Q3 news

Third quarter of 2017 is now over so it's time to make a summary of what our team has accomplished.

General announcements


Notice that we've improved our Terms of Service, please have a moment to read them. Notice that it refers to Before you post a question to helpdesk article - this is what you'll need to get familiar with prior to sending a question to our team.

Another general improvement: WMSPanel now supports two-factor authentication which can be enabled per-user.

A few words about the money: FastSpring, our payment gateway, now accepts UnionPay. So it's yet another way to pay for our products.

As always, take a moment to read our State of Streaming Protocols to see how the streaming landscape technologies are currently used among our customers. Spoiler: DASH keeps rising, HLS goes a bit down, SLDP gains momentum.

Nimble Streamer



First, we're glad to announce an article in Streaming Media by Jan Ozer about our Live Transcoder:
Review: Softvelum Nimble Streamer Is Flexible and Well-Featured
We appreciate Jan sharing his opinion and we'll keep improving our products per his feedback.

Now let's check new features.

Our team continuously improves SLDP low-latency streaming technology.

SLDP HTML5 JavaScript SDK for creating low latency HTML5 players is now available for licensing in addition to existing mobile SDKs.

Other SLDP updates you may find useful:
SRT streaming technology, originally created by Haivision and opened to open-source community, is now available in Nimble Streamer. It's a protocol which adds reliability to UDP transmission with error correction, encryption and other features which make it a great method to deliver live content across unreliable networks. Softvelum was also among first participants of SRT Alliance to take part in improving the protocol.
You can enable SRT in Nimble by installing SRT package and making respective settings.

Speaking of new protocols, UDT streaming protocol is now available in Nimble Streamer. Read this article for setup details.

Live Transcoder has been updated: VP8 and VP9 decoding and encoding are now supported. Read this article for more details about setup and usage. VP8 was also added to VA API implementation in our transcoder to give more flexibility.

Other interesting Nimble Streamer updates are:


Mobile Streaming


The last but not the least.

Mobile playback solutions are now available among our products.
This includes SLDP Player apps for iOS and Android, as well as respective SDKs for adding playback capabilities into your own apps. Currently SLDP and RTMP protocols are supported.
Free apps are available in Google Play and AppStore.

Mobile streaming products were updated with multiple improvements on Android, iOS and Windows Phone. This includes Larix Broadcaster and Larix Screencaster apps as wells as respective SDKs.
You can check the history of our mobile releases for all details of recent SDK releases.


Stay tuned for more features - follow us at FacebookTwitter or Google+ to get latest news and updates of our products and services.



September 30, 2017

The State of Streaming Protocols - 2017 Q3

Softvelum team which operates WMSPanel reporting service continues analyzing the state of streaming protocols.

Third quarter of 2017 has passed so let's take a look at stats. The media servers connected to WMSPanel processed more than 9 billion connections from 3400+ media servers (operated by Nimble Streamer and Wowza) during past 3 months.

First, let's take a look at the chart and numbers:

The State of Streaming Protocols - 2017 Q3
The State of Streaming Protocols - 2017 Q3

You can compare that to the picture of 2017 Q2 protocols landscape:

September 21, 2017

Two-factor authentication in WMSPanel

Softvelum team is continuously improving the security and reliability of our products. As one of the steps, we now add two-factor authentication for accessing WMSPanel. Two-factor authentication (also known as 2FA) is a method of confirming a user's claimed identity by utilizing a combination of two different components.

In case of WMSPanel this means using user/password pair and then generate access code using your mobile device. So when you log into your account, you'll need to enter login information and then use your Android or iOS device to create 6-digit code and provide it to WMSPanel.

Here's how you can use this new security measure.

September 8, 2017

ABR live streaming setup

Nimble Streamer has wide Live streaming feature set which includes receiving streams via various protocols and generating output streams. Each stream can be transported via several protocols simultaneously, like HLS, MPEG-DASH, RTMP, SLDP, SRT etc.

Some protocols - HLS, MPEG-DASH and SLDP - support adaptive bitrate streaming (ABR) which allows a player to switch between streams with different bandwidth in case if networks conditions change over time. WMSPanel control web-service allows setting ABR for those protocols at Nimble Streamer using both pre-defined set of streams and wildcard pattern. Let's see how this can be done in our web UI.

Prepare streams 


Adaptive-bitrate stream is formed from a number of single-bitrate streams. Which means that you need to have at least two of those single-bitrate streams in order to make ABR.

Nimble supports a variety of protocols and they all have their outgoing streams setup specifics. E.g. if you use RTMP or RTSP, once you get incoming stream, you will get outgoing streams of the same name. For MPEG-TS, SRT and UDT, you need to define the outgoing streams directly as one channel may contain multiple streams. Check respective articles for setup details of outgoing streams.

Also notice that you can use Live Transcoder to create different resolution and bitrate streams from a single stream.

Once you have some streams to make ABR from, you can proceed with setup.

Go to Nimble Streamer -> Live Streams menu to open the list of servers.


There you need to look for the server you'd like to add new ABR stream for. Now either click on respective number of streams in "ABR streams" column or click on server name and chooso Adaptive stream on the opened page - those actions open the same page shown below.


At this page you can click on Add ABR setting to open the setting dialog for a new ABR stream. Both pre-defined and wildcard ABR are created in the same dialog.

Create ABR with pre-defined streams


In this picture you see typical ABR stream being set up.

New ABR setting dialog for predefined streams

ABR application name and ABR stream name fields allow setting the names which will later be used for playback URL - see the last section.

Source application name and Source stream name fields allow specifying which existing streams need to be used as part of ABR. As you type the name you will get suggestions from available streams. Bandwidth value will be used in a playlist by your player. If you select Audio only for a stream, it will not stream video, only audio part.

Advanced settings will open a drop-down list which will allow defining the sorting option for the streams in the result playlist.

You can see the list of servers in the bottom of the dialog which you can select. Current ABR setting will apply to those servers which you select by the check boxes

After clicking on Save button your settings to be synced with each selected servers within a few seconds.

Create wildcard ABR


Wildcard ABR is done in a similar way, the fields are the same. The difference is in streams' names.



Leave the stream name blank in ABR stream name field and use {STREAM} placeholder in Source stream name fields. This will allow getting any single-bitrate stream directly by its name.

For example, if you have source streams live/sport_720, live/sport_480 etc. you can access ABR as
http://server/live_wildcard/sport/playlist.m3u8
with respective single-bitrate chunklists as
http://server/live_wildcard/sport_720/chunks.m3u8 
http://server/live_wildcard/sport_480/chunks.m3u8
etc. They will be used by your player for playback.

Please notice that only 1 wildcard ABR setting can be created for 1 application. If you happen to create several ones, only one setting will be used.

Playback


Once the ABR streams are defined you will see them in the list.



Clicking on "?" icon (a question mark) will show a playback dialog where you'll be able to get the stream URL and test the stream in most popular players. You'll also be able to get sample code for those players for further embedding (with your own player licenses if needed).


The player will use full list of available bandwidths to show to the user.


Graceful adaptive bitrate


When the player starts the playback from ABR playlist it may select the stream which is most preferred for your current bandwidth. When the network capability changes, new chunks are started to pick up from the proper sub-playlist. The main playlist is continuously requested again to make sure it has latest changes.

During the playback, the RTMP streams' source may loose some of its incoming streams due to many reasons. A camera may shut down, a failure may appear within the encoder itself or some network may be unavailable for transmission. So one or more incoming streams may become unavailable for ABR streaming.

Nimble Streamer provides graceful handling of cases like that. When respective RTMP stream goes down, it is excluded from outgoing streams list, thus it's excluded from the ABR playlist. So when new player gets playlist the broken stream will not be there.

This behavior means that an end-user will have good user experience with no playback interruption.



When a broken stream gets back online, a player receives its description and starts using it in its workflow.




That's it - you can use this approach to create streams for any supported protocols.


Related documentation


Nimble Streamer, Live streaming feature set, Live Transcoder, ABR control API,