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 support0
= Playready, off0
= Widevine, off1
= Fairplay, on1
= This is initialized.
0000
– Audio support000
– all audio off0
– 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 Version01
– HDCP 1.21
– 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)
.