FR 3027180 A1 20160415 FR 1459682 A 20141009 1 DOMAINE TECHNIQUE GENERAL La présente invention concerne un procédé de diffusion d'un contenu en streaming dans un réseau pair à pair. ETAT DE L'ART Le « streaming » (en français « lecture en continu »), désigne une technique de lecture d'un flux audio ou vidéo « en direct », c'est-à-dire au fur et à mesure qu'il est récupéré depuis Internet par un équipement client. Elle s'oppose ainsi au téléchargement, qui nécessite de récupérer l'ensemble des données du contenu audio ou vidéo avant de pouvoir le lire. Dans le cas du streaming, le stockage du contenu est provisoire et partiel, les données étant téléchargées en continu dans une mémoire tampon du client (typiquement la mémoire vive), analysées à la volée par son processeur et rapidement transférées vers une interface de sortie (un écran et/ou des enceintes) puis remplacées par de nouvelles données. De façon traditionnelle, le contenu est mis à disposition sur un serveur de streaming. Le client souhaitant y accéder envoie une requête pour en récupérer les premiers segments (par segment, on entend un bloc des données du contenu, généralement correspondant à quelques secondes de lecture). Lorsqu'il y a suffisamment de données dans la mémoire tampon pour permettre de lire le début du contenu, la lecture démarre. En arrière-plan, le téléchargement du flux se poursuit afin d'alimenter sans cesse la mémoire tampon avec la suite du contenu. On constate néanmoins que cette approche à ses limites si un grand nombre de clients souhaitent lire le même contenu simultanément : le serveur se retrouve saturé, dans l'incapacité de fournir le contenu à un débit suffisant pour que la lecture soit fluide, et des saccades apparaissent. Il a récemment été proposé une stratégie alternative basée sur le « peer-to- peer » (P2P, en français pair-à-pair), dans laquelle chaque client agit comme un serveur pour d'autres clients : on parle de pairs. Un pair qui a commencé la lecture du contenu va retransmettre à d'autres les segments qu'il a déjà reçus, et ainsi de suite, d'où une facilité de diffusion quel que soit le nombre de clients intéressés. Cette stratégie est décrite dans la demande internationale WO 2012/154287. 3027180 2 Toutefois, bien que le P2P soit extrêmement efficace pour le téléchargement des fichiers, des difficultés apparaissent lorsqu'il est utilisé pour le streaming. En effet, dans la mesure où le stockage d'un contenu streamé est partiel et temporaire, il faut bien que certains pairs téléchargent les données 5 depuis un serveur pour pouvoir les servir à d'autres pairs. De plus, un contenu téléchargé peut l'être dans n'importe quel ordre : chacun de ses blocs peut être récupéré indépendamment. Or, pour le streaming, il faut respecter l'ordre de lecture de ses blocs, appelées segments (chacun correspondant typiquement à 1 à 8 secondes du contenu, en particulier 1 à 4 secondes pour le live streaming et 3 à 10 8 secondes pour la vidéo à la demande, voir plus loin). Ainsi, on peut se retrouver dans des cas paradoxaux où de très nombreux pairs disposeraient par exemple des segments centraux d'un contenu, mais pas de ceux du début, d'où une nécessité de solliciter massivement le serveur de la part des nouveaux pairs sans quoi ils ne peuvent pas débuter la lecture. 15 De plus, les pairs n'ont pas tous la même capacité d'upload (en français téléversement), c'est-à-dire d'envoi de données à d'autres pairs, ce qui complexifie encore la gestion des flux. Par ailleurs, un cas particulier du streaming, à savoir le « Live Streaming » (c'est-à-dire le « streaming en direct ») s'avère encore plus complexe à gérer. Le 20 Live streaming propose de diffuser en temps réel des contenus associés à des événements « en live », par exemple des concerts, des conférences, des rencontres sportives, des parties de jeux vidéo, etc., qui sont en train de se dérouler simultanément. Par rapport au streaming d'un contenu déjà intégralement existant tel qu'un film, un contenu diffusé en Live streaming est en effet généré au 25 fur et à mesure que l'événement associé se déroule. Techniquement, comme dans le cas d'un direct à la télévision, un tel contenu ne peut être diffusé qu'avec un léger retard, que l'utilisateur souhaite le plus faible possible. Ce retard est typiquement de l'ordre d'une minute, mais peut descendre jusqu'à une vingtaine de secondes. Ceci fait qu'une liste de lecture de seulement une poignée de segments 30 (tout au plus quelques dizaines) est disponible à chaque instant, les segments de cette liste étant renouvelés dynamiquement selon un roulement : au fur et à mesure que l'événement se déroule des nouveaux segments sont créés, « vieillissent », sont reçus et lus par les clients (à l'issu du retard prévu), et enfin sortent de la liste. 3027180 3 La présente invention vient améliorer la situation en proposant une méthode innovante de gestion des pairs en streaming P2P, en particulier live streaming P2P, qui est optimale en termes d'efficacité de la diffusion du contenu, d'encombrement des mémoires tampons des pairs, et de simplicité algorithmique. 5 PRESENTATION DE L'INVENTION La présente invention se rapporte ainsi à un procédé de diffusion d'un contenu en streaming dans un réseau pair à pair d'équipements clients connecté à 10 un serveur de contenu, ledit contenu étant constitué d'une séquence de segments stockés sur des moyens de stockage de données du serveur de contenu, chaque équipement client comprenant une mémoire tampon stockant de façon temporaire au moins un segment dudit contenu, le procédé étant caractérisé en ce que chaque équipement client est associé à un niveau définissant une liste minimale 15 de segments du contenu devant être stockés par la mémoire tampon de l'équipement, le procédé comprenant des étapes de : (a) Connexion d'un nouvel équipement client au réseau pair-à-pair ; (b) Affectation d'un niveau au nouvel équipement client en fonction du nombre d'équipements clients associés à chaque niveau ; 20 (c) Transmission audit nouvel équipement client depuis le serveur d'au moins chaque segment du contenu absent de la mémoire tampon du nouvel équipement client, qui appartienne à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client. 25 Selon d'autres caractéristiques avantageuses et non limitatives : - l'étape (c) comprend la transmission audit nouvel équipement client depuis des équipements clients associés à un niveau supérieur au niveau affecté audit nouvel équipement client d'au moins un segment du contenu absent de la mémoire tampon du nouvel équipement client, qui n'appartienne pas à ladite liste de 30 segments du contenu correspondant au niveau affecté au nouvel équipement client ; - le réseau pair à pair est en outre connecté à un serveur de gestion de pairs configuré pour gérer la transmissions de segments entre équipements client, l'étape (b) étant mise en oeuvre par le serveur de gestion de pairs (3) ; 3027180 4 - l'étape (a) comprend directement la transmission audit nouvel équipement client depuis le serveur d'au moins un premier segment du contenu ; - les équipements clients sont classés en L niveaux, chaque niveau k E Q1, /11 définissant une liste des sk premiers segments consécutifs de la séquence de 5 segments constituant le contenu ; - le nombre sk de segments est croissant avec le niveau k ; - l'étape (b) consiste à identifier et à affecter au nouvel équipement client le plus petit niveau k E [[1, /1 tel que Vi E Ric + 1, L]], ni > C * ni_1, où ni désigne le nombre d'équipements client du réseau pair à pair associé au niveau i ; 10 - C est un coefficient fonction de l'état du réseau calculé par le serveur de gestion des pairs ; - le contenu est diffusé en direct, la séquence de segments constituant le contenu étant mise à jour à intervalle régulier de telle sorte qu'à chaque mise à jour le premier segment de la séquence est supprimé, et un nouveau segment est 15 ajouté à la fin de la séquence ; - chaque liste minimale de segments du contenu définissant un niveau est mise à jour en conséquence à chaque mise à jour de la séquence de segments constituant le contenu ; - l'étape (c) comprend un échange de niveau entre le nouvel équipement client 20 et un autre équipement client de niveau différent ; - est calculé pour chaque équipement client de niveau différent au nouvel équipement client et le nouvel équipement client une heuristique, le nouvel équipement client échangeant de niveau avec un autre équipement client de niveau différent si l'heuristique de l'équipement client de niveau le plus élevé est 25 inférieure à l'heuristique de l'équipement client de niveau le plus fiable ; - le calcul de l'heuristique d'un équipement client comprend des étapes de : - Initialisation de l'heuristique H de l'équipement client à une valeur moyenne ; - Mise à jour régulière de l'heuristique H de l'équipement client en fonction 30 d'un compteur de segments reçus et d'un compteur de requêtes expirées pour ledit équipement client ; - le procédé comprend à chaque mise à jour de la séquence de segments : - si chaque segment du contenu appartenant à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client est 3027180 5 présent dans la mémoire tampon du nouvel équipement client, diminution du niveau affecté au nouvel équipement tant que le ledit niveau reste au-dessus d'un niveau minimum, - si au moins un segment du contenu appartenant à ladite liste de segments 5 du contenu correspondant au niveau affecté au nouvel équipement client est absent de la mémoire tampon du nouvel équipement client, affectation au nouvel équipement d'un niveau maximum. Selon un deuxième et un troisième aspect, l'invention concerne 10 respectivement un produit programme d'ordinateur comprenant des instructions de code pour l'exécution d'un procédé selon le premier aspect de l'invention de diffusion d'un contenu en streaming dans un réseau pair à pair d'équipements client connecté à un serveur de contenu ; et un moyen de stockage lisible par un équipement informatique sur lequel un produit programme d'ordinateur comprend 15 des instructions de code pour l'exécution d'un procédé selon le premier aspect de l'invention de diffusion d'un contenu en streaming dans un réseau pair à pair d'équipements client connecté à un serveur de contenu. PRESENTATION DES FIGURES 20 D'autres caractéristiques et avantages de la présente invention apparaîtront à la lecture de la description qui va suivre d'un mode de réalisation préférentiel. Cette description sera donnée en référence aux figures annexées dont : - la figure 1 représente une architecture pour la mise en oeuvre du 25 procédé selon l'invention ; - la figure 2 illustre des niveaux de priorité utilisés dans un mode de réalisation du procédé selon l'invention. DESCRIPTION DETAILLEE 30 Architecture En référence à la figure 1, l'invention propose un procédé de diffusion d'un contenu en streaming dans un réseau 1 tel que représenté. Le réseau 1 est ici un 35 réseau de télécommunications à grande échelle et en particulier Internet. Ce 3027180 6 réseau 1 comprend un réseau pair-à-pair 10 d'équipements client 11, 12, 13 (auquel on verra qu'un nouvel équipement client 14 du même type va se rajouter). Chaque équipement client 11, 12, 13 est typiquement un équipement informatique personnel tel qu'un smartphone, un PC, une tablette, etc. connectée au réseau 1, 5 disposant de moyens de traitement de données tels qu'un processeur, d'une interface pour la lecture du contenu, et disposant d'un mémoire tampon (appelée également « buffer »), typiquement une zone d'une mémoire vive, pouvant stocker comme l'on va voir tout ou partie du contenu de façon temporaire (par temporaire, on entend que les segments sont supprimés de cette mémoire peu de temps après 10 qu'ils aient été lus : il ne sont pas stocké à long terme comme c'est le cas pour un téléchargement direct). Comme expliqué dans l'introduction, ces équipements 11, 12, 13 sont des « pairs » (appelés également « noeuds ») du réseau pair-à-pair 10. Par « équipements client 11, 12, 13 d'un réseau pair-à-pair 10 » on entend 15 des équipements connectés dans le réseau 1 par un protocole réseau pair-à-pair. En d'autres termes, les moyens de traitement de données de chaque pair mettent en oeuvre un programme particulier (logiciel client), qui peut être intégré à un navigateur web, pour l'utilisation du pair-à-pair. En effet, un réseau pair-à-pair, ou « peer-to-peer » ou encore P2P, est un 20 sous-réseau décentralisé au sein du réseau 1, dans lequel des données peuvent être transférées directement entre deux équipements client 11, 12, 13 du réseau 10, sans transiter par un serveur central. Il permet ainsi à tous les équipements client 11, 12, 13 de jouer à la fois le rôle de client et serveur. Les pairs 11, 12, 13 sont ainsi définis comme des « seeders » (en français les « semeurs », c'est-à-dire 25 des fournisseurs de données) et/ou des « leechers » (en français les « sangsues », c'est-à-dire des receveurs de données). Ledit contenu, qui est en particulier un contenu audio ou vidéo, c'est-à-dire un média d'une certaine durée, est constitué d'une séquence de segments (dite « liste de lecture », en anglais « playlist ») stockés sur des moyens de stockage de 30 données d'un serveur 2 connecté au réseau pair-à-pair 10. Les segments ont une longueur prédéterminée, typiquement une ou deux secondes du contenu, mais elle peut aller d'une fraction de seconde à une dizaine de secondes. Tous les segments d'un contenu donné ont généralement la même longueur. Le serveur 2 est un serveur de contenu. En d'autres termes, il s'agit d'un 35 (ou plusieurs) serveurs du réseau internet 1 mettant à disposition les segments de 3027180 7 divers contenus conformément à un protocole de streaming donné. On citera par exemple l'exemple de HLS (« HTTP Live Streaming »), dans lequel les segments sont des fichiers « ts », listés dans un fichier playlist « m3u8 ». HLS implique le format MPEG2 pour le contenu. On citera également les protocoles de streaming 5 DASH, Smooth streaming, ou HDS. Le serveur 2 est la source primaire des segments, dans la mesure où initialement aucun pair ne dispose du contenu (avant un premier transfert du serveur 2 vers ce pair 11, 12, 13). Les contenus sont soit dès l'origine stockés dans leur intégralité sur le serveur 2 (cas de la VOD, « Video On Demand » i.e. 10 vidéo à la demande, ou de la vidéo en temps différé), soit générés en temps réel (cas du live streaming, ou streaming en direct), et dans ce dernier cas la liste de segments qui les constitue évolue dynamiquement. Plus précisément, dans ce dernier cas (live streaming), le contenu doit plutôt être vu comme un flux en continu. La séquence de segments est ainsi 15 dynamique, c'est-à-dire qu'elle est mise à jour régulièrement. A chaque fois qu'un nouveau segment est généré il est ajouté en fin de la séquence, et le premier segment de la séquence (le plus ancien) est supprimé. Tous les autres se décalent selon un mécanisme de roulement que l'on peut apparenter à une liste FIFO. Le premier segment de la liste (le plus ancien) peut être celui au niveau du point de 20 lecture, en d'autre termes le segment « en direct » (et donc les segments sont supprimés de la liste de lecture dès qu'ils sont lus), ou un segment « passé » si le serveur de contenu accepte qu'on lise le contenu avec du retard (certaines plateformes proposent du live streaming avec jusqu'à 2h de retard). On note que des listes de lectures dynamiques peuvent aussi être utilisées pour de la VOD. 25 Dans la suite de la présente demande, on prendra le mode de réalisation préféré dans lequel la liste de lecture est dynamique (exemple du live streaming), et on supposera qu'à tout instant le premier segment de la séquence est le « prochain » segment qui sera lu, le deuxième segment est le deuxième prochain qui sera lu, etc., et le dernier segment de la séquence est celui dont l'existence est 30 la plus récente, et qui sera lu lorsque tous les autres segments de la séquence auront été lus et qu'il sera devenu le premier (à ce moment-là d'autres nouveaux segments auront complété la séquence en remplacement de tous ceux qui auront déjà été lus). Alternativement, la liste des segments est statique. 3027180 8 Est également connecté au réseau pair-à-pair 10 un serveur de gestion de pairs 3 appelé « tracker ». Le tracker 3 présente des moyens de traitement de données 31 et des moyens de stockage 32. Il coordonne les échanges entre pairs 11, 12, 13 (en contrôlant le logiciel client mis en oeuvre par chacun des 5 équipements client 11, 12, 13), mais il n'est pas directement impliqué dans le transfert de données et ne possède pas de copie du fichier. En revanche, il communique avec le serveur de contenu 2. Pour chacun des contenus stockés sur ce serveur 2, le tracker 3 reçoit (sur requête ou par push) du serveur 2 un fichier « manifeste » pour chacun des contenus. Ce fichier 10 manifeste est un descriptif du contenu (au format XML pour la plupart des protocoles de streaming sauf HLS), et contient notamment la liste des segments. Le tracker 3 analyse alors le manifeste (par « parsing », i.e. analyse syntaxique) de sorte à extraire la liste des segments. Dans le cas du live streaming, le manifeste est en général réémis à 15 intervalle régulier de sorte à permettre une mise à jour de la liste de lecture (on rappelle que comme le contenu est généré en direct en permanence des segments nouveaux entrent dans la liste de lecture et d'autres la quittent quand ils sont devenus trop anciens et ont dépassé le point de lecture). Alternativement, est fourni un squelette de manifeste (c'est-à-dire sans la liste des segments) 20 accompagné d'indications temporelles (dont un horodatage, en anglais « timestamp ») permettant de déterminer quand chaque nouveau segment est émis, ce qui permet au tracker 3 (et aux équipements clients 11, 12, 13, 14, comme l'on verra plus loin) de compléter ce squelette et de le mettre à jour tout seul. 25 Pour chaque manifeste (obtenu complet ou dont la liste de lecture a été automatiquement complété), le tracker 3 réalise un « hash », c'est-à-dire met en oeuvre une fonction de hachage de sorte à obtenir une empreinte du manifeste, qui constitue une signature du contenu auquel le manifeste est associé, et dont on verra l'utilité plus loin. Il est à noter que le hash peut être mis en oeuvre sur 30 l'adresse du manifeste (son URL, « Uniform Resource Locator »), ce qui est intéressant puisque une URL reste constante même si le manifeste change régulièrement (du fait du live streaming). Connexion d'un nouvel équipement client au réseau pair-à-pair 35 3027180 9 Dans la suite de la présente description, on suppose que le réseau pair-àpair comprend au moins un équipement client 11, 12, 13 comprenant déjà sur sa mémoire tampon au moins un segment du contenu à diffuser, et qu'un nouvel équipement 14 (sur la mémoire tampon duquel aucun segment du contenu n'est 5 encore disponible) se connecte au réseau pair-à-pair 10 dans une étape (a), en vue de récupérer un contenu donné. Dans le cas contraire, si le réseau pair-à-pair 10 ne comprenait aucun équipement client 11, 12, 13 ou qu'aucun de ces équipements ne disposait du moindre segment du contenu (en d'autre termes que le nouvel équipement 14 était 10 le premier à désirer consulter ce contenu), alors le nouvel équipement n'aurait pas d'autre choix que de récupérer le contenu intégralement depuis le serveur de contenu 2 (puisqu'il n'est disponible nulle part ailleurs). Dans le cas où au moins un segment est déjà disponible, on va voir 15 comment le contenu se diffuse. De façon connue, le nouvel équipement client 14 se connecte au serveur de contenu 2 et sélectionne le contenu dont il souhaite la lecture (comme expliqué, on suppose qu'on se place dans un cas de live streaming et donc que le contenu est généré en direct). 20 Le serveur 2 transmet au client le manifeste du contenu, et ce client met en oeuvre le parsing pour obtenir la liste (actuelle) des segments de la séquence. De façon préférée, l'étape (a) comprend ensuite directement (c'est-à-dire avant d'établir un éventuel transfert pair-à-pair) la transmission audit nouvel équipement client 13 depuis le serveur 2 d'au moins un premier (selon la séquence) segment 25 du contenu, en d'autres termes le prochain à être lu. Cela permet à l'utilisateur de commencer la lecture du contenu au plus vite pour un maximum de confort. Il peut être prévu une durée minimale de préchargement, par exemple dix secondes (soit cinq segments de deux secondes). Cette transmission est effectuée sur requête de l'équipement client 14. 30 Pendant ce temps, le nouvel équipement client 14 réalise le hash du manifeste et envoie l'empreinte associée au tracker 3. Celui-ci la compare avec celles dont il dispose, et identifie ainsi le contenu associé, de sorte à initier des transferts de segments entre équipements clients 11, 12, 13, 14. 35 Niveaux de priorité 3027180 10 Dans l'art antérieur, il est connu de récupérer les segments depuis le serveur de contenu 2 ou d'autres équipements 11, 12, 13 selon une règle donnée : si suffisamment de segments d'avance sont stockés dans la mémoire tampon du 5 nouvel équipement client 14, alors on privilégie un transfert entre équipements du réseau pair-à-pair 10, sinon on sollicite un transfert depuis le serveur 2. Cela rejoint le mécanisme de préchargement évoqué précédemment : l'équipement 14 fait en sorte d'avoir toujours une durée minimale prédéterminée du contenu stockée sur la mémoire tampon, par exemple dix secondes (soit cinq 10 segments de deux secondes). Cette durée minimale est appelée la marge de criticité. Cela permet théoriquement à l'utilisateur un confort maximal. Toutefois, on constate que lorsqu'un segment est trop rare, de nombreux équipements vont se trouver simultanément à devoir le charger depuis le serveur 2, qui va être saturé 15 en upload et incapable de le servir suffisamment vite à tout le monde, ce qui résultera dans des blocages de la lecture du contenu pour de nombreux utilisateurs. Ceci est particulièrement susceptible de survenir en live streaming, puisque d'une part la lecture est synchronisée (tous les utilisateurs lisent les mêmes 20 segments en même temps), et d'autre part la marge de criticité ne peut être que très courte (comme expliqué la liste de lecture ne contient au maximum que quelques dizaines de segments). En cas de saturation du serveur 2, les utilisateurs devront patienter le temps que leur équipement « rebufferise » suffisamment de segments, ce qui est 25 très gênant dans la mesure où des utilisateurs peuvent constater des saccades, voire une interruption totale de lecture pendant plusieurs secondes, ce qui est très gênant lors de la diffusion d'un contenu en direct (on peut imaginer la colère d'un utilisateur qui manquerait un but lors d'un match de football). 30 Le présent procédé de diffusion d'un contenu en streaming dans le réseau pair à pair 10 se distingue en ce qu'il propose de générer de façon contrôlée un décalage entre les téléchargements serveur de différents équipements clients 11, 12, 13, 14 pour faciliter la diffusion des segments entre pairs. Ce décalage est obtenu via l'affectation aux pairs dans une étape (b) (qui 35 est mise en oeuvre de façon préférée par le tracker 3 et qui sera décrite plus en 3027180 11 détail plus loin) de « niveaux de priorité », chacun définissant une liste minimale de segments du contenu devant être stockés par la mémoire tampon de l'équipement 11, 12, 13, 14. Plus précisément les segments de cette liste sont récupérés depuis le serveur 2 s'ils sont manquants. 5 En d'autres termes, le procédé comprend une étape (c) de transmission (toujours sur requête de l'équipement client 14 : c'est lui qui identifie les segments manquants qu'il doit avoir sur sa mémoire tampon, et les demande au serveur 2) audit nouvel équipement client 14 depuis le serveur 2 d'au moins chaque segment du contenu qui : 10 - soit absent de la mémoire tampon du nouvel équipement client 14, et qui - appartienne à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client 14. Les autres segments sont si possible récupérés depuis des pairs, c'est-à- 15 dire que l'étape (c) consiste préférentiellement en la transmission (toujours sur requête de l'équipement client 14) audit nouvel équipement client 14 de chaque segment du contenu absent de la mémoire tampon du nouvel équipement client 14 . - depuis le serveur 2 si le segment appartient à ladite liste de segments 20 du contenu correspondant au niveau affecté au nouvel équipement client 14 ; - depuis des équipements clients 11, 12 associés à un niveau supérieur au niveau affecté audit nouvel équipement client 14 sinon (i.e. transmission d'au moins un segment du contenu absent de la mémoire 25 tampon du nouvel équipement client 14, qui n'appartienne pas à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client 14). Il est à noter que dans le cadre de la récupération de segments au sein du réseau pair-à-pair 10 (i.e. depuis d'autres équipements client), le segment, qui est 30 une unité de données vidéo, est subdivisée en sous-unités appelés « chunks » (en français « morceaux ») de taille fixe et plus petite. Une conséquence est notamment qu'on peut demander différents chunks d'un même segment à différents pairs (et donc qu'un segment peut au final provenir d'une pluralité d'équipements clients 11, 12, 13). 35 3027180 12 De façon préférée, dans l'hypothèse où on a L niveaux, chaque niveau k E Q1, /11 définit une liste des sk premiers segments consécutifs du contenu, en d'autres termes les sk prochains segments qui seront lus. Cela équivaut à des marges de criticité variables : en effet, les segments 5 ayant généralement une durée équivalente (et souvent constante), imposer la présence de sk segments d'avance revient à imposer d'avoir sk*durée segment secondes de contenu présent sur la mémoire tampon. Et de façon encore préférée, le nombre sk de segments est croissant avec le niveau k. Cela fait que les équipements client 11, 12, 13, 14 avec un niveau de 10 priorité faible n'auront à récupérer depuis le serveur 2 qu'un petit nombre de premiers segments, les autres étant récupérés depuis le réseau pair-à-pair 10, alors que ceux avec un haut niveau de priorité solliciteront davantage le serveur 2. La conséquence est que les équipements client 11, 12, 13, 14 avec un haut niveau de priorité auront en moyenne en stock plus de segments que ceux avec un 15 faible niveau de priorité, et qu'un transfert via le réseau pair-à-pair 10 sera possible des premiers vers les seconds. Il s'agit d'un mécanisme dit en cascade qui va favoriser la diffusion équilibrée des segments via le réseau pair-à-pair 10. Dans le cas du live streaming, on a montré que la séquence de segments constituant le contenu est mise à jour à intervalle régulier. Par conséquent, chaque 20 liste minimale de segments du contenu définissant un niveau est mise à jour en conséquence à chaque mise à jour de la séquence de segments constituant le contenu. Une telle mise à jour de la liste définissant un niveau peut entraîner à nouveau la nécessité pour l'équipement 14 de télécharger un segment auprès du serveur 2. On peut par exemple imaginer que pour un équipement de niveau k les 25 sk premiers segments ont été téléchargés depuis le serveur 2, et que le sk+rième est téléchargé depuis un autre équipement, mais à une vitesse plus lente que la vitesse de lecture : lors de la mise à jour de la liste de lecture, le sk+rième segment entre dans la liste de lecture et doit être récupéré depuis le serveur 2 puisqu'il est manquant. On notera que l'équipement peut n'avoir qu'une partie d'un segment à 30 récupérer depuis le serveur 2. La figure 2 représente un exemple d'organisation par niveaux (cas du live streaming), dans lequel sont représentés en grisé pour chaque niveau les segments devant être présents dans la mémoire tampon, c'est-à-dire ceux qui sont téléchargés nécessairement depuis le serveur 2 (par opposition, les segments 35 blancs sont ceux qui peuvent être téléchargés via le réseau pair-à-pair 10). Dans 3027180 13 ce graphique, le temps est en abscisse, la ligne en pointillés verticale matérialisant la position de lecture : lorsque le temps avance, les segments se déplacent de la droite vers la gauche. La liste de lecture présente à ce titre une taille de dix segments, et à gauche de celle-ci on trouve les segments expirés qui ont déjà été 5 joués et retirés de la liste de lecture, alors qu'à droite de celle-ci on trouve les segments futurs qui n'ont pas encore été rajoutés. Le niveau maximal qui apparait est le niveau 10, et sk=k. En d'autres termes, l'équipement de niveau 10 doit stocker au minimum 10 segments (c'est dire que dans cet exemple, un pair de niveau maximal doit stocker dans sa mémoire tampon l'intégralité de la liste de 10 lecture), l'équipement de niveau 9 doit stocker au minimum 9 segments, etc. Cela fait que l'équipement de niveau 9 va récupérer les segments 1 à 9 depuis le serveur 2, et le segment 10 depuis un équipement de niveau 10, l'équipement de niveau 8 va récupérer les segments 1 à 8 depuis le serveur 2, et les segments 9 et 10 depuis un équipement de niveau 9 (ou plus), etc. On voit bien le caractère « en 15 cascade » du mécanisme. On note qu'un mode de réalisation particulièrement avantageux consiste à prendre sk=k+smin, où sm,n est une valeur minimale de segments. En effet, les pairs de niveau minimal (niveau 1) ont généralement plus d'un segment, en général au moins trois (i.e. sm,n=2). Alternativement, on peut prendre et considérer que le 20 niveau minimal n'est pas le niveau 1, mais par exemple le niveau 2 ou 3. Dans la figure 2, le niveau minimal est le niveau 2, et on prendra cet exemple dans la suite de la description. Attribution d'un niveau 25 L'efficacité du présent procédé est maximale lorsque les niveaux sont correctement et stratégiquement affectés. Par exemple, s'il y a trop de pairs de bas niveau, le phénomène de trop grande rareté d'un segment peut survenir. Similairement, s'il y a trop de pairs de haut niveau, le serveur 2 sera inutilement 30 sollicité (et le P2P sous-exploité). De manière générale, nk pairs du niveau k pourront fournir assez d'upload pour nk_1 pairs du niveau k-1. Il faut donc au maximum s'approcher d'un coefficient C qui est le ratio moyen souhaitable entre le nombre de pairs nk du niveau k et le nombre pairs nk_1 du niveau k-1. 3027180 14 L'étape (b) peut alors consister à identifier le plus petit niveau k E 111, 11] (où L est le niveau maximum prédéterminé) tel que vi E [[k + 1, MI, ni > C * ni_1, où ni désigne le nombre d'équipements client 11, 12, 13 du réseau pair à pair 10 associé au niveau i. Si la condition n'est jamais vérifiée, alors k=L. 5 En d'autres termes, les moyens de traitement 31 du tracker 3 (on verra plus loin qu'un mode d'affectation sans tracker 3 est possible, même si leur utilisation est préférée) tentent initialement d'affecter au nouvel équipement 14 le niveau maximal L en testant si ni, C * Si ce n'est pas le cas (c'est-à-dire que nL > C * et donc qu'il y a suffisamment de pairs de niveau L), les moyens de 10 traitement 31 du tracker 3 tentent alors d'affecter au nouvel équipement 14 le niveau en-dessous L-1 en testant si C * etc. Si arrivé à l'avant-dernier niveau (i.e. le niveau 3 si le niveau minimal est le niveau 2) la condition n'est pas vérifiée (i.e. n3 > C * n2), le niveau minimal (le niveau 2 dans notre exemple) est affecté à l'équipement 14. 15 C, qui désigne comme expliqué le ratio cible d'équipements en passant d'un niveau au suivant, est un coefficient fonction de l'état du réseau 1 calculé par le tracker 3. Il peut être calculé selon la zone géographique, la nature du serveur 2, etc. De façon préférée, le tracker 3 interroge les équipements 11, 12, 13, 14 pour connaitre le pourcentage de téléchargement effectué en P2P, et modifie C en 20 conséquence. En pratique, C peut être un coefficient proche de 1 par valeur inférieure, par exemple 0.95, ce qui traduit que les pairs avec des niveaux élevés restent moins nombreux que ceux avec un niveau bas. Dans un exemple à 2 niveaux avec C=1 on pourrait avoir deux pairs de niveau 3, et un pair de niveau 2. En supposant que les équipements 11 et 12 sont 25 de niveau 3 et que l'équipement 13 est de niveau 2 l'équipement 14 se verrait affecter le niveau 2 puisque la condition n3(= 2) C * n2(= 1 * 1) n'est pas vérifiée, c'est-à-dire qu'il y a assez de pairs de niveau 3, et le nouvel équipement 14 se voit affecter le niveau minimal (le niveau 2). Alternativement, un niveau arbitraire (par exemple le niveau maximum) peut 30 être affecté au nouvel équipement client 14, et des modifications ultérieures de ce niveau surviennent (on verra ce cas plus en détail ci-après), même si l'affectation initiale d'un niveau « stratégique » est préférée. Echange de niveaux 35 3027180 15 Le réseau pair-à-pair 10 évolue en permanence au gré des connexions et déconnexions d'équipements client 11, 12, 13, 14. La connexion de nouveaux équipements permet normalement de réguler la population de chacun des niveaux, mais on comprend que tous les équipements clients ne sont pas égaux et qu'il est 5 souhaitable dans l'intérêt du réseau pair à pair 10 que certains (par exemple ceux avec une capacité d'upload élevée) plus que d'autres soient associés à un niveau élevé. Ainsi, de façon avantageuse l'étape (c) comprend un échange de niveau entre le nouvel équipement client 14 et un autre équipement client 11 de niveau 10 différent. Dans l'exemple évoqué précédemment, l'équipement 14 présente le niveau 2 alors que l'équipement 11 est de niveau supérieur (niveau 3). Or, comme l'on voit sur la figure 1, il s'agit d'un smartphone (dont la connexion est susceptible d'être limitée). L'inversion des niveaux est ainsi souhaitable. On note qu'une telle 15 inversion ne change pas les populations, mais place juste les « meilleurs » pairs aux niveaux les plus élevés, c'est-à-dire les niveaux dans lesquels ils seront les plus sollicités par le réseau pair-à-pair 10. De façon préférée, le choix des inversions passe par le calcul (par le tracker 3 directement, ou par les équipements 11, 12, 13, 14) d'une 20 « heuristique », c'est-à-dire d'un paramètre chiffré permettant d'évaluer de l'aptitude d'un pair à être de niveau élevé, en d'autres termes d'évaluer l'intérêt pour le réseau que ce pair soit de niveau élevé. Ainsi, dans une répartition optimale, l'heuristique est croissante avec le niveau. On verra plus loin des exemples variés d'heuristiques. 25 En particulier, est calculée pour chaque équipement client 11 de niveau différent au nouvel équipement client 14 et le nouvel équipement client 14 (en pratique tous les équipements 11, 12, 13, 14 à intervalle régulier) une heuristique H11, H14, le nouvel équipement client 14 échangeant de niveau avec un autre équipement client 11 de niveau différent si l'heuristique H11 de l'équipement client 30 de niveau le plus élevé 11 est inférieure à l'heuristique H14 de l'équipement client de niveau le plus faible 14. En d'autres termes si l'heuristique H14 de l'équipement 14 (de niveau 2 dans notre exemple) est supérieure à l'heuristique H11 de l'équipement 11 (de niveau 3), alors ces derniers doivent échanger de niveaux. Les pairs peuvent calculer leur propre heuristique H, mais de façon 35 préférée chaque équipement client 11, 12, 13, 14 calcule l'heuristique H d'autres 3027180 16 équipements 11, 12, 13, 14, en particulier de ceux qui lui fournissent des segments (ses « seeders »). Pour comparer les heuristiques H, le pair de niveau le plus haut demande avantageusement sa propre heuristique H à chaque pair de niveau inférieur à qui il fournit des segments (ses « leechers »), et en calcule la moyenne. 5 Si le tracker 3 (ou les équipements clients 11, 12, 13, 14 eux-mêmes) constate qu'il est souhaitable que plusieurs pairs échangent avec un pair de niveau supérieur, c'est celui dont l'heuristique est maximale qui bénéficie de l'inversion. De façon générale, on comprendra que les inversions tendent à faire monter de niveau les pairs avec les meilleurs heuristiques (les plus élevées), et baisser ceux 10 avec les heuristiques les plus mauvaises (les plus faibles). Heuristiques Comme expliqué, une première heuristique possible simple correspond à 15 une estimation de la limite d'upload (en d'autres termes le débit montant maximum de l'équipement client). De façon préférée, est utilisée une heuristique qui mesure « l'efficacité » du pair, en d'autres termes sa capacité à émettre de nombreux segments. H d'un équipement client 11, 12, 13, 14 peut ainsi être exprimé (en particulier par un autre 20 équipement client 11, 12, 13, 14 à qui il fournit des segments, c'est-à-dire un « leecher ») en fonction d'un compteur de segments (éventuellement exprimé en nombre de morceaux de segments, les « chunks ») émis (vers le pair calculant l'heuristique H de l'équipement client 11, 12, 13, 14 « seeder ») et d'un compteur de requêtes expirées (i.e. des « timeouts ») pour ledit équipement client 11, 12, 13, 25 14, en particulier par la formule (compteur de segments émis)/(compteur de segments émis + compteur de requêtes expirées). On note que le dénominateur correspond au nombre de requêtes de segments (ou morceaux de segments) reçues par le pair dont on calcule l'heuristique H depuis le pair qui calcule l'heuristique H. 30 Cette formule apporte satisfaction, mais on comprend qu'un pair ayant servi 200/250 morceaux de segments devrait avoir une heuristique supérieure à celui qui en a servi 3/3. Pour ça, le calcul de l'heuristique H d'un équipement client 11, 12, 13, 14 peut comprendre des étapes de : 3027180 17 - Initialisation de l'heuristique H de l'équipement client 11, 12, 13, 14 à une valeur moyenne (en particulier 0.5) ; - Mise à jour régulière (par exemple toutes les secondes, ou à chaque apparition d'un nouveau segment) de l'heuristique H de l'équipement client 5 11, 12, 13, 14 en fonction d'un compteur de segments (ou morceaux de segments) émis et d'un compteur de requêtes expirées (i.e. des « timeouts ») pour ledit équipement client 11, 12, 13, 14. Plus précisément, H peut être défini récursivement. En notant H', et How 10 les nouvelles et anciennes valeurs de l'heuristique et h le ratio (compteur de segments émis)/(compteur de segments émis + un compteur de requêtes expirées), on a Hnew = f (How, h). La relation peut être une combinaison linéaire : en définissant un poids p (0 REVENDICATIONS1. Procédé de diffusion d'un contenu en streaming dans un réseau pair à pair (10) d'équipements clients (11, 12, 13) connecté à un serveur de contenu (2), ledit contenu étant constitué d'une séquence de segments stockés sur des moyens de stockage de données du serveur de contenu (2), chaque équipement client (11, 12, 13) comprenant une mémoire tampon stockant de façon temporaire au moins un segment dudit contenu, le procédé étant caractérisé en ce que chaque équipement client (11, 12, 13) est associé à un niveau définissant une liste minimale de segments du contenu devant être stockés par la mémoire tampon de l'équipement (11, 12, 13), le procédé comprenant des étapes de : (a) Connexion d'un nouvel équipement client (14) au réseau pair-à-pair (10) ; (b) Affectation d'un niveau au nouvel équipement client (14) en fonction du nombre d'équipements clients (11, 12, 13) associés à chaque niveau ; (c) Transmission audit nouvel équipement client (14) depuis le serveur (2) d'au moins chaque segment du contenu absent de la mémoire tampon du nouvel équipement client (14), qui appartienne à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client (14). 2. Procédé selon la revendication 1, dans lequel l'étape (c) comprend la transmission audit nouvel équipement client (14) depuis des équipements clients (11) associés à un niveau supérieur au niveau affecté audit nouvel équipement client (14) d'au moins un segment du contenu absent de la mémoire tampon du nouvel équipement client (14), qui n'appartienne pas à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client (14). 3. Procédé selon l'une des revendications 1 et 2, dans lequel le réseau pair à pair (10) est en outre connecté à un serveur de gestion de pairs (3) configuré pour gérer la transmissions de segments entre équipements client (11, 12, 13, 14), l'étape (b) étant mise en oeuvre par le serveur de gestion de pairs (3). 3027180 21 4. Procédé selon l'une des revendications 1 à 3, dans lequel l'étape (a) comprend directement la transmission audit nouvel équipement client (13) depuis le serveur (2) d'au moins un premier segment du contenu. 5 5. Procédé selon l'une des revendications 1 à 4, dans lequel les équipements clients (11, 12, 13, 14) sont classés en L niveaux, chaque niveau k E [[1, a définissant une liste des sk premiers segments consécutifs de la séquence de segments constituant le contenu. 10 6. Procédé selon la revendication 5, dans lequel le nombre sk de segments est croissant avec le niveau k. 7. Procédé selon l'une des revendications 1 à 6, dans lequel l'étape (b) consiste à identifier et à affecter au nouvel équipement client (14) le plus 15 petit niveau k E [[1, L]] tel que Vi E Qk + 1, Uni > C * ni_1, où ni désigne le nombre d'équipements client (11, 12, 13) du réseau pair à pair (10) associé au niveau i. 8. Procédé selon la revendication 7, dans lequel C est un coefficient fonction de l'état du réseau (1) calculé par le serveur de gestion des 20 pairs (3). 9. Procédé selon l'une des revendications 1 à 8, dans lequel le contenu est diffusé en direct, la séquence de segments constituant le contenu étant mise à jour à intervalle régulier de telle sorte qu'à chaque mise à jour le 25 premier segment de la séquence est supprimé, et un nouveau segment est ajouté à la fin de la séquence. 10. Procédé selon la revendication 9, dans lequel chaque liste minimale de segments du contenu définissant un niveau est mise à jour en 30 conséquence à chaque mise à jour de la séquence de segments constituant le contenu. 11. Procédé selon l'une des revendications 1 à 10, dans lequel l'étape (c) comprend un échange de niveau entre le nouvel équipement client (14) et un autre équipement client (11) de niveau différent. 3027180 22 12. Procédé selon la revendication 11, dans lequel est calculé pour chaque équipement client (11) de niveau différent au nouvel équipement client (14) et le nouvel équipement client (14) une heuristique (H11, H14), le nouvel équipement client (14) échangeant de niveau avec un autre équipement client (11) 5 de niveau différent si l'heuristique (H11) de l'équipement client de niveau le plus élevé (11) est inférieure à l'heuristique (H14) de l'équipement client de niveau le plus faible (14). 13. Procédé selon la revendication 12, dans lequel le calcul de 10 l'heuristique H d'un équipement client (11, 12, 13, 14) comprend des étapes de : - Initialisation de l'heuristique H de l'équipement client (11, 12, 13, 14) à une valeur moyenne ; - Mise à jour régulière de l'heuristique H de l'équipement client (11, 12, 13, 14) en fonction d'un compteur de segments reçus et d'un compteur de 15 requêtes expirées pour ledit équipement client (11, 12, 13, 14). 14. Procédé selon la revendication 5 en combinaison avec l'une des revendications 9 et 10, comprenant à chaque mise à jour de la séquence de segments : 20 - si chaque segment du contenu appartenant à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client (14) est présent dans la mémoire tampon du nouvel équipement client (14), diminution du niveau affecté au nouvel équipement (14) tant que le ledit niveau reste au-dessus d'un niveau minimum, 25 - si au moins un segment du contenu appartenant à ladite liste de segments du contenu correspondant au niveau affecté au nouvel équipement client (14) est absent de la mémoire tampon du nouvel équipement client (14), affectation au nouvel équipement (14) d'un niveau maximum. 30 15. Produit programme d'ordinateur comprenant des instructions de code pour l'exécution d'un procédé selon l'une des revendications 1 à 14 de diffusion d'un contenu en streaming dans un réseau pair à pair (10) d'équipements client (11, 12, 13) connecté à un serveur de contenu (2), lorsque ledit programme est exécuté par un ordinateur. 35 3027180 23 16. Moyen de stockage lisible par un équipement informatique sur lequel un produit programme d'ordinateur comprend des instructions de code pour l'exécution d'un procédé selon l'une des revendications 1 à 14 de diffusion d'un contenu en streaming dans un réseau pair à pair (10) d'équipements client 5 (11, 12, 13) connecté à un serveur de contenu (2).