NETINT

Wowza Streaming Engine supports hardware-accelerated H.264 and H.265 transcoding on NETINT Quadra devices. WSE detects the VPUs installed on the host at runtime. You can configure decoding, scaling, and each encoded rendition to a specific device with its transcoder template.

Support for NETINT was added in WSE 4.12. On earlier versions, transcoding falls back to CPU-intensive software processing; we recommend upgrading to the latest version.

Support requirements

If no supported device is present, the transcoder falls back to software transcoding.

  • Hardware: NETINT Quadra VPU series
  • Firmware: 5.7.2+
  • OS: Linux on x86-64

Limitations

The limits below affect decoding, throughput, and thumbnails. Encoding stays on the card in every case.

Software decoding

In the cases below, the VPU can't decode the source and WSE falls back to CPU decoding.

  • Templates with Deinterlace enabled. The NETINT decode path has no field handling. Decoding on the card would ignore the setting and leave combing in the output.
  • H.264 sources above 8-bit, whether or not they carry HDR.
  • H.264 sources tagged BT.2020, PQ, or HLG, at any bit depth. The hardware H.264 decoder reports no colorimetry, so decoding them on the card would strip their wide-gamut and HDR metadata.
  • 10-bit sources whose decode surface pads beyond the picture size, for example 1920×802. This applies only outside the zero-copy pipeline. A zero-copy session never moves the frame off the card, so the padding does no harm.

By contrast, 10-bit H.265 HDR decodes on the card whenever its surface is aligned, and keeps its BT.2020, PQ, and HDR10 metadata intact.

Zero-copy pipeline

When decoding, scaling, and encoding all run on the same VPU, frames stay on the card for the whole session. This is the zero-copy pipeline. The zero-copy pipeline runs by default for most sessions — the exceptions are listed below. In these cases, the frames move through host memory instead. Decoding and encoding still run on the hardware, but the session loses the throughput of an on-card pipeline.

  • H.264 sources larger than 1920×1080. Above that size, the scaler built into the card's encoder stalls on reordered content. A source is exempt when its sequence parameter set proves the stream can't reorder pictures: Baseline profile, pic_order_cnt_type of 2, or max_num_reorder_frames of 0. H.265 sources aren't affected, and at 4K they run faster on the card than through host memory.
  • Template settings that require host memory. Overlays, the letterbox and crop fit modes, the frame manager (StrictFrameRate), and mixing NETINT with another hardware implementation.
  • Renditions that upscale height. The card's scaler can't hold full frame rate when it adds rows beyond the source surface. Downscaling and width-only upscaling are unaffected.

Enable NETINT


You can enable NETINT hardware-accelerated transcoding using WSE Manager or by directly editing the transcoder template file.

Enable NETINT in WSE Manager

Follow the steps below to configure NETINT encoding, scaling, and decoding on a transcoding template.

  1. Open WSE Manager.
  2. Select the Server tab.
  3. In the contents panel, click Transcoder.
  4. Click + Add Template, or click the name of an existing template.
  5. In the Hardware Presets dropdown, select Set NETINT.

Every app using this template now decodes, scales, and encodes on the VPU.

Select a specific GPU

You can a select specific GPU ID for encoding and decoding by entering the VPU's NVMe index into the GPU ID field. To select a GPU field for encoding or decoding, follow the steps below.

  1. Open WSE Manager.
  2. Select the Server tab.
  3. In the contents panel, click Transcoder.
  4. Select an existing transcoder template from the list.
  5. Click + Add Preset.
  6. Scroll to the GPU ID section.
  7. Enter the device's NVMe index. (1 maps to /dev/nvme1n1, etc.)
  8. Click + Add.

If the GPU ID names a device that is missing or is not a Quadra, WSE logs an error and runs that stage in software rather than retrying against the card.

Keep decoding, scaling, and encoding on the same device. A session split across two devices can't keep frames on the card, because one VPU can't read another's surfaces.

Enable NETINT in the transcoder template

To update an existing transcoder template by hand:

  1. Open the [install-dir]/transcoder/templates directory.
  2. Select the appropriate template file.
  3. Add the XML for the stages you want on the card, as shown below.

Set Implementation to NETINT in each block you want on the card. Add one <Encode> block per rendition.

<!-- NETINT video encoding -->

<Encode>
    <Enable>true</Enable>
    <Name>1080p</Name>
    <Video>
        <!-- H.264 or H.265 -->
        <Codec>H.264</Codec>
        <Implementation>NETINT</Implementation>
        <GPUID>-1</GPUID>
    </Video>
</Encode>
<!-- NETINT video decoding -->

<Decode>
    <Video>
        <Implementation>NETINT</Implementation>
        <GPUID>-1</GPUID>
    </Video>
</Decode>
<!-- NETINT scaling -->

<Scale>
    <Implementation>NETINT</Implementation>
</Scale>

Select a specific GPU

You can a specific GPU ID for encoding and decoding by updating the GPUID element in the <Decode> block and/or <Encode> block. The scaler has no GPUID of its own — it runs on the same device as the decoder. To select a specific GPU, update the GPUID field as follows:

  • -1 or 0: WSE uses the first device it finds. Use this on a host with a single VPU.
  • 1 and higher: Select a device by its NVMe index, so 1 maps to /dev/nvme1n1.

Keep decoding, scaling, and encoding on the same device. A session split across two devices can't keep frames on the card, because one VPU can't read another's surfaces.

If GPUID names a device that is missing or is not a Quadra, WSE logs an error and runs that stage in software rather than retrying against the card. If a rendition unexpectedly reports a software implementation, check the template's GPUID value.