Device Capabilities

This filter indicates current video, audio, HDMI, and HDCP capabilities of the client system. Capabilities are represented as a bitmap, in an agreed-upon format with the Avia team.

Protocol

HLS DASH
yes yes

Keys

name key
device-capabilies dc()

Capability Value Representation

Value-types

  • Boolean – flags as to support
  • Numeric – HDCP version and Frame Rate
  • Strings – Model number, display mode, resolution, preferred language, country code, etc

Transmission format

These will be sent as:

  • A flag for whether the value is set (as opposed to uninitialized)
  • One or more bits enumerating values.

An “Int” type can use three bits to represent a number from 0 through (2^3)-1 == 7; it has eight possible values but only one at a time.

A “Map” type can use multiple bits to represent multiple, independent values. A three bit-map would have three possible values bit0, bit1 and/or bit2, all of which are independent.

The “Int” type is far more efficient for storing a single value, but the “Map” value allows more information in the key that may not necessarily be linearly cumulative.

Value Map

bits   device capability value
type
possible values description
flag value        
0 1-2 HDCP Version Int 0 - None
1 - HDCP 1.2
2 - HDCP 1.4
3 - HDCP 1.4
Level of signal protection.
3 4-13 Video Support Map * (SDR and H.264/AVC assumed)
* HEVC Codec
* HDR
* HLG
* HDR10
* HDR10+
* DolbyVision
* UHD (4K)
* 60fps
* (Reserved 1 & 2)
Video codecs and color spaces supported.
14 15-17 Audio Support Map * (Stereo is assumed)
* Dolby Digital / AC-3
* Dolby Digital Plus / EAC3
What audio codecs are supported
18 19-21 DRM Support Map * Fairplay
* Widevine
* Playready
 

Example

Suppose you have a device that:

  • Has an older HDMI cable, supporting HDCP 1.2
  • Is attached to an older TV lacking extended color space, so has HEVC but nothing else.
  • No data about the attached and decodable audio is available
  • And supports Fairplay but not Widevine.

This would look like this: 0b 0011 0000 00000000011 011 ( == 0b 00 1100 0000 0000 0001 1011 = 0xC001B)

These are:

  • 0b – it’s a binary string. No value.
  • 011 – DRM support
    • 0 = Playready, off
    • 0 = Widevine, off
    • 1 = Fairplay, on
    • 1 = This is initialized.
  • 0000 – Audio support
    • 000 – all audio off
    • 0 – This is not initialized. We don’t know if EAC3 is supported, for example.
  • 00000000011 – Video support
    • 0000000001 – only HEVC is supported (with SDR and H.264/AVC assumed)
    • 1 – We do have video codec/support data.
  • 011 – HDCP Version
    • 01 – HDCP 1.2
    • 1 – This is set.

Device Cap Filter and URI Encoding

The result of the Device Caps Map is a three-byte or so value. For portable URI encoding, we use Base64URL encoding (Base64 with + replaced with – and / replaced with _.) This provides us six-bit encoding, which dovetails nicely to a round-up of the 22 bits specified while also converting evenly to three 8-bit bytes. The resulting string will be four characters long. In the case of the above example, 0xC001B becomes “DAAb”. Regardless of the actual bits set, the string will be that length. In this, case the value would be to Bakery in the Device Cap Filter dc, as dc(DAAb).