July 18, 2017

Transcoding VP8 and VP9 in Nimble Streamer

VP8 and VP9 are open and royalty free video coding formats developed by Google. Nimble Streamer Live Transcoder now supports these protocols transcoding in addition to already supported VP8/VP9 transmuxing feature set.

Live Transcoder allows performing both decoding and encoding.

To receive VP8 and VP9 for transcoding, Nimble Streamer allows processing RTSP from published and pulled sources. The result stream can be delivered using RTSP protocol as well.


Decoding


The following methods are currently supported for decoding VP8/VP9 content for further transformation:
  • Software decoder
  • Intel® Quick Sync technology for hardware decoding. VP8 is supported on Windows and Linux, VP9 is supported only on Windows. 
  • NVidia® NVENC hardware decoding for Windows and Linux.
You can specify the decoding method in decoder block in any transcoding scenario just like you specify it for other codecs.

Encoding


Currently the encoding is performed only via software encoder. To use it for VP8 and VP9, open encoder block in your transcoding scenario and select "libvpx" from dropdown menu 

Setting encoder for VP9 and VP8.

You will then be able to select Codec and specify other parameters listed below.


libvpx VP8/VP9 encoder parameters


quality

Quality Deadline

  • best - use the Best Qulity Deadline;
  • good - use the Good Qulity Deadline;
  • rt(default) -use the Real Time Qulity Deadline;

threads

Number of threads that will be allocated to the encode process

profile

Sets the encoder profile. Values range: 0 to 3.

lag_in_frames

Defines an upper limit on the number of frames into the future that the encoder can look. Values range: 0 to 25.

bitrate/b

Bitrate in kbps.

rc_mode

Rate control mode.

  • vbr- variable bitrate mode
  • cbr -  constant bitrate mode
  • cq -  constrained quality mode
  • q - constant quality mode


cq_level

Constrained Quality Level, in CQ mode the encoder will try to encode normal frames (all frames apart from key frames, golden frames and alternative reference frames) at a quantizer / quality level of cq_level. Values range: 0 to 63.

min_q

Minimum (Best Quality) Quantizer.

max_q

Maximum (Worst Quality) Quantizer.

buf_sz

Decoder Buffer Size indicates the amount of data that may be buffered by the decoding application. Note that this value is expressed in units of time (milliseconds). For example, a value of 5000 indicates that the client will buffer (at least) 5000ms worth of encoded data.

buf_initial_sz

Decoder Buffer Initial Size indicates the amount of data that will be buffered by the
decoding application prior to beginning playback. This value is expressed in units of time (milliseconds).

buf_optimal_sz

Decoder Buffer Optimal Size indicates the amount of data that the encoder should try to maintain in the decoder's buffer. This value is expressed in units  of time (milliseconds).

undershoot_pct

Rate control adaptation undershoot control. This value, expressed as a percentage of the target bitrate, controls the maximum allowed adaptation speed of the codec. This factor controls the maximum amount of bits that can be subtracted from the target bitrate in order to compensate for prior overshoot.
Values range: 0 to 1000

overshoot_pct

Rate control adaptation overshoot control. This value, expressed as a percentage of the target bitrate, controls the maximum allowed adaptation speed of the codec.
This factor controls the maximum amount of bits that can be added to the target bitrate in order to compensate for prior undershoot. Values range: 0 to 1000.

kf_mode

Keyframe placement mode. This value indicates whether the encoder should place keyframes at a fixed interval, or determine the optimal placement automatically.
Values: auto/disabled

kf_min_dist

Keyframe minimum interval. This value, expressed as a number of frames, prevents the encoder from placing a keyframe nearer than kf_min_dist to the previous keyframe.
At least kf_min_dist frames non-keyframes will be coded before the next keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval.

kf_max_dist

Keyframe maximum interval. This value, expressed as a number of frames, forces the encoder to code a keyframe if one has not been coded in the last kf_max_dist frames.
A value of 0 implies all frames will be keyframes. Set kf_min_dist equal to kf_max_dist for a fixed interval.

drop_frame

