The interaction channel variant of the AIT transport descriptor seems implemented wrong. According to TS102809 p.42, there is an additional "url_extension_count" byte before the extensions.
Also, multiple base/exts records are possible in this descriptor.
Something like that, in descriptors/mhp_ait_descriptor.c :
} if (p_id == 0x0003) {
int len2;
int num_exts;
while(len > 0) {
out_NL (4);
len2 = outBit_Sx_NL (4,"URL_base_length: ", b, 0, 8);
print_text_UTF8 (4, "URL_base: ", b+1, len2);
b += 1+len2;
len -= 1+len2;
out_NL (4);
num_exts = outBit_Sx_NL (4,"URL_extension_count: ", b, 0, 8);
b += 1;
len -= 1;
while (len > 0 && num_exts > 0) {
int len2;
out_NL (4);
len2 = outBit_Sx_NL (4,"URL_extension_length: ", b, 0, 8);
print_text_UTF8 (4, "URL_extension: ", b+1, len2);
b += 1+len2;
len -= 1+len2;
num_exts--;
}
}
Just researched a bit more. It seems that the old MHP 1.1.1 standard (TS 102 812) defines it the way it's currently implemented in dvbsnoop, but MHP 1.2.2 (TS 102 727) as well as HbbTV (102 809) define it with the additional byte.
This means that there probably needs to be more detection logic:
* Is it an MHP application?
* Is the profile version <= 1.1.1 ?
* If yes, then do not read the byte.
* If otherwise, do read the byte.