Guide de démarrage du protocole HLS et stratégies d'optimisation de la latence

Qu'est-ce que le HLS

HLS est l'abréviation de HTTP Live Streaming. Il s'agit d'un protocole de transmission multimédia en continu adaptatif basé sur HTTP lancé par Apple, qui est souvent utilisé pour la diffusion en direct et à la demande.

Le principe de fonctionnement de HLS est que lorsque la fin du streaming pousse le flux vidéo vers le serveur, le serveur découpe le flux vidéo en petits fichiers multimédias (généralement des fichiers ts et éventuellement des fichiers fmp4). Ensuite, le serveur listera les adresses de lecture de ces fichiers multimédias dans un fichier d'index dans l'ordre de lecture pour que le client recherche les flux multimédias disponibles. Ce fichier d'index est également le fichier m3u8 le plus courant que nous voyons habituellement lors de la lecture de vidéos hls.

Adaptation du débit binaire

Afin de s'adapter aux différents environnements réseau des téléspectateurs, le serveur créera plusieurs flux avec différents débits binaires et résolutions, et mettra les adresses de fichiers multimédias de différents flux dans différents fichiers d'index (liste de lecture multimédia), et enfin mettra différents flux L'adresse de le fichier d'index est placé dans un fichier d'index principal (liste de lecture principale).

Lors de la lecture du flux multimédia HLS, le client peut sélectionner le flux multimédia avec la résolution la plus élevée qui peut être lu de manière fluide en fonction des conditions actuelles du réseau.

Explication détaillée du fichier M3U8

Pour le client HLS, le premier fichier multimédia à lire consiste à indiquer au client où obtenir le fichier d'index (M3U8) du fichier multimédia. Donc, pour le client HLS, le plus important est d'analyser le fichier M3U8.

D'après l'introduction ci-dessus, nous pouvons savoir que les fichiers d'index sont divisés en deux types, l'un est la liste de lecture principale et l'autre est la liste de lecture multimédia.

liste de lecture multimédia

Une série de ressources de fragments multimédias sont stockées dans la liste de lecture multimédia. Tant que le client lit ces ressources de fragments multimédias dans l'ordre, les ressources multimédias fournies par le serveur peuvent être entièrement lues.

Le format du fichier de liste de lecture multimédia est le suivant :

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:11
#EXTINF:10.000,
url_462/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_463/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_464/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_465/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_466/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_467/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_468/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:9.950,
url_469/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.050,
url_470/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_471/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_472/193039199_mp4_h264_aac_hd_7.ts
#EXT-X-ENDLIST

liste de lecture principale

Le fichier de liste de lecture principal enregistre les adresses de plusieurs fichiers de liste de lecture multimédia, et les fichiers multimédias pointés par ces fichiers de liste de lecture multimédia ont des débits binaires et des formats différents. En même temps, il peut également fournir des fichiers audio dans différentes langues, ainsi que des fichiers vidéo tournés sous différents angles, etc. Le client peut sélectionner les ressources multimédias appropriées en fonction de l'environnement réseau différent de l'utilisateur ou des facteurs de langues et de loisirs différents.

Le format du fichier de liste de lecture maser est le suivant :

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720"
url_0/193039199_mp4_h264_aac_hd_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=246440,CODECS="mp4a.40.5,avc1.42000d",RESOLUTION=320x184,NAME="240"
url_2/193039199_mp4_h264_aac_ld_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460560,CODECS="mp4a.40.5,avc1.420016",RESOLUTION=512x288,NAME="380"
url_4/193039199_mp4_h264_aac_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=836280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=848x480,NAME="480"
url_6/193039199_mp4_h264_aac_hq_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6221600,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,NAME="1080"
url_8/193039199_mp4_h264_aac_fhd_7.m3u8

Analyse du format de fichier M3U8

définition du fichier de liste de lecture

Les fichiers M3U8 doivent être encodés en UTF-8 [RFC3629], ne doivent pas contenir l'ordre des octets BOM (Byte Order Mark), ne doivent pas contenir de caractères de contrôle UTF-8 (U+0000 à U+001F et U+007F à U+009F) , Sauf CR (U+000D) et LF (U+000A).

Le contenu de chaque ligne d'un fichier M3U8 ne peut être que l'un des trois suivants.

  • URI
  • ligne blanche
  • chaîne commençant par #

Il ne doit y avoir aucun espace autre que les éléments explicitement spécifiés.

