OK, I found the problem. Now I am looking for the best solution.
This problem is indeed caused because there are both 0x42 (actual) and 0x46 (other) SDT tables transmitted, as we already figured out.
enigma2 is bugged because it sets a filter for both of them! This was done in an effort to fix SDT reading for "dish network" back in 2006 (they only use/used 0x46 tables, thus breaking the specification) https://github.com/O...d03460f5d86R166
if (m_SDT->start(m_demux, eDVBSDTSpec(tsid, true)))
The "true" in the eDVBSDTSpec call means that both 0x42 and 0x46 filtering will be done. So, for RAI enigma2 some times fetches the actual SDT table that carries the service names, some times it fetches the other SDT table that carries no names at all. https://github.com/O...dvb/specs.h#L70
eDVBSDTSpec(int tsid, bool other=false) { m_spec.pid = ServiceDescriptionSection::PID; m_spec.tid = ServiceDescriptionSection::TID; m_spec.tidext = tsid; /* * from Digital Video Broadcasting (DVB) Guidelines on implementation and usage of Service Information (SI) * DVB Document A005 June 2017: * * "all sections of the SDT for the actual multiplex shall be transmitted at least every 2 s" * "all sections of the SDT for other TSs shall be transmitted at least every 10 s if present" */ m_spec.timeout = other ? 10500 : 2500; // ServiceDescriptionSection::TIMEOUT; m_spec.flags = eDVBTableSpec::tfAnyVersion | eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC | eDVBTableSpec::tfHaveTIDExt | eDVBTableSpec::tfHaveTimeout; if (other) { // SDT other transport stream have TID 0x46 (current is 0x42) // so we mask out the third bit in table id mask.. m_spec.flags |= eDVBTableSpec::tfHaveTIDMask; m_spec.tid_mask = 0xFB; } }