Question sur LCN et table NIT

Pour exposer ou enrichir ses connaissances techniques sur le sujet...

Question sur LCN et table NIT

Messagepar Phil75 » 20 Oct 2025 21:04

Bonjour à tous,

en ce moment je développe une petite application permettant la réception de la TNT
par l’intermédiaire d'une clé USB Tuner TV sur PC.
J'en suis à la partie ou je dois rechercher les chaines.
Pour l'instant tout se passe bien.
Pour y arriver, je récupère les tables SDT, PAT et PMT.
Pour moi qui n'y connait rien, c'est pas simple le DVB, avec tous ces termes et
toutes ces normes.
J'aurais voulu aussi récupérer le LCN (Logical Channel Number), mais manifestement
il ne se trouve pas dans la table SDT, mais dans la table NIT.
J'ai une fonction DirectShow nommé "GetNIT" qui prend 2 arguments :

".tableId" et ".pwNetworkId"

que je comprends comme étant "Table ID" et "Network ID", mais je n'ai aucune idée de leurs valeurs !

De plus, pour récupérer tous les LCN, je ne sais pas s'il me suffit d'interroger la table NIT
une seule fois, ou si je dois le faire pour les 7 fréquences de la TNT.

Merci pour votre aide
Phil75
nouveau membre
 
Messages: 1
Inscription: 20 Oct 2025 19:51

Re: Question sur LCN et table NIT

Messagepar Franck Morin » 21 Oct 2025 12:16

Bonjour et bienvenue sur le forum. :Couc:

as-tu téléchargé les documents de l'ETSI sur le DVB-SI et autres normes DVB-T, où tout ça est indiqué ?

et sur le site de l'arcom tu as le profil de signalisation v4.0 qui doit te fournir les éléments utiles.
https://www.arcom.fr/presse/larcom-autorise-la-diffusion-en-ultra-haute-definition-de-france-2-et-de-france-3-sur-la-tnt

https://www.arcom.fr/sites/default/files/2023-11/Profil-de-signalisation-v4.0.pdf
Clés USB Ran T Stick+, RTL-SDR, August T210 - Axil RT0407HD/RT0420T2 - Strong SRT8209 ; Tour Eiffel collective et intérieure + TNT câble SFR.
RNT sur Sony XDR-P1DBPB, C10, Pure Elan Connect et PC avec DABplayer/QIRX -- Sites d'émission DAB+ -- Modérateur des forums TVNT.net
Avatar de l’utilisateur
Franck Morin
Administrateur
Administrateur
 
Messages: 19318
Inscription: 24 Juin 2005 11:26
Localisation: 78-Chatou

Re: Question sur LCN et table NIT

Messagepar pa.babao » 10 Nov 2025 13:17

Bonjour,

Phil75 a écrit:De plus, pour récupérer tous les LCN, je ne sais pas s'il me suffit d'interroger la table NIT
une seule fois, ou si je dois le faire pour les 7 fréquences de la TNT.


En théorie, une seule fois suffit. En pratique, la NIT est très souvent utilisée pour n'installer que les services du multiplex sur laquelle elle est diffusée. Ce qui permet des "astuces" ne respectant pas la norme, mais compatibles avec le parc de récepteurs, en ayant des NIT "spécifiques" sur certains multiplex, quand on ne veut pas tout changer (et surtout pas le numéro de version, censé déclencher des rescans).
Ces astuces restent "minoritaires" et souvent "temporaires", mais lors d'une installation de chaînes, ça peut faire manquer les numéros de quelques unes (temporaires, formats améliorés, etc.), si on ne s'appuie que sur une d'entre elles.

Cordialement
pa.babao
Etalon
Etalon
 
Messages: 2015
Inscription: 29 Aoû 2008 10:58

Re: Question sur LCN et table NIT

Messagepar rvs » 12 Avr 2026 01:43

Désolé si je suis très en retard...

J'ai travaillé sur CodeTV en 2012 (https://github.com/dgis/CodeTV). Le Hervé que tu pourra voir sur le repo et le code, c'est moi. J'ai exporter le code de parsing des tables dans une dll, j'ai ajouté le parsing de la table NIT et mis à jour certaine constante par rapport à la norme (de 2012 :D ).
C'est du C# qui utilise directshownet (https://sourceforge.net/projects/directshownet/).

J'ai du code qui permet de lire le LogicalChannel ainsi que le HDSimulcastLogicalChannel (oui, on était en pleine transition SD vers HD).
Code: Tout sélectionner
        Dim logicalChannelNumberByServiceId As Hashtable = New Hashtable
        Dim simulCastlogicalChannelNumberByServiceId As Hashtable = New Hashtable
        Dim psiNits As PSISection() = PSISection.GetPSITable(PIDS.NIT, TABLE_IDS.NIT_ACTUAL, mpegdata)
        If psiNits.Length > 0 Then
            networkId = CShort(DirectCast(psiNits(0), PSINIT).NetworkId)
            For i As Integer = 0 To psiNits.Length - 1
                Dim psiNit As PSISection = psiNits(i)
                If Not (psiNit Is Nothing) And TypeOf (psiNit) Is PSINIT Then
                    Dim nit As PSINIT = DirectCast(psiNit, PSINIT)
                    For Each data As PSINIT.Data In nit.Streams
                        For Each psiDescriptordata As PSIDescriptor In data.Descriptors
                            If psiDescriptordata.DescriptorTag = DESCRIPTOR_TAGS.DESCR_LOGICAL_CHANNEL Then
                                Dim psiDescriptorLogicalChannel As PSIDescriptorLogicalChannel = DirectCast(psiDescriptordata, PSIDescriptorLogicalChannel)

                                For Each f As PSIDescriptorLogicalChannel.ChannelNumber In psiDescriptorLogicalChannel.LogicalChannelNumbers
                                    logicalChannelNumberByServiceId(f.ServiceID) = f.LogicalChannelNumber
                                Next
                            ElseIf psiDescriptordata.DescriptorTag = DESCRIPTOR_TAGS.DESCR_HD_SIMULCAST_LOGICAL_CHANNEL Then
                                Dim psiDescriptorHdSimulcastLogicalChannel As PSIDescriptorHDSimulcastLogicalChannel = DirectCast(psiDescriptordata, PSIDescriptorHDSimulcastLogicalChannel)
                                For Each f As PSIDescriptorHDSimulcastLogicalChannel.ChannelNumber In psiDescriptorHdSimulcastLogicalChannel.HdSimulcastlogicalChannelNumbers
                                    simulCastlogicalChannelNumberByServiceId(f.ServiceID) = f.LogicalChannelNumber
                                Next
                            End If
                        Next
                    Next
                End If
            Next
        End If


Je ne sais pas si cela pourra t’aider. Pour ma part c'est loin et je ne suis plus capable de t'aider rapidement.
rvs
Grenouille
Grenouille
 
Messages: 468
Inscription: 04 Déc 2007 00:09