Les lignes commençant par le caractère "#" sont soit des commentaires, soit des étiquettes. Les balises commencent par #EXT et sont sensibles à la casse. Les autres lignes commençant par "#" sont des commentaires et doivent être ignorées par le client pour l'analyse.

liste des propriétés

La valeur de certaines balises spécifiques est une liste d'attributs.

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720"

Les listes d'attributs sont séparées par des virgules, séparant les ensembles de paires sans espaces  AttributeName=AttributeValue . Comme les EXT-X-STREAM-INFpropriétés ci-dessus peuvent être séparées :

# AttributeName=AttributeValue
PROGRAM-ID=1,
BANDWIDTH=2149280,
CODECS="mp4a.40.2,avc1.64001f",
RESOLUTION=1280x720,
NAME="720"

Envoyez-moi un message privé pour recevoir les supports d'apprentissage et d'amélioration les plus récents et les plus complets en 2022 , y compris ( C/C++ , Linux , FFmpeg , webRTC , rtmp , hls , rtsp , ffplay , srs ) 

 

 

Étiqueter

Les balises sont utilisées pour décrire les paramètres globaux des fichiers M3U8, ainsi que des informations sur les fichiers de tranches et les listes de lecture multimédia. Les étiquettes peuvent être divisées dans les catégories suivantes :

  • Balises de base
  • Balises de segment média
  • Balises de liste de lecture multimédia
  • Balises de la liste de lecture principale
  • Balises de média ou de liste de lecture principale

Ce qui suit présentera certaines des balises les plus importantes et les plus couramment utilisées dans ces types.

Balises de base

Les balises de base peuvent être utilisées à la fois dans les listes de lecture multimédia et dans les listes de lecture principales.

  • EXTM3U: Cette étiquette doit être placée sur la première ligne de chaque fichier M3U8, indiquant que le fichier est un fichier M3U8.
  • EXT-X-VERSION: Indique le numéro de version du protocole HLS, qui est lié à la compatibilité des médias en streaming. Cette balise est un paramètre global et peut être utilisée dans tout le fichier M3U8. Au plus une définition de version peut apparaître dans chaque fichier M3U8. Si le fichier M3U8 ne contient pas cette balise, la valeur par défaut est 1.

Balises de liste de lecture multimédia

La balise de liste de lecture multimédia est l'information de paramètre globale du fichier M3U8 et ne peut apparaître qu'une seule fois dans le fichier M3U8. La balise de la liste de lecture multimédia ne peut apparaître que dans la liste de lecture multimédia (Media Playlist), mais pas dans la liste de lecture principale (Master Playlist).

EXT-X-TARGETDURATION

Indique la durée maximale (en secondes) de tous les clips multimédias, qui est une étiquette obligatoire.

#EXT-X-TARGETDURATION:<s>

EXT-X-MEDIA-SEQUENCE

Indique le numéro de séquence du premier fichier de segment d'URL de la liste de lecture. Chaque URL de segment multimédia a un numéro de série entier unique, et le numéro de série de chaque segment multimédia est incrémenté de 1 dans l'ordre d'apparition. Si cette balise n'est pas spécifiée, le numéro de série par défaut commence à 0. Le numéro de série du clip multimédia est indépendant du nom de fichier du clip.

#EXT-X-MEDIA-SEQUENCE:<number>

EXT-X-ENDLIST

Indique la fin du fichier, l'étiquette peut apparaître n'importe où dans le fichier M3U8, généralement la fin.

Lorsque cette balise apparaît dans la liste de lecture multimédia, cela signifie que le flux multimédia est une source à la demande plutôt qu'une source en direct.

EXT-X-PLAYLIST-TYPE

Utilisée pour indiquer le type de média diffusé en continu, cette balise est facultative. Son format est :

#EXT-X-PLAYLIST-TYPE:<type-enum>

Où : type-enumpeut être :

  • VOD : Video on Demand, indiquant que le flux multimédia est une source à la demande, le serveur ne peut donc pas modifier le fichier M3U8 ;

  • ÉVÉNEMENT : Indique que le flux multimédia est une source en direct, le serveur ne peut modifier ou supprimer aucune partie du fichier M3U8, mais peut ajouter un nouveau contenu à la fin du fichier.

