TSDuck

Quelques commandes utiles pour manipuler des fichiers MPEG-TS avec les outils TSDuck

Installation sous Debian 12.7

à faire en root

1wget https://github.com/tsduck/tsduck/releases/download/v3.38-3822/tsduck_3.38-3822.debian12_amd64.deb
2dpkg -i tsduck_3.38-3822.debian12_amd64.deb
3apt -f install

note: https://tsduck.io/download/tsduck/ pour checker les nouvelles versions

AlmaLinux 9.4

1wget https://github.com/tsduck/tsduck/releases/download/v3.38-3822/tsduck-3.38-3822.el9.x86_64.rpm
2rpm -i tsduck-3.38-3822.el9.x86_64.rpm

Liste des commandes fournies par tsduck

1tsanalyze         tsdektec          tsfixcc           tslsdvb           tsresync          tstables
2tsbitrate         tsdump            tsftrunc          tsort             tsscan            tsterinfo
3tscharset         tsecmg            tsfuzz            tsp               tssmartcard       tstestecmg
4tscmp             tseit             tsgenecm          tspacketize       tsstuff           tsvatek
5tsconfig          tsemmg            tshark            tspcap            tsswitch          tsversion
6tscrc32           tset              tshides           tspcontrol        tstabcomp         tsxml
7tsdate            tsfclean          tslatencymonitor  tspsi             tstabdump

Quelques commandes utiles

Lister les plugins

1tsp --list-plugins

Extraire les pids

1% tsp -I file test.TS -P count -O drop
2* count: PID    0 (0x0000):      5,868 packets
3* count: PID   17 (0x0011):      7,091 packets
4* count: PID 3644 (0x0E3C):      7,752 packets
5* count: PID 3652 (0x0E44):    226,956 packets

Infos sur les tables

 1% tsp -I file test.TS -P psi -O drop
 2
 3* PAT, TID 0x00 (0), PID 0x0000 (0)
 4  Version: 20, sections: 1, total size: 16 bytes
 5  - Section 0:
 6    TS id:       1 (0x0001)
 7    Program:  1165 (0x048D)  PID: 3644 (0x0E3C)
 8
 9* SDT Actual, TID 0x42 (66), PID 0x0011 (17)
10  Version: 1, sections: 1, total size: 44 bytes
11  - Section 0:
12    Transport Stream Id: 0x0001 (1)
13    Original Network Id: 0x0000 (0)
14    Service Id: 0x048D (1165), EITs: no, EITp/f: no, CA mode: free
15    Running status: undefined
16    - Descriptor 0: Service (0x48, 72), 22 bytes
17      Service type: 0x02 (Digital radio sound service)
18      Service: "Test_Vaucluse_Iqoya", Provider: ""
19
20* PMT, TID 0x02 (2), PID 0x0E3C (3644)
21  Version: 1, sections: 1, total size: 16 bytes
22  - Section 0:
23    Program: 0x048D (1165), PCR PID: 0x0E44 (3652)

Remapper un pid (3644 -> 1165)

 1% tsp -I file test.TS -P count -O drop
 2* count: PID    0 (0x0000):      5,868 packets
 3* count: PID   17 (0x0011):      7,091 packets
 4* count: PID 3644 (0x0E3C):      7,752 packets
 5* count: PID 3652 (0x0E44):    226,956 packets
 6
 7% tsp -I file test.TS -P remap 3644=1165 -O file test2.TS
 8
 9% tsp -I file test2.TS -P count -O drop
10* count: PID    0 (0x0000):      5,868 packets
11* count: PID   17 (0x0011):      7,091 packets
12* count: PID 1165 (0x048D):      7,751 packets
13* count: PID 3652 (0x0E44):    226,918 packets
14* count: PID 8191 (0x1FFF):         39 packets

ça a ajouté des paquets de padding

Considérations sur le MPEG-TS

Fichier binaire composé d'une concaténation de paquets TS faisant 188 octets chacun. Chaque paquet commence par 0x47 (G en ASCII). Chaque paquet est identifié par son PID. Un flux peut contenir un programme unique SPTS ou plusieurs programmes multiplexés MPTS. Quelques valeurs de pids sont particulières.

  • PID 0 (0x00) = PAT, Program Association Table. Liste des PIDS de tous les PMT du streams.
  • PID 8191 (0x1FFF) = Null Packet, paquet de bourrage

Définitions

  • PID = Packet Identifier, sur 13 bits, nombre entre 0 (0x0000) et 8192 (0x1FFF), présent dans chaque paquet. Doit être répété tous les 100ms
  • PAT = Program Association Table. Liste des PIDS de tous les PMT du streams.
  • BAT = Bouquet Association Table. commercial operator description and services, several commercial operators may sell the same services
  • SDT = Service Description Table: editorial description of the services, service names and ancillary services
  • PMT = Program Map Tables. Pour chaque programme, la liste des PIDS associés + metadata. Doit être répété tous les 100ms. Les ES référencés sont entre 0x0020 et 0x1FFE
  • PCR = Program Clock Reference, identifie le PID qui contient l'horloge, généralement la vidéo ? optionnel ?

Exemple de composition de flux :

  • PID 0 (PAT)
  • PID 17 (BAT/SDT)
  • PID 110 (PMT) : Programme 1 = 120 + 130 + 131 + 132
  • PID 210 (PMT) : Programme 2 = 220 + 230 + 231 + 232
  • PID 310 (PMT) : Programme 3 = 320 + 330 + 331 + 332
  • PID 120 (PES) : Video
  • PID 220 (PES) : Video
  • PID 320 (PES) : Video
  • PID 130 (PES) : Audio fra
  • PID 131 (PES) : Audio qaa (version originale)
  • PID 132 (PES) : Audio qad (audio description)
  • PID 230 (PES) : Audio fra
  • PID 231 (PES) : Audio qaa (version originale)
  • PID 232 (PES) : Audio qad (audio description)
  • PID 330 (PES) : Audio fra
  • PID 331 (PES) : Audio qaa (version originale)
  • PID 332 (PES) : Audio qad (audio description)

où sont stockés :

  • LCN, SID : dans SDT
  • PCR : lien vers 1ère piste vidéo

Ressources sur MPEG-TS

comments powered by Disqus