Brevet FR2816145A1 — publié le 20020503

La présente invention a pour objet un procédé et un dispositif de filtrage des sections utiles d'un flux de données émises sous forme numérique. Elle se rapporte d'une manière générale au domaine de la réception d'informations numériques transmises par un réseau de télécommunications et utilisant le codage par"paquets"constitués d'un ensemble de données acheminées en blocs, et plus particulièrement des diffusions émises selon le protocole MPEG 2. Les données et informations sont de plus en plus diffusées sous forme de flux numériques découpés en"paquets". Cette technique se prête particulièrement bien à la transmission par satellites et est d'ores et déjà employée pour la télévision qui s'intègre progressivement dans les nouveaux réseaux de communications informatiques multimédias. Les récepteurs de signaux numériques tels que décodeurs satellites 1 ou ordinateurs équipés d'une carte de réception 2 peuvent sélectionner les données à recevoir sur un écran 3 en fonction du choix d'un utilisateur (par exemple une chaîne de télévision déterminée) (figure 1). Actuellement la diffusion d'émissions de télévision numérique par satellite s'effectue en général selon un protocole désigné par le sigle"MPEG-2"et caractérisé par des paquets en tête de chacun desquels est placé un identificateur ("PID": Packet Identifier) permettant d'identifier un flux de paquets. Un récepteur traitant un flux transport 4 au format MPEG-2 réalise plusieurs traitements afin d'exploiter ce flux. Un des traitements nécessaires consiste à filtrer des informations reçues sous forme de sections (cf norme MPEG-2 système : ISO/IEC 13818-1). Cette opération s'effectue au moyen d'un bloc de filtrage 5 comportant un filtre d'en-têtes 6 et un filtre de sections 7 permettant de ne transmettre que les sections filtrées à l'utilisateur 8. On parle alors de filtrage de sections dans un flux transport MPEG-2 (figure 2). Un flux transport 4 MPEG-2 est formé de paquets 9 de taille fixe (188 octets), composés chacun d'une en-tête 10 de 4 octets, et d'une partie utile 11 de 0 à 184 octets (on parle de"payload"). Le reste du paquet est constitué par un champ 12 appelé"adaptation field" (figure 3). L'en-tête 10 d'un paquet contient plusieurs champs, dont l'un est l'identificateur ou"Packet Identifier" (P) D). Ce champ permet d'isoler un flux de paquets transports 9 dans le flux transport 4 principal. Ce dernier est en effet composé de plusieurs flux d'information, chacun ayant un identificateur"PID"attribué, tous les flux d'information étant multiplexés en un seul flux transport. Les sections 13 à filtrer sont contenues dans la partie utile 11 ("payload") des paquets 9, et sont encapsulées dans ces paquets suivants certaines règles : - Un flux de section est contenu sur un PID et un seul, mais plusieurs flux de sections 13, 13'peuvent exister dans le flux transport 4 (chacun sur un PID dans ce cas) (figure 4). - Une section n'est par forcément alignée en début de paquet 9. - Une section peut être plus longue ou plus courte qu'un paquet. - Il peut y avoir plusieurs sections par paquet (si elles sont plus courtes que la partie utile 11 du paquet 9). - Une section peut être transmise sur plusieurs paquets si sa taille le nécessite. - Il est possible d'ajouter des octets de"bourrage" (valeur 255) à un paquet après une section pour indiquer qu'il n'y a plus de sections contenues dans ce paquet. Si un paquet 9 contient un début de section, son en-tête 10 l'indique par un bit particulier si sa valeur est 1 (Payload Unit Start Indicator ou PUSI : indicateur de début de contenu utile). Si le bit"PUSI"est monté dans l'en-tête du paquet (il y a un début de section dans le paquet), alors le premier octet de la partie utile 11 (payload) du paquet contient une valeur particulière appelée le pointeur de champ (pointer field), qui sert à donner la distance en nombre d'octets du premier début de section dans le paquet. Les positions des autres débuts de section dans ce paquet (s'il y en a) sont déduites à partir de la longueur de la première section qui est pointée par le pointeur de champ (ou pointer field). Une section a elle-même un en-tête, qui contient plusieurs champs dont la longueur de la section. Cette longueur permet de connaître la position de la section suivante. L'en-tête de section peut éventuellement être à cheval sur deux paquets transport (figure 5). Lors de la réception d'un flux transport 4, un récepteur doit filtrer les sections pour ne conserver que celles qui sont utiles, un composant de filtrage matériel, ou bloc de filtrage 5 pouvant être utilisé pour cela. La première étape consiste à isoler les flux de sections utiles dans le flux transport. Cette opération est réalisée par un filtre d'en-tête 6 appelé"demux" (démultiplexeur), qui filtre sur les PID contenus dans les en-têtes 10 des paquets transport. La deuxième étape consiste à filtrer les sections utiles dans le flux de section. Le récepteur utilise un filtre 7 sur des octets particuliers de la section, qui permettent de connaître son type, ainsi que des informations dépendant du type (voir figure 2). Le type de la section 13 est indiqué par le premier octet de celle-ci constituant l'identificateur de table"Tablejd" (TID). Les deuxième et troisième octets contiennent plusieurs champs, dont l'un indique la longueur de la section. Ces octets ne sont généralement pas utilisés dans le filtrage, sauf pour connaître la taille de la section. La signification des octets suivants dépend du type de la section (premier octet ou TID). Les premiers d'entre eux peuvent être utilisés par le mécanisme de filtrage. Les sections filtrées sont envoyées par l'intermédiaire d'un bus afin d'être stockées et traitées. Ce bus peut être par exemple : - un bus d'accès à une mémoire où les sections seront stockées avant d'être traitées par le processeur, - un bus de transfert (USB, Ethernet, ) qui permet d'envoyer les sections filtrées au matériel qui utilise ces sections (PC par exemple), Actuellement, les sections utiles ne sont envoyées que quand tous les octets 14 participant au filtrage de la section ont été vérifiés. Un problème se pose quand ces octets sont à cheval sur deux paquets transport (figure 5), car il faut alors stocker temporairement les octets qui ont été reçus, en attendant que tous les octets aient été vérifiés. La mémoire utilisée pour ce mécanisme fait partie du bloc de filtrage 5, et est assez conséquente, étant donné qu'elle est nécessaire pour chaque filtre de sections. Sa profondeur doit être égale au nombre d'octets maximum à filtrer permettant de dire si l'ensemble de la section sera récupérée (profondeur de filtrage). A titre indicatif, pour 16 filtres de 16 octets de profondeur, la taille de la mémoire est de 8 bits * 16 filtres * 16 octets = 2 Kbits, sans compter la logique relativement complexe permettant de contrôler l'utilisation de cette mémoire. La présente invention a pour objectif de remédier à cet état de choses en apportant une solution permettant de réduire fortement la taille et la complexité du bloc de filtrage, grâce à la suppression de la mémoire de stockage temporaire des sections, et de la logique associée à cette mémoire. Le procédé consiste à ajouter à la tête des fragments correspondant chacun à une partie d'une section située dans un paquet unique un en-tête de fragment indiquant la position du fragment dans la section, le numéro du filtre ayant filtré la section, et le"PID"ayant traité le paquet contenant le fragment, tous les fragments utiles étant envoyés à l'utilisateur à la fin de chaque paquet de façon à ne pas nécessiter de mémoire de stockage temporaire dans le bloc de filtrage. L'invention sera mieux comprise par la description qui va suivre, faite en se référant aux schémas annexés à titre indicatif seulement, et sur lesquels : la figure 1, déjà citée (de même que les figures 2 à 5), représente le schéma synoptique d'une station de réception, la figure 2 est un schéma du bloc de filtrage, la figure 3 montre la structure du flux transport, la figure 4 représente le placement de deux sections sur des paquets de"PID"différent, la figure 5 montre une section dont les octets à filtrer sont à cheval sur deux paquets, et les figures 6 à 8 illustrent différents cas de génération de fragments à partir des sections filtrées. Dans ce qui suit, le terme"utilisateur"8 des sections désigne l'entité (matérielle ou logicielle) qui reçoit et traite les sections 13 filtrées. Par ailleurs, on dira qu'une section est validée quand tous les bits ou octets permettant de filtrer cette section ont été comparés avec succès aux valeurs de référence. Pour éviter de stocker dans le bloc de filtrage les octets tant que tous les octets à filtrer n'ont pas été reçus, le mécanisme suivant est utilisé : - les sections 13 sont divisées en fragments 15 de section, un fragment correspondant à une partie d'une section située dans un paquet transport 9 unique (une section comprise entièrement dans un seul paquet transport sera composé d'un seul fragment. ) - chaque fragment 15 de section est encapsulé avant d'être envoyé à l'utilisateur 8. L'encapsulation consiste en l'ajout d'un en-tête de section 16 ou"header" devant le fragment de section, permettant de donner des indications sur le fragment, comme par exemple : si le fragment est un début de section, une fin de section, ou les deux, ainsi que le numéro du filtre ayant filtré la section, et le"PID"ou numéro de canal "PID"ayant traité le paquet 9 qui contient le fragment 15 (figure 6). - à chaque fin de paquet, tout fragment de section qui a été filtré avec succès est envoyé à l'utilisateur 8, Toutefois, cette situation est indiquée par la montée d'un indicateur F (F comme fragmenté), situé dans le "header" associé au fragment de section, indiquant à l'utilisateur du fragment que d'autres fragments de la section en cours de transmission sont attendus, et que ce dernier ne doit pas être utilisé tout de suite - il est possible que lors de la réception des derniers octets permettant de filtrer la section 13, la section soit rejetée. Dans ce cas, le récepteur du premier fragment 15 (incomplet) ne recevra jamais la suite de la section, mais recevra à la place un nouveau début de section lors de l'arrivée d'une prochaine section validée. Le fragment de la section incomplète doit alors être détruit sans être utilisé, ce traitement étant à la charge de l'utilisateur 8 (ordinateur, processeur ou autre) des sections (figure 7). Un problème se pose quand, à la fin d'un paquet, plusieurs filtres ont validé le fragment de la section, mais que la suite de la section est attendue dans un prochain paquet (un seul filtre validera la section finalement). Il est alors impossible d'attribuer un numéro de filtre au fragment de section. Ce problème est résolu de la façon suivante : - un numéro de filtre est choisi parmi les filtres ayant validé le fragment de section, et est attribué au fragment (placé dans le"header"du fragment) - l'indicateur F est monté, comme indiqué précédemment. Il permet à l'utilisateur de la section de savoir qu'il faut attendre la suite de la section afin d'être sûr du numéro de filtre - si lors de la réception des octets suivants de la section, le même filtre valide la section, alors tout se poursuit de façon classique - si lors de la réception des octets suivants de la section, aucun filtre ne valide la section, alors aucun autre fragment ne sera envoyé à l'utilisateur des sections (figure 7). Un nouveau fragment de début de section sera envoyé lors de la réception de la prochaine section validée. Le fragment de la section incomplète doit alors être détruit sans être utilisé, ce traitement étant à la charge de l'utilisateur (ordinateur, processeur ou autre) des sections - si lors de la réception des octets suivants de la section, un filtre différent valide la section, alors le numéro de ce nouveau filtre est attribué au fragment contenant ces nouveaux octets. L'utilisateur des sections doit détecter cette situation grâce à l'indicateur F et au numéro de canal du PID, qui reste le même entre les deux fragments. Autrement dit, un récepteur recevant un fragment avec l'indicateur F monté dans son en-tête de section 16 doit s'attendre à recevoir éventuellement la suite de cette section sur un autre filtre (le PID restant le même entre les deux fragments). Le numéro de filtre à utiliser dans l'en-tête de section 16'est le numéro de filtre du dernier fragment reçu (figure 8). La mémoire de stockage est transférée du bloc de filtrage 5 vers l'utilisateur 8 des sections (ordinateur, processeur,...). Elle n'est donc pas supprimée, mais transférée dans un bloc où la mémoire est généralement moins coûteuse. La suppression de cette fonctionnalité dans le bloc de filtrage requiert un travail supplémentaire du côté de l'utilisateur des sections. Toutefois, la situation où l'indicateur F est monté est assez rare, même si elle peut arriver, dans les flux MPEG. La plupart des sections filtrées ne nécessiteront pas de traitement supplémentaire par le bloc utilisateur des sections. Le positionnement des divers éléments constitutifs donne à l'objet de l'invention un maximum d'effets utiles qui n'avaient pas été, à ce jour, obtenus par des procédés similaires. REVENDICATIONS 1 . Procédé de filtrage des sections utiles d'un flux de données émises sous forme numérique et transmises par un réseau de télécommunications en utilisant le codage par"paquets"constitués d'un ensemble d'informations acheminées en blocs, et plus particulièrement des diffusions émises selon le protocole MPEG 2 dans lequel les sections (13) sont divisées en fragments (15) correspondant chacun à une partie d'une section située dans un paquet (9) unique, se caractérisant par le fait que tous les fragments utiles validés d'une section à filtrer sont envoyés à l'utilisateur (8) à la fin de chaque paquet (9) même si tous les octets permettant de filtrer la section (13) n'ont pas encore été reçus, de façon à ne pas nécessiter de mémoire de stockage temporaire dans le bloc de filtrage (5). 20. Procédé selon la revendication 1, se caractérisant par le fait qu'il est ajouté au début de chacun des fragments (15) un en-tête de fragment (16) indiquant la position du fragment dans la section, le numéro du filtre ayant filtré la section, et le"PID" ayant traité le paquet (9) contenant le fragment (15). 3. Procédé selon la revendication 2, se caractérisant par le fait que l'en-tête de fragment (16) de chaque fragment (15) comporte un indicateur de fragmentation indiquant à l'utilisateur (8) du fragment que d'autres fragments (15) utiles au filtrage de la section (13) en cours de transmission sont attendus, et que ledit fragment ne doit pas être utilisé tout de suite. 4. Procédé selon la revendication 3 se caractérisant par le fait que, lorsque plusieurs filtres du bloc de filtrage (5) ont validé le fragment (15) de la section (13) et que la suite de la section est attendue dans un prochain paquet (9), un numéro de filtre choisi parmi les filtres ayant validé le fragment est attribué au dit fragment et l'indicateur de fragmentation est activé pour indiquer à l'utilisateur (8) de la section de savoir qu'il faut attendre la suite de la section. 5. Procédé selon l'une quelconque des revendications précédentes, se caractérisant par le fait que l'utilisateur (8) des sections (13) comporte un système lui permettant d'éliminer un fragment (15) d'une section (9) incomplète lorsqu'il reçoit un nouveau début de section sur le même"PID"sans avoir reçu la fin de la section précédente. 6. Dispositif de filtrage des sections utiles d'un flux de données émises sous forme numérique et transmises par un réseau de télécommunications en utilisant le codage par"paquets"selon le protocole MPEG 2, destiné à être utilisé pour l'application du procédé selon les revendications précédentes, se caractérisant par le fait qu'il est dépourvu de mémoire de stockage temporaire des octets reçus.