Hidden options of the Wowza Streaming Engine Transcoder.

A server showing its hidden inside

Hidden settings of the Wowza Streaming Engine Transcoder. How to Configure VBR, CBR, CQT Mode and Adjust VBV Size, quality of I-Frame, B-Frame, P-Frame.

Default operating mode of the Wowza Transcoder.

The transcoder of Wowza Streaming Engine(hereafter Wowza) operates in VBR(Variable Bit Rate) mode by default. However, the transcoder’s settings UI only displays basic options like Codec, Profile, Key Frame Interval, and Bitrate. It lacks detailed settings for VBR encoding and does not even show a CBR-VBR selection.

However, there are hidden configurable options, even though Wowza has not officially documented them. This article shares the list of detailed options and their configuration methods, which were provided by Wowza during the process of discovering a bug in the Wowza transcoder.

How to Apply Hidden Options

Wowza Transcoder settings are managed through template files located in [install-dir]/transcoder/templates/. Open the relevant template file and navigate to the video parameter section of the transcoder preset you wish to configure. Then, add a parameter block as shown in the example below.

...( omitted )...
<Encode>
 <Name>Profile name</Name>
 <Enable>true</Enable>
 <Description>Profile description</Description>
 <StreamName>mp4:${SourceStreamName}_360pvbr</StreamName>
 <Video>
 <Parameters>
  <Parameter>
   <Name>mainconcept.bit_rate_mode</Name>
   <Value>2</Value>
   <Type>Long</Type>
  </Parameter>
 </Parameters>
... ( omitted ) ...

Like other Wowza parameters, each parameter consists of a Name, Value, and Type.

Hidden Options of Wowza Transcoder

Operation Mode : CBR, CQT, VBR

Name
mainconcept.bit_rate_mode
Value
  • 0 : CBR
  • 1 : CQT
  • 2 : VBR
Type
Long

Average / Target bitrage

Name
mainconcept.bit_rate
Value
enter in bps (e.g., 4000000 = 4Mbps)
Type
Long

Maximum bitrate

Name
mainconcept.max_bit_rate
Value
enter in bps (e.g., 8000000 = 8Mbps)
Type
Long

Size of VBV(Video Buffering Verifier)

Name
mainconcept.bit_rate_buffer_size
Value
enter in byte (e.g., 1000000 = 1MByte)
Type
Long

I-Frame Quantization Level

Name
mainconcept.quant_pI
Value
An integer between 0 and 51 (The higher the value, the lower the quality).
Type
Long

B-Frame Quantization Level

Name
mainconcept.quant_pB
Value
An integer between 0 and 51 (The higher the value, the lower the quality).
Type
Long

P-Frame Quantization Level

Name
mainconcept.quant_pP
Value
An integer between 0 and 51 (The higher the value, the lower the quality).
Type
Long

Other Possibilities

Some astute readers may have noticed that the word mainconcept keeps appearing. That’s correct. The Wowza Transcoder is based on the MainConcept SDK. The parameters for the options mentioned above can be found in the MainConcept SDK’s AVCEncoderParams struct.

typedef struct AVCEncoderParams
{
    int32_t struct_size;       // Size of the structure
    int32_t width;             // Frame width resolution
    int32_t height;            // Frame height resolution
    int32_t framerate_num;     // Framerate numerator
    int32_t framerate_den;     // Framerate denominator
    int32_t rc_mode;           // Rate control mode
    int32_t bitrate;           // Target bitrate
    int32_t max_bitrate;       // Maximum bitrate
    int32_t vbv_buffer_size;   // VBV buffer size
    int32_t qp;                // Common QP for all frames
    int32_t i_qp;              // I-Frame QP
    int32_t p_qp;              // P-Frame QP
    int32_t b_qp;              // B-Frame QP
    int32_t gop_size;          // Size of GOP
    int32_t idr_interval;      // IDR Interval
    int32_t b_frames;          // Number of B-Frame
    int32_t b_pyramid;         // Use B-pyramid (0 : off)
    int32_t profile_idc;       // AVC Profile
    int32_t level_idc;         // AVC Level
    int32_t entropy_mode;      // 0 = CAVLC, 1 = CABAC
    int32_t scene_change_detection; // Insert I-frame on scene change
    int32_t color_format;      // e.g., NV12, YUV420
    int32_t interlace_mode;    // Progressive-Interlace setting
    void*    user_data;        // User data pointer
    uint32_t reserved[16];     // Reserved for future use
} AVCEncoderParams;

There is likely a way to adjust the MainConcept SDK’s parameters internally within Wowza. However, Wowza has only officially documented the seven items mentioned above.

Conclusion

In fact, the content of this article is information that general operators will not need (and should not need). The writer has stated multiple times in other articles that it is recommended to handle encoding/transcoding tasks outside of Wowza.

The information in this article was officially provided by Wowza technical support. Additionally, the writer has personally verified that these options work by applying them to a live system. However, this is not information that has been formally documented and released by Wowza. (Wowza themselves mentioned they had no internal documentation on this before the writer’s inquiry.)

However, the writer is sharing this information to offer some help to those who find themselves in a situation where they must push the Wowza system to its absolute limits. The writer sincerely hopes that no readers will need this article for their service deployment.

Leave a Reply

Your email address will not be published. Required fields are marked *