
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.