DTT & CABLE Analyser v.2.1 by PantaSat 2026
Greetings to all forum members,
I am pleased to present the latest developments of my analyzer, now reaching version 2.1. The application has been fully localized into English: every single element of the graphical user interface (from configuration menus and dynamic mouse tooltips to graph headers), as well as physical log files and generated text reports (.txt), now natively speak English. This ensures maximum international compatibility and readability of technical logs and global statistical summaries, making them ready to be shared and analyzed anywhere without any language barriers.
I have prepared a complete image and a comprehensive demonstration video showing the entire operational cycle: rapid RF level scanning, deep spectral Blind Scan with MUX locking, and live streaming management toward external media players.
DEMO VIDEO
This software stands as one of the very few amateur DTT and Cable analyzers to bring together and integrate four distinct modules within a single interface:
- Continuous RF leveling and real-time visual spectrum tracking featuring advanced spline interpolation.
- Automatic tabular logging of all port physical parameters (Standard, Modulation, Constellation, FEC, Guard Interval, FFT, Cell ID, dBm, and real SNR).
- Instantaneous parsing of PAT/SDT tables with extraction of logical channel numbering (LCN), station names, and service types (TV/Radio/Data).
- A dedicated Multicast Streaming Controls hub for instantaneous forwarding of the video/technical stream to the most prominent external players and analyzers (FFplay, VLC, TSReader, VMA).
Demonstration Video Content
- RF SCAN & Dynamic Threshold: The analyzer maps out the UHF grid (channels 21-69), plotting the spectral curve directly onto a Matplotlib filled area. The dashed red line represents the hardware sensitivity threshold, which can be configured directly via software or adjusted in real time by dragging it across the graph with the mouse. During the scan, a green radar tracking line visually follows the active frequency under analysis.
- AIR BLIND SCAN & Lock Detection: Upon completion of the RF scan, the algorithm isolates authentic signal peaks and executes a targeted Blind Scan exclusively on active frequencies. The software pilots the radar positioning (marking red dots on the graph centered precisely on the peak of maximum power) and triggers an audible beep at every hardware LOCK confirmed by the demodulator.
- PAT Analysis & LCN Extraction: Upon locking each multiplex, the software performs an 8-second deep analysis, directly querying the DVB card's C++ libraries via Python ctypes structure mapping. The full station list is extracted, complete with local LCN allocation, Service ID (SID), and service stream encoding (e.g., TV HEVC, TV SD, Data).
- Clickable Station List & Multi-Player Streaming: All identified channels populate the listbox on the right side in real time. Double-clicking any station instructs the background thread to trace back the base multiplex frequency, isolate the requested SID within the UDP multicast stream, and deploy the external video stream. FFplay initializes with native YADIF deinterlacing filters applied, preserving the window title bar with the channel name and enforcing an "always on top" desktop placement.
Code Architecture Details
The underlying architecture relies strictly on multi-threaded programming designed to keep the user interface responsive and eliminate standard Windows thread freezing:
1. C++ Data Structures via Ctypes (Direct Hardware Mapping) Physical parameter recovery directly maps the StreamReader DLL memory. Utilizing a custom Python Structure, the software polls the SignalInfo2 function to read the hardware tuner chip registers:
class SEARCH_RESULT2(Structure): fields = [ ("Lock", c_bool), ("Freq", c_uint), ("BW", c_uint), ("SR", c_uint), ("StdType", c_uint), ("ModType", c_uint), ("FEC", c_uint), ("FECLP", c_uint), ("Inversion", c_uint), ("TransMode", c_uint), ("Guard", c_uint), ("Hierarchy", c_uint), ("PLP", c_uint), ("LID", c_ubyte * 16), ("CellID", c_uint), ("RFLevel", c_long), ("SNR", c_double), ("BER", c_double)... ]
This infrastructure allows the software to output critical parameters in the treeview table that commercial set-top boxes typically hide (such as 32K FFT sizing, complex guard intervals, or the local transmitter Cell ID).
2. Thread Monitoring & Asynchronous Process Cleanup (Anti-Freeze) When a live stream is initiated, the secondary thread continuously monitors the external process handle via proc.wait(). If you close the FFplay or VLC window manually, the thread catches the termination event and immediately executes a cleanup callback on the GUI main loop, safely releasing the hardware resource. Furthermore, halting a stream triggers a forced asynchronous cleanup routine through subprocess.Popen via a taskkill /F /T command executed inside an invisible prompt boundary (CREATE_NO_WINDOW), preventing rogue worker processes from dangling in memory.
3. Relative Export Paths & Full Portability (No Absolute Paths) As of version 2.1, the application is completely standalone and portable, having been purged of all hardcoded directory references. The script automatically determines its base directory at runtime via os.path.dirname(os.path.abspath(__file__)) and merges it with the relative sub-paths declared in the config.cfg file (e.g., Report_Scansione and DTT_Frequencies). You can rename, restructure, or move the root folder anywhere on your storage drive without breaking report logging or changing path access definitions for the external player suite.
DOWNLOAD: DTT_CABLE_Analyzer_2.1
Comments, test results, and technical feedback are welcome as always.
PantaSat 2026