Repository navigation
v2.1.0
TSDEC 2.1.0
Offline decrypter for recorded DVB transport streams.
Small release: it adds the two things a graphical front end needs before it can
be built honestly.
Downloads
| platform | binary | archive |
|---|---|---|
| Linux x86-64 | tsdec-linux-x86_64 |
tsdec-linux-x86_64.tar.gz |
| macOS arm64 (Apple Silicon) | tsdec-macos-arm64 |
tsdec-macos-arm64.tar.gz |
| Windows x86-64 | tsdec-windows-x86_64.exe |
tsdec-windows-x86_64.tar.gz |
The binaries are plain executables: no runtime, no shared library, no install
step. The archives are the same file plus the README and the licence.
Quick start
chmod +x tsdec-linux-x86_64
./tsdec-linux-x86_64 -f control-words.cwl -i recording.ts -o clear.ts -POn Windows, just run tsdec-windows-x86_64.exe.
What is new
You can stop it. Ctrl+C asks the job to stop instead of killing it.
tsdec -f log.cwl -i big-recording.ts -o clear.ts -P
# ... press Ctrl+C partway through
# clear.ts now holds everything processed before the stopWhatever was decrypted up to that point is kept. The partial output stays a
whole number of packets and stays playable, so stopping a long recording never
throws away work already done. The stop is noticed between blocks, a block
being about a megabyte, so it takes effect within a fraction of a second.
The exit status distinguishes stopped on request from could not sync from
input was not encrypted, so a front end can say what actually happened rather
than just "error".
Progress is reported as data. tsdec_run() takes a callback that fires a
few times a second with packets processed and the size of the input, which is
what a real progress bar with a throughput figure and an estimate is built
from. tsdec_job_t replaces the long argument list; the old entry point stays
as a wrapper.
A front end is on the way
The Win32 GUI of 0.4.1 exposed almost none of what the command line can do, so
it was not carried over. A replacement is being built separately in
tsdec-gui. It drives this binary
through its command line rather than duplicating any of this code, which is why
the stop path had to exist first.
Tests
make test checks the bitsliced engine against the scalar one bit for bit,
against the published DVB test vectors, and drives the stop path at one and at
eight threads, checking that the output stays packet aligned and that what was
written before the stop is byte identical to the plaintext.
tools/run_tests.sh builds synthetic transport streams, encrypts them through
tsdec's own constant control word path so the generated log genuinely matches
the data, decrypts them again and compares packet by packet. 17 checks, run on
Linux, macOS and Windows in CI, and the full suite is what produced these
binaries.
Full changelog
https://github.com/prof-abdo/tsdec/blob/main/CHANGELOG.md
Attribution
Based on TSDEC V0.4.1 by ganymede. The CSA engine and the FFdecsa bitslice
implementation come from libdvbcsa by Alexandre Becoulet. GPL v3.