Les fichiers VOD ont généralement des balises EXT-X-ENDLIST , car ce sont des sources à la demande, et la position finale ne changera pas ; tandis que les fichiers EVEVT n'ont généralement pas de balises EXT-X-ENDLIST lorsqu'ils sont initialisés, ce qui implique que de nouveaux fichiers seront ajoutés À la fin, le client doit également obtenir régulièrement le fichier M3U8 pour obtenir de nouvelles ressources de segment multimédia, et il ne s'arrêtera pas tant que la balise EXT-X-ENDLIST n'aura pas été accédée).

EXT-X-I-FRAMES-ONLY

Cette balise est globalement efficace, indiquant que chaque segment de média est une  I-frame . L'encodage d'image I n'a pas besoin de dépendre d'autres images, donc I frame peut être utilisé pour une lecture rapide et d'autres opérations.

Personnellement, comprenez que l'image I ici fait référence à l'image IDR. Toutes les images après l'image IDR ne peuvent pas faire référence au contenu d'une image avant l'image IDR. Pour les images I ordinaires, les images B et P situées après peuvent être référencées ici. Autres images I avant les images I

#EXT-X-I-FRAMES-ONLY

Si la liste de lecture multimédia est définie sur EXT-XI-FRAMES-ONLY , la durée du segment multimédia ( la valeur de la balise EXTINF ) est la durée depuis le début de l'image I du segment multimédia actuel jusqu'à l'apparition du suivant. J'encadre. Si la ressource multimédia contient des tranches d'image I, elle doit fournir un bloc d'initialisation de support ou fournir un accès au bloc d'initialisation de support via la balise EXT-X-MAP , afin que le client puisse charger et décoder ces tranches d'image I dans n'importe quel ordre. .

Balises de segment média

L'URI de chaque fragment de média est précédé d'une série de balises de fragment de média qui décrivent des informations sur le fragment de média. Certaines balises de fragment ne sont valides que pour la ressource de tranche suivante, et certaines balises de fragment sont valides pour toutes les tranches suivantes jusqu'à ce qu'une autre description de balise identique soit rencontrée ultérieurement. La balise de type de clip multimédia ne peut apparaître que dans la liste de lecture multimédia (Media Playlist), pas dans la liste de lecture principale (Master Playlist) (car l'URI du clip multimédia n'apparaît que dans la liste de lecture multimédia).

EXTINF

Indique la durée (en secondes) du segment multimédia spécifié par l'URI suivant. Cette balise doit être spécifiée avant chaque fragment de média d'URL. Le format de cette balise est :

#EXTINF:<duration>,[<title>]

où durée est un entier décimal ou un nombre à virgule flottante dont la valeur doit être inférieure ou égale à la valeur EXT-X-TARGETDURATIONspécifiée .

EXT-X-BYTERANGE

