GitHub
Moderator
[Scan] Fix services with same SID on different transponders overwriting each other
When multiple services share the same SID, TSID, and ONID across different
transponders (e.g. EBU feeds EBU 1/2/3 ENC on Eutelsat 7C at 7.0E),
buildNamespace() strips the frequency from the namespace hash (subnetwork
feature), causing all services to receive identical service references.
This results in each manual scan overwriting the previously scanned service,
so only the last scanned channel remains in the channel list.
The fix adds collision detection in channelDone() for both SDT and VCT
processing: after building the namespace, we check if a channel with the
same eDVBChannelID (namespace+TSID+ONID) already exists in the database.
If it does, we compare the actual transponder parameters using
calculateDifference(). When the existing channel is on a physically
different transponder (diff > 0), the frequency is preserved in the
namespace instead of being stripped, ensuring each service gets a unique
service reference.
This preserves the existing subnetwork behavior for normal channels where
TSID+ONID uniquely identifies a transponder, while preventing collisions
for the edge case of different services sharing SID+TSID+ONID on separate
frequencies.
(cherry picked from commit 429ef9f99626e60cc9aa91c48de6073edaa69eb9)
Continue reading...
When multiple services share the same SID, TSID, and ONID across different
transponders (e.g. EBU feeds EBU 1/2/3 ENC on Eutelsat 7C at 7.0E),
buildNamespace() strips the frequency from the namespace hash (subnetwork
feature), causing all services to receive identical service references.
This results in each manual scan overwriting the previously scanned service,
so only the last scanned channel remains in the channel list.
The fix adds collision detection in channelDone() for both SDT and VCT
processing: after building the namespace, we check if a channel with the
same eDVBChannelID (namespace+TSID+ONID) already exists in the database.
If it does, we compare the actual transponder parameters using
calculateDifference(). When the existing channel is on a physically
different transponder (diff > 0), the frequency is preserved in the
namespace instead of being stripped, ensuring each service gets a unique
service reference.
This preserves the existing subnetwork behavior for normal channels where
TSID+ONID uniquely identifies a transponder, while preventing collisions
for the edge case of different services sharing SID+TSID+ONID on separate
frequencies.
(cherry picked from commit 429ef9f99626e60cc9aa91c48de6073edaa69eb9)
Continue reading...