The drop frame parameter specifies a buffer fullness threshold at which the encoder starts to drop frames as a percentage of the optimal value specified by buf_optimal_sz. If it is set to 0 then dropping of frames is disabled.
Values range: 0 to 100.

resize_allowed

Enable/disable spatial resampling, if supported by the codec.

resize_up, resize_down

The resize up and down parameters are high and low buffer fullness "watermark" levels at which we start to consider changing down to a smaller internal image size, if the buffer is being run down, or back up to a larger size if the buffer is filling up again. The numbers represent a percentage of buf_optimal_sz.
Values range: 0 to 100

error_resilient

Enable error resilient modes indicates to the encoder which features it should enable to take measures for streaming over lossy or noisy links.

  • 0 - disabled
  • 1 - Improve resiliency against losses of whole frames
  • 2 - The frame partitions are independently decodable by the bool decoder, meaning that partitions can be decoded even though earlier partitions have been lost. Note that intra prediction is still done over the partition boundary.
  • 3 - Both features

auto_alt_ref

Codec control function to enable automatic set and use alf frames.

  • 0 - disable
  • 1 - enable

sharpness

Codec control function to set sharpness.

static_tresh

Codec control function to set the threshold for MBs treated static.

arnr_max_frames

Codec control function to set the max no of frames to create arf.

arnr_strength

Codec control function to set the filter strength for the arf.

tune

Optimize output for PSNR or SSIM quality measurement.
Values: psnr/ssim(default)

max_intra_bitrate_pct

Codec control function to set Max data rate for Intra frames.

cq_level

Constrained Quality Level, in CQ mode the encoder will try to encode normal frames (all frames apart from key frames, golden frames and alternative reference frames) at a quantizer / quality level of cq_level. Values range: 0 to 63.

libvpx VP8-specific parameters


speed

Codec control function to set encoder internal speed settings.
Values range: -16 to 16

token_parts

Codec control function to set the number of token partitions.

screen_content_mode

Codec control function to set encoder screen content mode.

  • 0 - off;
  • 1 - On;
  • 2 - On with more aggressive rate control;


noise_sensitivity

control function to set noise sensitivity

  • 0 - off;
  • 1 - OnYOnly;
  • 2 - OnYUV;
  • 3 - OnYUVAggressive;
  • 4 - Adaptive;


gf_cbr_boost

Boost percentage for Golden Frame in CBR mode.


libvpx VP9-specific parameters


speed

Codec control function to set encoder internal speed settings.
Values range: -8 to 8

max_inter_bitrate_pct

Codec control function to set max data rate for Inter frames.

gf_cbr_boost

Boost percentage for Golden Frame in CBR mode.

lossless

Lossless encoding mode.

  • 0 - lossy coding mode ;
  • 1 - lossless coding mode;


tile_cols

Number of tile columns

  • 0 - 1 tile column ;
  • 1 - 2 tile columns;
  • 2 - 4 tile columns;
  • n - 2**n tile columns;

tile_rows

Number of tile rows

  • 0 - 1 tile row ;
  • 1 - 2 tile rows;
  • 2 - 4 tile rows;

aq_mode

Adaptive quantization mode.

frame_boost

Periodic Q boost.

  • 0 = off ;
  • 1 = on;

noise_sensitivity

Noise sensitivity.

  • 0: off
  • 1: On(YOnly)

tune_content

Content type

  • default - Regular video content (Default);
  • screen - Screen capture content;

min_gf_interval

Minimum interval between GF/ARF frames

max_gf_interval

Maximum interval between GF/ARF frames

level

Target level

  • 255: off (default);
  • 0: only keep level stats;
  • 10: target for level 1.0;
  • 11: target for level 1.1;
  • ...
  • 62: target for level 6.2

row_mt

Row level multi-threading

  • 0 : off;
  • 1 : on;

alt_ref_aq

Special mode for altref adaptive quantization

  • 0 - disable
  • 1 - enable


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.
Take a look at our videos to see Transcoder UI in action.


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 StreamerBuild streaming infrastructureTranscoder web UI previewLive Streaming featuresBuild streaming infrastructure,

No comments:

Post a Comment