June 30, 2017

The State of Streaming Protocols - 2017 Q2

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

Second quarter of 2017 has passed so let's take a look at stats. The media servers connected to WMSPanel processed more than 8.6 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 Q2

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

The State of Streaming Protocols - 2017 Q1


In the 1st quarter of 2017 it had being collected from 3300+ servers.

What can we see?
  • HLS went down to 60%. 
  • RTMP increased its share again, it's nearly 16%. 
  • Progressive download also went up to 8%. 
  • MPEG-DASH is currently 5% which is twice bigger than last quarter. 
So despite of wide use of progressive download and MPEG-DASH for VOD content, people still need low latency, this is the main cause for introducing SLDP by our team. It's a low latency protocol which our customers use for latency-critical cases like chatting, security or bidding, they also appreciate the built-in security features. This is why you see several thousands of viewers already consuming the live content via SLDP.


You can also check December summary of steaming protocols to compare with numbers from last year.

We'll keep analyzing protocols to see the dynamics. Check our updates at Facebook, Twitter or Google+.

June 21, 2017

FAQ: SLDP tips and troubleshooting

Our new real-time low latency SLDP protocol is expanding among our customers so we get more questions regarding its usage.

Some basic usage of SLDP protocol is described in this article. It describes typical usage scenarios, however there are always some things to improve your use cases and give better user experience. The following frequently asked questions help improving that. Also check Reliable Low Latency Delivery with SRT+SLDP article at Haivision blog.


For more questions and answers please check SLDP FAQ section of Softvelum website.


If you have more questions, please contact us to get help.


June 15, 2017

SLDP Player: iOS SDK for RTMP and SLDP playback

Our company is continuously improving its mobile solutions. They already include SDKs for streaming from mobile devices via RTMP and RTSP along with corresponding Larix Broadcaster and Larix Screencaster free apps.

Our customers are also interested in adding playback capabilities into heir applications. So today we introduce SLDP Player SDK for iOS and Android.

It allows playing streams as follows:

  • RTMP is a commonly used protocol for live streaming to end-users devices so now you can use it in your apps.
  • SLDP is the low latency real-time streaming protocol. This protocol allows delivery of media with sub-second latency at the end-users' devices. Now you can add playback capabilities for having low delay streaming to your users' iOS devices.
  • SRT plaback
  • Icecast playback.
  • H.264 video and AAC audio media types are supported as in iOS platform itself.
You can try it in action using SLDP Player free application.



Visit our website to subscribe to our mobile SDKs.


We'll soon release Android version SLDP Player, so stay tuned for updates.

Related documentation


June 12, 2017

SLDP proprietary streaming protection

Our company has released SLDP - the low latency real-time streaming protocol. It allows delivery of media with sub-second latency at the end-users' devices.

SLDP is a proprietary solution created with security in mind to make sure your content is delivered efficiently and safe.

SLDP has its own data transfer algorithm so media server and a player both control data transmission and their algorithms are not visible to the outside observer. This is why it's not covered by any modern stream grabbers. So your stream is not intercepted by anyone but played well in the player.
If it's grabbed by any software, our team will modify both parts of delivery mechanism - server and player - to cover these new circumstances.

Learn more about SLDP


One more option on top of that is to use SSL connection for transfer. This will prevent your stream's data from sniffing. Nimble Streamer allows enabling SSL for outgoing connections, this will cover SLDP as well. Your URL for our players will have wss:// prefix instead of ws:// in this case.

And of course, you may apply any feature from our paywall feature set which includes hotlink protection, geo-location and IP range block, pay-per-view framework and some other capabilities. Visit our paywall page to see all capabilities.
Bottom line: use SLDP to securely transfer your live streams.
Your media will be delivered with high security and low latency.


You can try SLDP in action any time by installing Nimble Steamer. Feel free to contact us for any questions.


Take a look at the answers for frequent questions to improve your SLDP usage.


Related documentation


SLDP low latency streamingReliable Low Latency Delivery with SRT+SLDPPaywall feature set, Live Streaming via Nimble Streamer

June 7, 2017

HEVC support in Nimble Streamer Transcoder

HEVC (H.265) is a high-efficiency codec, best fit for high resolution video like HD, 4K and 8K streaming. Nimble Streamer Live Transcoder now supports HEVC transcoding in addition to already supported transmuxing feature set.

