October 31, 2016

October news


October brought some good news for our customers.

First of all, we're honored to see Nimble Streamer as a finalist of Streaming Media Europe Readers Choice Awards in the "Best Streaming Innovation" nomination. We thank everyone who voted for us and hope to get more highlights by the industry press in future.

Speaking of industry  highlights, we are glad to see Radiant Media Player team now considers Nimble Streamer as fully supported media server. You can see us among the partners of this excellent solution.

Live Transcoder


Nimble Streamer Live Transcoder now has full support for NVidia hardware encoding acceleration via NVENC for H.264. It's available for both Windows and Linux platforms.
You can read this article for more details about the setup and capabilities.

Our customers report on huge off-load of their CPU when using GPU via our Transcoder.

Nimble Streamer


Nimble has improvements for both VOD and live scenarios.

When setting up origin-edge delivery configuration with RTMP delayed pull option, you may experience some delay on the viewer side starting the playback from edge. We've added a new option for origin side which you can use for decreasing the buffer. Read this article for more details.

Audio-only and video-only transmuxing for ABR VOD HLS is now supported. You will use SMIL files for that purpose, read this article for more details.

Mobile SDK


Larix mobile SDK was improved for both iOS and Android.


  • iOS SDK now has Larix sample application with Swift 3 support along with improved audio quality.
  • Android has streaming enhancements as well as sound Mute support.


Latest versions of SDK packages will be sent to our customers this week. Subscribe here to get those in case you haven't done it yet.


Dispersa

Our media streams monitoring service has a few updates as well

When you make setup for streams check-overs, you can now select to alert on email and push API when at least one checkpoint reports offline or when all checkpoints report offline.
For your convenience the subject also now contains stream name with checkpoint names, like "Stream offline alert (1/6) - Nimble Promo Video AMS1"



The last but not the least update: check the State of Streaming Protocols for October 2016.

Follow us at FacebookTwitterGoogle+ or LinkedIn to get latest news and updates of our products and services.

The State of Streaming Protocols - October 2016

WMSPanel team continues analyzing the state of streaming protocols.

The metrics calculations are based on 3.7+ billion views. The stats are collected from 3000+ media servers (Nimble Streamer and Wowza).

Protocols share remain stable, i.e. HLS share is about 75% with RTMP around 12% and progressive download near 6%. MPEG-DASH is ahead of SmoothStreaming, both having less than 1%.

The State of Streaming Protocols, October 2016

You can compare that to September stats below.

October 25, 2016

RTMP delayed pull buffer improvements

RTMP-related feature set of Nimble Streamer allows creating various streaming scenarios with your infrastructure. One of them is delayed pull, or pull by request. It allows saving bandwidth when some stream is not consumed by viewers.

When a viewer requests an edge server for some stream - e.g. via HLS - this edge will start pulling RTMP stream right at that moment. So the origin will give the stream only when it's needed. You can read more in this article.


Usually it takes some time to start the playback on viewer side so we added an enhancement for this scenario. You can now specify RTMP buffer items count on origin so the edge could get bigger buffer to provide it to the player.

So the player will get several chunks almost immediately and start playback in a second without buffering.

To make this work, follow these steps.

1. Upgrade your edge and origin Nimble instances.

2. On your origin, open nimble.conf and add
rtmp_buffer_items = 4096

3. Restart origin server.

Now, once the edge requests origin it will get 30 seconds buffer immediately and will start the playback.

You may find other fine tuning techniques for live streaming in Performance tuning guide.
Also, take a look at RTMP setup in Nimble Streamer video tutorial to learn more about basic RTMP scenarios.

Streaming Media Europe Readers' Choice Award 2016

As you know, Streaming Media is the leading magazine in the online streaming industry. We've been visiting their conferences - Streaming Media East and Streaming Media West - for several years so far and we're excited to participate in their activities.

Now we're honored to have Nimble Streamer as a finalist of Streaming Media Europe Readers Choice Awards in the "Best Streaming Innovation" nomination!



Thanks to everyone who voted for us!

October 20, 2016

NVidia NVENC settings in Nimble Streamer 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.

NVENCODE API enables software developers to configure this dedicated hardware video encoder. This dedicated accelerator encodes video at higher speeds and power efficiency than CUDA-based or CPU-based encoders at equivalent quality. NVENCODE API allows the programmer to control various settings of the encoder to set the desired tradeoff between quality and performance.

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.

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.

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