Cette balise indique que la prochaine ressource de fragment de média n'est qu'une portée locale de la ressource de fragment de média spécifiée par son URI (c'est-à-dire que le contenu de la ressource de média URI est intercepté comme tranche suivante). Cette balise n'agit que sur l'URI suivante. Son format est :

#EXT-X-BYTERANGE:<length>[@<offset>]

Parmi eux, lengthse trouve un entier décimal, indiquant la taille du segment intercepté (unité : octets). Le paramètre facultatif offsetest également un entier décimal indiquant la position de début de troncature (en octets, qui sera tronqué après avoir déplacé la position d'octet au début de la ressource spécifiée par l'URI). Si elle offsetn'est pas spécifiée, la position de début de troncature commence à partir de l'octet suivant (c'est-à-dire la longueur précédente + décalage + 1) après la fin de la dernière troncature de la balise.

Si cette balise n'est pas spécifiée, la portée de segmentation indiquée est l'ensemble du segment de ressource URI.

L'utilisation de la balise EXT-X-BYTERANGE nécessite un numéro de version compatible EXT-X-VERSION supérieur ou égal à 4.

EXT-X-DISCONTINUITY

Indique qu'il y a une rupture entre le segment média avant la balise et le segment média suivant. Cette balise doit être utilisée lorsque l'une des conditions suivantes change :

  1. format de fichier
  2. nombre, type, identifiants des pistes
  3. séquence d'horodatage

Cette étiquette est recommandée lorsque l'une des conditions suivantes change :

  1. paramètres d'encodage
  2. séquence d'encodage

Le scénario le plus courant pour EXT-X-DISCONTINUITY est l'insertion de publicités dans le flux multimédia. Exemple d'insertion d'une annonce :

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
ad0.ts
#EXTINF:8.0,
ad1.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts
...
#EXT-X-ENDLIST

EXT-X-KEY

Cette balise est utilisée pour spécifier la méthode de décryptage des segments multimédias cryptés. Cette balise agit sur tous les fragments de média et toutes les sections d'initialisation de média environnantes déclarées par la balise EXT-X-MAP jusqu'à ce que la prochaine EXT-X-KEY soit rencontrée (si le fichier m3u8 n'a qu'une seule balise EXT-X-KEY, elle s'applique à tous les fragments de médias). Si plusieurs balises EXT-X-KEY génèrent la même clé, elles peuvent toutes agir sur le même segment de média.

#EXT-X-KEY:<attribute-list>

EXT-X-MAP

Utilisé pour spécifier la méthode d'obtention de la section d'initialisation du support. Cette balise s'applique à tous les segments de média suivants jusqu'à ce qu'une autre balise EXT-X-MAP soit rencontrée. Tous les clips multimédias du fichier M3U8 avec la balise modifiée doivent être ajoutés avec ce clip d'initialisation pour former un fichier multimédia complet. Son format est :

#EXT-X-MAP:<attribute-list>

La plage de valeurs de sa liste d'attributs est la suivante :

  • URI : une chaîne entre guillemets spécifiant le chemin d'accès à la ressource contenant le bloc d'initialisation du support. Cette propriété est un paramètre obligatoire.

  • BYTERANGE : une chaîne entre guillemets qui spécifie l'emplacement (fragment) du bloc d'initialisation du support dans la ressource spécifiée par l'URI.

La portée spécifiée par cet attribut ne doit contenir que des blocs d'initialisation de support. Cet attribut est un paramètre facultatif. S'il n'est pas spécifié, cela signifie que la ressource spécifiée par l'URI est constituée de tous les blocs d'initialisation de support.

EXT-X-PROGRAM-DATE-TIME

Cette balise utilise une date/heure absolue pour indiquer quand le premier segment de média a été échantillonné. Son format est :

#EXT-X-PROGRAM-DATE-TIME:<date-time-msec>

Parmi eux, date-heure-msec est un format de date spécifié par ISO/IEC 8601:2004, tel que : AAAA-MM-JJThh:mm:ss.SSSZ. Par exemple:

 #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00

 

Balises de la liste de lecture principale

La liste de lecture principale définit les flux de sauvegarde, les flux de traduction multilingues et d'autres paramètres globaux. La balise de la liste de lecture principale ne peut apparaître que dans la liste de lecture principale (Master Playlist) et non dans la liste de lecture multimédia (Media Playlist).

EXT-X-MEDIA

Une ressource de liste de fichiers multimédias pour spécifier des traductions dans différentes langues de fichiers multimédias du même contenu. Par exemple, avec trois balises EXT-X-MEIDA , il est possible de fournir des ressources audio contenant le même contenu en anglais, français et espagnol, ou deux EXT-X-MEDIA pour fournir des ressources vidéo avec deux angles de prise de vue différents.

EXT-X-STREAM-INF

Cet attribut spécifie une source de liste de lecture multimédia et fournit des informations sur la source de sauvegarde.

#EXT-X-STREAM-INF:<attribute-list>
<URI>
  • L'URI est un paramètre obligatoire, spécifiant une source de liste de lecture multimédia.

  • La liste des attributs de paramètre de la balise EXT-X-STREAM-INF peut être :

    • BANDWIDTH : Cet attribut est un paramètre obligatoire, indiquant le nombre de bits transmis par seconde, c'est-à-dire la bande passante. Représente le débit maximal de ce flux de sauvegarde.
    • AVERAGE-BANDWIDTH : Cet attribut est un paramètre facultatif, indiquant la bande passante moyenne du flux de secours.
    • CODECS : Une chaîne composée d'une liste de formats séparés par des virgules entre guillemets doubles, indiquant le format de codec du flux de sauvegarde. Chaque balise EXT-X-STREAM-INF doit porter l' attribut CODECS .
    • RESOLUTION : Cette propriété décrit le schéma de résolution optimal pour la sauvegarde des sources vidéo en continu. Cette propriété est un paramètre facultatif, mais il est recommandé d'ajouter ce paramètre de propriété pour les flux de sauvegarde contenant des sources vidéo.
    • FRAME-RATE : cette propriété utilise une valeur décimale à virgule flottante comme description de la fréquence d'images maximale de tous les écrans vidéo dans le flux de sauvegarde. Si la fréquence d'images d'une source vidéo dans le flux de sauvegarde dépasse 30 images par seconde, ce paramètre de propriété doit être augmenté. Cette propriété est un paramètre facultatif, mais il est recommandé d'ajouter ce paramètre de propriété pour les flux de sauvegarde contenant des sources vidéo.
    • HDCP-LEVEL : la valeur de la propriété est une chaîne énumérable.
      Les valeurs valides sont TYPE-0ou NONE.
      Une valeur TYPE-0indique que la lecture du flux de sauvegarde peut échouer à moins que la sortie ne soit la protection du contenu numérique à large bande passante (HDCP).
      Une valeur NONEindique que le contenu du flux ne nécessite pas de protection contre la copie de sortie.
      Les flux de sauvegarde chiffrés avec différents degrés de HDCP doivent utiliser différentes clés de chiffrement multimédia.
      Cette propriété est un paramètre facultatif. Cet attribut DEVRAIT être fourni dans les cas où il peut y avoir des échecs de lecture en l'absence de HDCP.
    • AUDIO : la valeur de l'attribut est entourée de guillemets doubles et sa valeur doit correspondre à la valeur de l' attribut GROUP-ID de la balise EXT-X-MEDIA définie quelque part dans la liste de lecture principale avec l' attribut TYPE défini sur AUDIO . Cette propriété est un paramètre facultatif.
    • VIDEO : la valeur de l'attribut est entourée de guillemets doubles et sa valeur doit correspondre à la valeur de l' attribut GROUP-ID de la balise EXT-X-MEDIA définie quelque part dans la liste de lecture principale avec l' attribut TYPE défini sur VIDEO . Cette propriété est un paramètre facultatif.
    • SUBTITLES : la valeur de l'attribut est entourée de guillemets doubles et sa valeur doit correspondre à la valeur de l'attribut GROUP-ID de la balise EXT-X-MEDIA définie quelque part dans la liste de lecture principale avec l' attribut TYPE défini sur SUBTITLES . Cette propriété est un paramètre facultatif.
    • CLOSED-CAPTIONS : la valeur de l'attribut peut être une chaîne entre guillemets doubles ou NONE. Si sa valeur est une chaîne, elle doit correspondre à la valeur de l'attribut GROUP-ID d'une balise EXT-X-MEDIA
      définie quelque part dans la liste de lecture principale avec l' attribut TYPE défini sur CLOSED-CAPTIONS . Si sa valeur est , toutes les balises ext-x-stream-inf doivent également avoir cet attribut défini , indiquant qu'aucun des flux de sauvegarde de la liste de lecture principale n'a de titres fermés. Pour un flux de sauvegarde avec un titre fermé, un autre flux de sauvegarde sans titre fermé peut déclencher des interruptions de lecture. Cette propriété est un paramètre facultatif.
      NONENONE
    • EXT-X-I-FRAME-STREAM-INF

      Cette balise indique que le fichier de la liste de lecture multimédia contient des images I pour diverses ressources multimédias.

      EXT-X-SESSION-KEY

      Cette balise permet à la liste de lecture principale de spécifier la clé de cryptage pour la liste de lecture multimédia. Cela permet aux clients de précharger ces clés sans avoir à les récupérer à partir de la liste de lecture multimédia. Sa liste d'attributs est la même que EXT-X-KEY, sauf que la valeur de l'attribut METHOD ne doit pas être NONE.

      Balises de média ou de liste de lecture principale

      Les balises suivantes peuvent être définies à la fois sur la liste de lecture principale et sur la liste de lecture multimédia. Mais les balises définies dans la liste de lecture principale ne doivent pas être définies à nouveau dans la liste de lecture multimédia. La même balise qui apparaît dans les deux listes de lecture doit avoir la même valeur. Ces balises ne peuvent pas apparaître plus d'une fois dans la liste de lecture (utilisées une seule fois).

      EXT-X-INDEPENDENT-SEGMENTS

      Cette balise est valide pour tous les segments multimédias de la liste et est utilisée pour indiquer que tous les échantillons multimédias d'un segment multimédia peuvent être décodés indépendamment sans s'appuyer sur d'autres informations de segment multimédia.

      #EXT-X-INDEPENDENT-SEGMENTS

      Si la balise est présente dans la liste de lecture principale, elle s'applique à tous les clips multimédia de toutes les listes de lecture multimédia.

      EXT-X-START

      Cette balise est facultative et est utilisée pour indiquer la position de départ de la liste de lecture. Par défaut, le client doit utiliser la position spécifiée par cette balise pour la lecture.

      #EXT-X-START:<attribute-list>

La plage de valeurs de sa liste d'attributs de paramètres est la suivante :

  • TIME-OFFSET : La valeur de cette propriété est un nombre décimal signé à virgule flottante (unité : secondes). Un nombre positif représente un décalage temporel depuis le début de la liste de lecture. Un nombre négatif représente le décalage temporel à partir de la dernière position d'un segment multimédia sur la liste de lecture. La valeur absolue de cette propriété ne doit pas dépasser la durée de la playlist. S'il dépasse, cela signifie soit que la fin du fichier a été atteinte (valeur positive), soit que le début du fichier a été atteint (valeur négative). Si la liste de lecture ne contient pas de balise EXT-X-ENDLIST , la valeur de l' attribut TIME-OFFSET ne doit pas être comprise dans la durée des trois dernières tranches du fichier de lecture.

  • PRECISE : La valeur est une chaîne énumérable. Les valeurs valides sont YESou NO. Si la valeur est YES, le client DEVRAIT lire les fragments de média contenant TIME-OFFSET , mais pas restituer les blocs d'échantillons dans ce bloc qui ont priorité sur TIME-OFFSET . Si valeur NO, le client DEVRAIT tenter de restituer tous les exemples de blocs dans le fragment de média. Cet attribut est un paramètre facultatif, s'il n'est pas spécifié, il est considéré comme NO.

  • Raisons de la latence élevée de la diffusion en direct HLS

    Le retard de diffusion en direct HLS est principalement causé par les raisons suivantes :

  • La durée pendant laquelle le client dispose généralement d'un tampon sécurisé. Le protocole HLS ne recommande pas que le client sélectionne un segment dont l'intervalle de temps entre l'heure de début et la fin du dernier segment est inférieur à la durée du dernier segment plus deux fois la durée EXT-X-TARGETDURATION comme premier segment à lire . Autrement dit, en général, le client doit commencer à jouer à partir du troisième ou du quatrième dernier fragment du fichier M3U8.
  •  

  • 2. L'intervalle auquel le serveur met à jour le fichier M3U8. En théorie, le serveur HLS a besoin de plus ou égal à un EXT-X-TARGETDURATION pour mettre à jour le fichier M3U8.

  • 3. Mécanisme de mise en cache CDN. Si le site d'origine actuel M3U8 a été mis à jour vers le quatrième segment, mais que le nœud périphérique CDN met toujours en cache le fichier M3U8 de la version précédente (qui ne contient que 3 segments). À ce stade, il est nécessaire d'attendre l'expiration de la durée de vie du fichier avant que le nœud périphérique puisse obtenir la dernière version du fichier M3U8. Et ce cache TTL ne peut pas non plus être annulé.Si la demande à chaque extrémité atteint le nœud de périphérie CDN, elle va au site d'origine pour la dernière version, et le site d'origine peut être submergé par le trafic.

  • 4. Le segment de téléchargement du client et la durée du décodage.

  • 5. Latence du réseau.

Façons d'optimiser la latence

Nous 1pouvons 2réduire le retard de notre diffusion en direct en commençant par des points et des points dans les motifs de retard.

Réduisez de manière appropriée la durée de la mémoire tampon de sécurité du client. Dans les scénarios où l'environnement réseau est garanti suffisamment favorable (comme la diffusion en direct intranet), la durée de la mise en mémoire tampon de la sécurité du client peut être réduite de manière appropriée. Par exemple, hls.js peut ajuster la durée de la mise en mémoire tampon sécurisée en modifiant liveSyncDurationCount(le nombre de partitions pour la mise en mémoire tampon sécurisée, la valeur par défaut est 3) et liveSyncDuration(la durée de la mise en mémoire tampon sécurisée, en secondes). Réduisez l'intervalle auquel le serveur met à jour les fichiers M3U8. Essayez d'utiliser la durée de GOP (Group Of Picture) pour définir la durée de la partition et réduisez l'intervalle auquel le serveur met à jour le fichier M3U8. Et si les performances du serveur et l'environnement réseau le permettent, la longueur du GOP doit être réduite de manière appropriée (la réduction de la longueur du GOP entraînera un faible taux de compression vidéo et une faible efficacité de transmission).

Je suppose que tu aimes

Origine blog.csdn.net/m0_60259116/article/details/124298016
conseillé
Classement