Live Transcoder allows performing both decoding and encoding of HEVC.

To receive HEVC for transcoding, Nimble Streamer allows processing 
  • RTSP from published and pulled sources;
  • MPEG-TS via both UDP and HTTP. 
The result stream can be delivered using


Decoding


The following methods are currently supported for decoding HEVC content for further transformation:

Encoding


Currently the encoding is performed only via hardware acceleration by Quick Sync and NVENC.

Easy control


Live Transcoder has easy to use Web UI which provides drag-n-drop workflow editor to apply transcoding scenarios across various servers in a few clicks.
With FFmpeg filters you can transform content in various ways, e.g. change the video resize, make graphic overlays, picture-in-picture, key frames alignments, audio re-sampling etc.



Feel free to visit Live Transcoder webpage for other transcoding features description and contact us if you have any question.

Related documentation


Live Transcoder for Nimble Streamer, Audio streaming features, Build streaming infrastructure, Transcoder web UI preview, Live Streaming features, Build streaming infrastructure,


Intel Quick Sync H.265 encoder parameters in Live Transcoder

Intel® Quick Sync technology provides efficient encoding capabilities. It allows using hardware acceleration for video decoding and encoding using Intel® processors feature set and software encoding in all other cases.

Nimble Streamer Transcoder allows using Intel® Quick Sync as an HEVC video decoder and encoder in transcoding scenarios.

Library and SDK installation instructions can be found on QuickSync support page.

Here we'll take a look at encoder settings available at the moment. They are very similar to those described in this article.

There are a few parameters that are different for HEVC. First, you need to choose "h265" in Codec field along with Encoder being set to "quicksync".


Some existing parameters have different values.

profile

Specifies H.265 profile.

  • main
  • mainsp


level

Specifies H.265 profile level.

  • 1
  • 2
  • 21
  • 3
  • 31
  • 4
  • 41
  • 5
  • 51
  • 52
  • 6
  • 61
  • 62


keep_sar

If your input stream is anamorphic you might need to save its SAR parameter in the output as well, especially if you’re using a 'scale' filter in your Transcoder pipeline while DAR = SAR x Width / Height. Nimble supports keeping input SAR using keep-sar parameter set to true for encoder in its ‘Video output’ section. SAR/DAR/PAR correlation is described in this article.

New parameter has also been introduced.

plugin

Specifies plugin for HEVC encoding. if plugin is not specified nimble loads hevce_sw if impl=sw or hevce_hw if impl=hw.

  • hevce_sw - load MFX_PLUGINID_HEVCE_SW plugin;
  • hevce_hw - load MFX_PLUGINID_HEVCE_HW plugin;
  • hevce_gacc - load MFX_PLUGINID_HEVCE_GACC plugin;

hevce_sw and hevce_gacc are only available in Media Server Studio Professional.


That's it. Other params are the same as for h264 codec.
We keep improving our transcoder feature set, contact us for any questions.

Related documentation



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

NVidia NVENC settings for H.265 in Live Transcoder

NVidia® Products with the Kepler, Maxwell and Pascal generation GPUs contain a dedicated accelerator for video encoding, called NVENC, on the GPU die.

Nimble Streamer Live Transcoder has full support for NVidia video encoding and decoding hardware acceleration. Having the hardware capable of the processing and drivers properly installed, our customer can choose NVENC to handle streams' encoding.

HEVC (H.265) codec is supported by multiple NVidia GPUs so now it's also supported in our Live Transcoder. You can use Transcoder to decode and encode H.265 on your hardware under both Linux and Windows.

You can take a look at the list of NVidia GPUs capable of hardware encoding acceleration. To make HW acceleration work, you need to install the graphic card drivers into the system. Use this link to download and install them. If you haven't yet installed Nimble Streamer transcoder, use this page to find proper setup instruction.

Notice that NVENC has a couple of known issues, please check Troubleshooting section below in this article.

Setting encoder


The transcoding scenarios are created using our web UI. You can check this YouTube playlist to see how various use cases are defined. Takes just a couple of minutes to complete.

Scenarios setup page
Example of HEVC encoding scenario