Scenarios setup page
Part of ABR scenario setup example

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


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.264 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? NV_ENC_PRESET_BD_GUID


profile

Specifies H.264 profile.

  • baseline
  • main
  • high
  • high444


level

Specifies H.264 profile level.

  • 1
  • 1.0
  • 1b
  • 1.1
  • 1.2
  • 1.3
  • 2
  • 2.1
  • 2.2
  • 3
  • 3.1
  • 3.2
  • 4
  • 4.0
  • 4.1
  • 4.2
  • 5
  • 5.1

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 are not set.
Please also check Handling fuzzy FPS to get proper bitrate output article.

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);

lossless

Enable lossless encode as following: sets QP to 0 and RC_mode to NV_ENC_PARAMS_RC_CONSTQP and profile to HIGH_444_PREDICTIVE_PROFILE.

  • 0 - disable
  • 1 - enable

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


enableIntraRefresh

Enable intra refresh. If the GOP structure uses B frames this will be ignored

  • 0 - disable
  • 1 - enable


intraRefreshPeriod

Interval between successive intra refresh.

intraRefreshCnt

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

enableConstrainedEncoding

Set this to 1 to enable constrainedFrame encoding where each slice in the constarined picture is independent of other slices

useConstrainedIntraPred

Set 1 to enable constrained intra prediction.

separateColourPlaneFlag

Set to 1 to enable 4:4:4 separate colour planes

deblockingFilterMode

Specifies the deblocking filter mode. Permissible value range : [0, 2]

adaptiveTransform

Specifies the AdaptiveTransform Mode

  • auto - Adaptive Transform 8x8 mode is auto selected by the encoder driver
  • disable - Adaptive Transform 8x8 mode disabled
  • enable - ptive Transform 8x8 mode should be used


fmo

Specified the FMO Mode

  • auto - FMO usage is auto selected by the encoder driver
  • enable - Enable FMO
  • disable -Disble FMO


bdirect

Specifies the BDirect mode

  • auto - BDirect mode is auto selected by the encoder driver
  • disable - Disable BDirect mode
  • temporal - Temporal BDirect mode
  • spatial - Spatial BDirect mode


entropyCoding

Specifies the entropy coding mode

  • auto - Entropy coding mode is auto selected by the encoder driver
  • cabac - Entropy coding mode is CABAC
  • cavlc - Entropy coding mode is CAVLC


sliceMode

Specifies the way in which the picture is divided into slices.

  • 0 - MB based slices,
  • 1 - Byte based slices,
  • 2 - MB row based slices,
  • 3 - numSlices in Picture

When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice

sliceModeData

Specifies the sliceMode parameter.

  • sliceMode=0, sliceModeData specifies # of MBs in each slice(except last slice)
  • sliceMode=1, sliceModeData specifies maximum # of bytes in each slice(except last slice)
  • sliceMode=2, sliceModeData specifies # of MB rows in each slice(except last slice)
  • sliceMode=3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally;

These are the parameters which you can use already in order to control NVidia video encoding hardware acceleration. Live Transcoder also supports NVidia hardware decoding.

To improve your NVENC transcoding experience, please also take a look at Transcoder troubleshooting covering most frequent questions.

Zabbix monitoring of Nimble Streamer allows tracking server status, SRT streams and NVidia GPU status.

We keep improving our transcoder feature set, 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. 

October 17, 2016

Re-sampling audio with Nimble Streamer Transcoder

Nimble Streamer Live Transcoder gives wide range of capabilities to transform both video and audio. Audio features allow doing various complex actions on sound as well as do some one-step actions like audio re-sampling.

Let's see a sample scenario shown below.

First, you see a passthrough of video just because this demo is for audio.
Then you see audio stream input and audio output with AAC encoder.


In between a custom filter added. Here are the details:



Set filter name to aformat and filter params to sample_rates=32000. This will re-sample audio to 32KHz.

That's it. Saving settings will apply this to designated transcoder instance.


Feel free to visit Live Transcoder webpage for more details and contact us if you have any question.

Related documentation


October 13, 2016

Audio-only and video-only transmuxing for HLS and MPEG-DASH via SMIL files

Nimble Streamer handles VOD streaming in various ways, one of them is doing ABR VOD via HLS and MPEG-DASH streaming protocols using SMIL files.

You can use SMIL to specify separate tracks in MP4 files which will be used transmuxed specifically with only audio or video for both HLS and DASH. This allows lowering the bandwidth usage.