To set up NVENC settings you need to open encoder settings dialog and choose "nvenc" as the Encoder and select h265 as Codec.



After that you can add various parameters and set up specific values to tune up your encoding process. Please find full list of available encoding parameters below.


preset

Specifies H.265 preset.
  • hp - high performance
  • default - tradeoff between performance and quality
  • hq - high quality
  • llhp - low latency high performance
  • ll - default low latency preset and the quality and speed is midway of the two other presets
  • llhq - low latency high quality
  • lossless - default lossless preset
  • losslesshp - lossless high performance
  • bd - BlueRay disk quality

profile

Specifies H.265 profile.
  • main
  • auto

level


Specifies the level of the encoded bitstream.
  • auto
  • 1
  • 2
  • 21
  • 3
  • 31
  • 4
  • 41
  • 5
  • 51
  • 52
  • 6
  • 61
  • 62

gpu

Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on.

If you set it to "auto" then transcoder will choose the least busy GPU.

keyint

Number of pictures within the current GOP (Group of Pictures).
  • 0 - NVENC_INFINITE_GOPLENGTH
  • 1 - only I-frames are used

bframes

Specifies maximum number of B frames between non-B-frames.
0 - no B-frames
1 - IBP
2 - IBBP

refs

Specifies the DPB size used for encoding.

Setting it to 0 will let driver use the default dpb size. The low latency application which wants to invalidate reference frame as an error resilience tool is recommended to use a large DPB size so that the encoder can keep old reference frames which can be used if recent frames are invalidated.

fps_n, fps_d

Set output FPS numerator and denominator. It only affects num_units_in_tick and time_scale fields in SPS.
If fps_n=30 and fps_d=1 then it's 30 FPS
If fps_n=60000 and fps_d=2002 then it's 29.97 FPS
Source stream FPS or filter FPS is used if fps_n and fps_d is are set.

rate_control

Sets bitrate type.
  • cqp - Constant QP mode
  • vbr - Variable bitrate mode
  • cbr - Constant bitrate mode
  • vbr_minqp - ariable bitrate mode with MinQP
  • ll_2pass_quality - Multi pass encoding optimized for image quality and works only with low latency mode
  • ll_2pass_size - Multi pass encoding optimized for maintaining frame size and works only with low latency mode
  • vbr_2pass - Multi pass VBR

bitrate

Sets bitrate in Kbps.

max_bitrate

Sets max bitrate in Kbps.

init_bufsize

Specifies the VBV(HRD) initial delay in Kbits.
0 - use the default VBV initial delay

bufsize

Specifies the VBV(HRD) buffer size in Kbits.
0 - use the default VBV buffer size

qpi, qpp, qpb

Specifies the initial QP to be used for encoding, these values would be used for all frames if in CQP mode.

qmin

Specifies the minimum QP used for rate control.

qmax

Specifies the maximum QP used for rate control.

initialRCQP

Specifies the initial QP used for rate control.

quality

Target Constant Quality level for VBR mode (range 0-51 with 0-automatic);



keep_sar

If your input stream is anamorphic you might need to save its SAR parameter in the output as well, especially if you’re using a 'scale' filter in your Transcoder pipeline while DAR = SAR x Width / Height. Nimble supports keeping input SAR using keep-sar parameter set to true for encoder in its ‘Video output’ section. SAR/DAR/PAR correlation is described in this article.

monoChromeEncoding

  • 0 - disable
  • 1 - enable

frameFieldMode

Specifies the frame/field mode.
  • frame - NV_ENC_PARAMS_FRAME_FIELD_MODE_FRAME
  • filed - NV_ENC_PARAMS_FRAME_FIELD_MODE_FIELD
  • mbaff - NV_ENC_PARAMS_FRAME_FIELD_MODE_MBAFF

mvPrecision

Specifies the desired motion vector prediction precision.
  • default - NV_ENC_MV_PRECISION_DEFAULT
  • full_pell - NV_ENC_MV_PRECISION_FULL_PEL
  • half_pell - NV_ENC_MV_PRECISION_HALF_PEL
  • quarter_pel - NV_ENC_MV_PRECISION_QUARTER_PEL

enableAQ

Enable Spatial adaptive quantization.
  • 0 - disable
  • 1 - enable

aqStrength

Specifies AQ strength.
AQ strength scale is from 1 (low) - 15 (aggressive).

enableTemporalAQ

Specifies Temporal adaptive quantization.
  • 0 - disable
  • 1 - enable

strictGOPTarget

Set to enable to minimize GOP-to-GOP rate fluctuations.
  • 0 - disable
  • 1 - enable

enableLookahead

Enable lookahead with depth <lookaheadDepth>.

lookaheadDepth

Maximum depth of lookahead with range 0-32 (only used if enableLookahead=1)

disableIadapt

Disable adaptive I-frame insertion at scene cuts (only has an effect when lookahead is enabled).
  • 0 - none
  • 1 - disable adaptive I-frame insertion

disableBadapt

Disable adaptive B-frame decision (only has an effect when lookahead is enabled)
  • 0 - none
  • 1 - Disable adaptive B-frame decision

minCUSize

Specifies the minimum size of luma coding unit.
  • auto
  • 8 - 8x8
  • 16 - 16x16
  • 32 - 32x32
  • 64 - 64x64

maxCUSize

Specifies the maximum size of luma coding unit. Currently NVENC SDK only supports maxCUSize equal to 32.
  • auto
  • 8 - 8x8
  • 16 - 16x16
  • 32 - 32x32
  • 64 - 64x64

useConstrainedIntraPred

Constrained intra prediction.
  • 0 - disable(default)
  • 1 - enable

disableDeblockAcrossSliceBoundary

loop filtering across slice boundary
  • 0 - enable(default)
  • 1 - disable

outputAUD

Write Access Unit Delimiter syntax:
  • 0 - disable
  • 1 - enable(default)

enableLTR

Use of long term reference pictures for inter prediction.
  • 0 - disable(default)
  • 1 - enable

enableIntraRefresh

Gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored.
  • 0 - disable
  • 1 - enable

intraRefreshPeriod

Specifies the interval between successive intra refresh if enableIntrarefresh is set.
Requires enableIntraRefresh to be set.
Will be disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH.

intraRefreshCnt

Specifies the length of intra refresh in number of frames for periodic intra refresh.
This value should be smaller than intraRefreshPeriod.


ltrTrustMode

Specifies the LTR operating mode.
Set to 0 to disallow encoding using LTR frames until later specified.
Set to 1 to allow encoding using LTR frames unless later invalidated.

ltrNumFrames

Specifies the number of LTR frames used.
  • If ltrTrustMode=1, encoder will mark first numLTRFrames base layer reference frames within each IDR interval as LTR.
  • If ltrMarkFrame=1, ltrNumFrames specifies maximum number of ltr frames in DPB.
  • If ltrNumFrames value is more that DPB size(refs) encoder will take decision on its own.

sliceMode

sliceMode in conjunction with sliceModeData specifies the way in which the picture is divided into slices
  • sliceMode = 0 CTU based slices,
  • sliceMode = 1 Byte based slices,
  • sliceMode = 2 CTU row based slices,
  • sliceMode = 3, numSlices in Picture
  • When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice.

sliceModeData

Specifies the parameter needed for sliceMode. For:
  • sliceMode = 0, sliceModeData specifies # of CTUs in each slice (except last slice)
  • sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice)
  • sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except last slice)
  • sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally.

maxTemporalLayersMinus1

Specifies the max temporal layer used for hierarchical coding.


These are the parameters which you can use already in order to control NVidia video encoding hardware acceleration.

Troubleshooting


Linux drivers


Linux version of NVENC has some known issues with HEVC support for outdated driver versions.
If you see the following message in nimble.log: 
failed to lock output bitstream encoder=0x3d871f0, status=8
then you need to update your driver to version 381.22 or higher. Version 378.13 has issues described in this discussion.

GTX 950


Linux version of NVENC does not allow more than one HEVC decoding session for GTX 950. This is also a known issue which is reproduced for ffmpeg. This problem might not exist on other cards.

Other issues


Please check Transcoder troubleshooting article covering most frequent issues.


We keep improving our transcoder feature set, so please contact us for any questions.

Related documentation


NVIDIA, the NVIDIA logo and CUDA are trademarks and/or registered trademarks of NVIDIA Corporation in the U.S. and/or other countries.