To illustrate this approach, let's take a look at audio-only use case. We have "bigbuckbunny_450.mp4" file with audio we want to use and video track. There are bunch of other files with different video renditions, without the audio.

Check the sample SMIL file below.


<?xml version="1.0" encoding="UTF-8"?>
<smil title="">
 <body>
  <switch>
   <audioOnly src="bigbuckbunny_450.mp4" systemLanguage="eng" groupId="aac" default="true" autoSelect="true"/>
   <video src="bigbuckbunny_450.mp4" systemLanguage="eng" system-bitrate="450000" hlsAudioGroupId="aac"/>
   <video src="bigbuckbunny_750.mp4" systemLanguage="eng" system-bitrate="750000" hlsAudioGroupId="aac"/>
   <video src="bigbuckbunny_1100.mp4" systemLanguage="eng" system-bitrate="1100000" hlsAudioGroupId="aac"/>
   <video src="bigbuckbunny_1500.mp4" systemLanguage="eng" system-bitrate="1500000" hlsAudioGroupId="aac"/>
  </switch>
 </body>
</smil>

Get it on github. You can find other SMILs examples at this github repo.

Notice the groupId="aac" parameter in audioOnly tag, along with hlsAudioGroupId="aac" parameter in each video tag. This virtual group combines them together to use same audio track.

The result playlist would be as follows:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",DEFAULT="YES",AUTOSELECT="YES",URI="bigbuckbunny__450.mp4_audiochunk.m3u8?nimblesessionid=96"
#EXT-X-STREAM-INF:BANDWIDTH=450000,AUDIO="aac",LANGUAGE="eng"
bigbuckbunny__450.mp4_videochunk.m3u8?nimblesessionid=96
#EXT-X-STREAM-INF:BANDWIDTH=750000,AUDIO="aac",LANGUAGE="eng"
bigbuckbunny__750.mp4_videochunk.m3u8?nimblesessionid=96
#EXT-X-STREAM-INF:BANDWIDTH=1100000,AUDIO="aac",LANGUAGE="eng"
bigbuckbunny__1100.mp4_videochunk.m3u8?nimblesessionid=96
#EXT-X-STREAM-INF:BANDWIDTH=1500000,AUDIO="aac",LANGUAGE="eng"
bigbuckbunny__1500.mp4_videochunk.m3u8?nimblesessionid=96

When the player gets the playlist it still shows multiple renditions and during playback it gives the audio track transmuxed from bigbuckbunny_450.mp4 file, while the video is taken from selected video file.

Multiple audio tracks from same file


You can add multiple audio tracks if you need, this is especially useful for multi-language videos. If you have single MP4 file with multiple audio tracks, you may use those tracks in your SMIL and resulting playlist via audioIndex parameter. You can use title parameter to set the name for the track - this is what will be shows in the player selection.
Here's a sample SMIL.
<?xml version="1.0" encoding="UTF-8"?>
<smil title="">
 <body>
  <switch>
   <audioOnly src="video.mp4" systemLanguage="eng" title="English" groupId="aac" audioIndex="0" default="true" autoSelect="true"/>
   <audioOnly src="video.mp4" systemLanguage="fra" title="French"  groupId="aac" audioIndex="1"/>
   <audioOnly src="video.mp4" systemLanguage="spa" title="Spanish" groupId="aac" audioIndex="2"/>
   <video src="video.mp4" systemLanguage="eng" system-bitrate="450000" hlsAudioGroupId="aac"/>
  </switch>
 </body>
</smil>
Notice the systemLanguage parameter - it's different for each language.

The result playlist will be as follows:
#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",NAME="English",DEFAULT="YES",AUTOSELECT="YES",URI="video.mp4_audiochunk.m3u8?nimblesessionid=74" 
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="fra",NAME="French",URI="video.mp4_audiochunk.m3u8?nimblesessionid=74&nimble_audio_index=1" 
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="spa",NAME="Spanish",URI="video.mp4_audiochunk.m3u8?nimblesessionid=74&nimble_audio_index=2" 
#EXT-X-STREAM-INF:BANDWIDTH=450000,AUDIO="aac",LANGUAGE="eng" 
video.mp4_videochunk.m3u8?nimblesessionid=74


If you have any questions regarding this or related feature sets, please contact us.

Related documentation


Nimble StreamerVOD Streaming in NimbleSMIL support for MPEG-DASH, MP4 transmuxing to HLS VOD streaming, Subtitles support in Nimble StreamerUsing SMIL in Nimble Streamer,