What is the m3u8 file format?

M3U8 is the Unicode version of M3U, encoded in UTF-8. Both "M3U" and "M3U8" files are the basis of the HTTP Live Streaming (HLS) protocol format used by Apple, which can be played on devices such as iPhones and Macbooks.

Introduction to m3u8

It is the Unicode version , encoded in UTF-8. Both "M3U" and "M3U8" files are the basis of the HTTP Live Streaming (HLS) protocol format used by Apple, which can be played on devices such as iPhones and Macbooks.

The above text definition comes fromAs you can see, the m3u8 file is actually part of the HTTP Live Streaming (abbreviated as HLS) protocol, and HLS is an HTTP-based streaming media network transmission protocol proposed by Apple.

HLS works by breaking the entire stream into small HTTP-based files to download, downloading only a few at a time. While the media stream is playing, the client can choose to download the same resource from many different alternative sources at different rates, allowing the streaming session to adapt to different data rates. When starting a streaming session, the client downloads an extended M3U (m3u8) playlist file containing metadata for finding available media streams.
HLS only requests basic HTTP messages. Unlike the Real-time Transport Protocol (RTP), HLS can pass through any firewall or firewall that allows HTTP data to pass.It is also easy to use content delivery networks to transmit media streams.

In short, HLS is a new generation of streaming media transmission protocol. Its basic implementation principle is to segment a large media file, record the resource path of the segmented file in the m3u8 file (i.e. playlist), and provide some additional descriptions (such as the multi-bandwidth information of the resource...) to the client. The client can obtain the corresponding media resource based on the m3u8 file and play it.

Therefore, the client obtains the HLS stream file mainly by parsing the m3u8 file.

So, let's briefly introduce the m3u8 file.

M3U8 File Introduction

The m3u8 file is actually a playlist, which may be a media playlist or a master playlist. Regardless of the type of playlist, the text inside it is encoded in utf-8.

When the m3u8 file is used as a media playlist, its internal information records a series of media segment resources. By playing the segment resources in sequence, the multimedia resources can be fully displayed. Its format is as follows:

#EXTM3U
#EXT-X-TARGETDURATION:10

#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
For on-demand playback, the client only needs to download the above segment resources in order and play them one by one. For live streaming, the client needs to re-request the m3u8 file at regular intervals to see if there is any new segment data that needs to be downloaded and played.

When m3u8 is used as the master playlist, it provides multiple stream list resources (Variant Stream) of the same media resource. Its format is as follows:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
The backup stream resource specifies a variety of media playlists with different bit rates and formats, and the backup stream resource can also provide different versions of resource content at the same time, such as audio files in different languages, video files shot at different angles, etc. Customers can select resources with appropriate bit streams according to different network conditions, and it is best to select appropriate resource content according to user preferences.
The above is the general content of the m3u8 file. Next, we will explain the m3u8 content format.

m3u8 file format

The m3u8 file format mainly includes three aspects:

File playlist format definition: The content of the playlist (also known as the m3u8 file) must strictly meet the requirements of the specification definition. The following are some of the main conditions to be followed:
m3u8 files must be encoded in utf-8, cannot use the Byte Order Mark (BOM) byte order, and cannot contain utf-8 control characters (U+0000 ~ U_001F and U+007F ~ u+009F).

Each line of the m3u8 file is either a URI, a blank line, or starts with #.No whitespace characters may appear, except in explicit declaration elements.

The string starting with # in the m3u8 file is either a comment or a tag. Tags start with #EXT and are case sensitive.

Attribute Lists: The values of certain tags are attribute lists. The attribute list after the tag uses commas as separators to separate multiple attribute/value pairs without spaces.
The syntax of the attribute/value pair is as follows:
AttributeName=AttributeValue
in:

The attribute AttributeName is an unquoted string consisting of [A..Z], [0..9] and -. Therefore, the attribute AttributeName can only use uppercase letters, not lowercase letters, and there cannot be a space between AttributeName and =. Similarly, there cannot be a space between = and AttributeValue.

The value of AttributeValue can only be of the following types:

Decimal integer: a decimal string without quotes consisting of [0..9], ranging from ~ (18446744073709551615), with a character length of 1 to 20.
Hexadecimal sequence: an unquoted string consisting of [0..9] and [A..F] prefixed with 0x or 0X. The maximum length of the sequence depends on its attribute name AttributeNames.
Signed-decimal-floating-point: An unquoted string consisting of [0..9], -, and .
String (quoted-string): A string enclosed in double quotes. 0xA, 0xD and double quotes " cannot appear in the string. The string is case sensitive.
Enumerated-string: A series of unquoted strings defined by AttributeName. The string cannot contain double quotes, commas, and whitespace characters.
decimal-resolution: two decimal integers separated by the character x. The first integer represents the horizontal width, and the second integer represents the vertical height (unit: pixel).
Tags: Tags are used to specify the global parameters of the m3u8 file or some information of the following slice file/media playlist.
There are five types of tags: Basic Tags, Media Segment Tags, Media Playlist Tags, Master Playlist Tags and Playlist Tags. The specific contents are as follows:

Basic Tags: Applicable to both Media Playlist and Master Playlist. The specific tags are as follows:

EXTM3U: Indicates that the file is an m3u8 file. Each M3U file must place this tag in the first line.
EXT-X-VERSION: Indicates the protocol version number of HLS. This tag is related to the compatibility of streaming media. This tag is global in scope and enables the entire m3u8 file. At most one definition of this tag can appear in each m3u8 file. If the m3u8 file does not contain this tag, the first version of the protocol is used by default.
Media Segment Tags: Each segment URI is preceded by a series of media segment tags to describe it. Some segment tags are only valid for the following segment resources; some segment tags are valid for all subsequent segments until another such tag is encountered. Media segment type tags cannot appear in the master playlist. The specific tags are as follows:

EXTINF: Indicates the duration (in seconds) of the media segment specified by the URL that follows. This tag must be specified before each URL media segment. The format of this tag is:

#EXTINF:,[]<br> in:</p> <p>duration: can be a decimal integer or floating point type, and its value must be less than or equal to the value specified by EXT-X-TARGETDURATION.<br> Note: It is recommended to always use floating point values to specify durations, which allows clients to reduce rounding errors when positioning streams. However, if the compatible version number EXT-X-VERSION is less than 3, then integer values must be used.<br> EXT-X-BYTERANGE: This tag indicates that the next slice resource is a local range of the media segment resource specified by the subsequent URI (i.e., the content of the URI media resource is intercepted as the next slice). This tag only works for the next URI. Its format is:</p> <p>#EXT-X-BYTERANGE:<n>[@<o>]<br> in:</p> <p>n is a decimal integer indicating the size of the intercepted segment (in bytes).<br> The optional parameter o is also a decimal integer, indicating the starting position of the interception (expressed in bytes, interception is performed after moving the byte position from the beginning of the resource specified by the URI).<br> If o is not specified, the starting position of interception is from the next byte of the previous tag interception (that is, the previous n+o+1).<br> If this tag is not specified, the segmentation scope is the entire URI resource fragment.<br> Note: Using the EXT-X-BYTERANGE tag requires the compatible version number EXT-X-VERSION to be greater than or equal to 4.<br> EXT-X-DISCONTINUITY: This tag indicates that there is a discontinuity between the previous slice and the next slice. Its format is:</p> <p>#EXT-X-DISCONTINUITY<br> This tag must be used when any of the following conditions change:</p> <p>file format<br> Number, type, identifiers of tracks<br> Timestamp sequence<br> This tag should be used when any of the following conditions change:</p> <p>encoding parameters<br> Coding sequence<br> Note: A classic usage scenario of EXT-X-DISCONTINUITY is to insert advertisements into the video stream. Since the video stream and the advertisement video stream are not the same resource, EXT-X-DISCONTINUITY is used to indicate when the two streams are switched. After the client sees this tag, it will handle the switching interruption problem, providing a better experience.<br> For more details, please see: Incorporating Ads into a Playlist</p> <p>EXT-X-KEY: The media segment can be encrypted, and this tag can specify the decryption method.<br> This tag is effective for all media segments and all media initialization blocks (Media Initialization Section) around them declared by the tag EXT-X-MAP until the next EXT-X-KEY is encountered (if the m3u8 file has only one EXT-X-KEY tag, it is effective for all media segments).<br> Multiple EXT-X-KEY tags can apply to the same media segment if they all generate the same key.<br> The format of this tag is:</p> <p>#EXT-X-KEY:<attribute-list><br> The property list can contain the following keys:</p> <p>METHOD: This value is an enumerable string that specifies the encryption method.<br> This key is a required parameter. Its value can be one of NONE, AES-128, and SAMPLE-AES.<br> in:<br> NONE: indicates that the slice is not encrypted (other attributes cannot appear at this time);<br> AES-128: Indicates that AES-128 is used for encryption.<br> SAMPLE-AES: This means that the media segment contains sample media, such as audio or video, which is encrypted using AES-128. In this case, the IV attribute may or may not be present.</p> <p>URI: Specifies the key path.<br> The key is a 16-byte data.<br> This key is a required parameter unless METHOD is NONE.</p> <p>IV: This value is a 128-bit hexadecimal value.<br> AES-128 requires the same 16-byte IV value to be used for encryption and decryption. Using different IV values can increase the strength of the cipher.<br> If IV appears in the attribute list, use that value; if not, use the media segment sequence number (ie EXT-X-MEDIA-SEQUENCE) as its IV value by default, using big-endian byte order and padding left with 0 until the sequence number meets 16 bytes (128 bits).</p> <p>KEYFORMAT: A string enclosed in double quotes that identifies how the key is stored in the key file (the AES-128 key in the key file is a 16-byte key stored in binary format).<br> This attribute is optional and its default value is &quot;identity&quot;.<br> Use of this attribute requires that the compatible version number EXT-X-VERSION be greater than or equal to 5.</p> <p>KEYFORMATVERSIONS: A quoted string consisting of one or more positive integer values separated by / (for example: &quot;1&quot;, &quot;1/2&quot;, &quot;1/2/5&quot;).<br> If one or more specific KEYFORMT versions are defined, this attribute can be used to indicate which specific version to compile against.<br> This attribute is optional and its default value is &quot;1&quot;.<br> Use of this attribute requires that the compatible version number EXT-X-VERSION be greater than or equal to 5.</p> <p>EXT-X-MAP: This tag specifies the method for obtaining the Media Initialization Section.<br> This tag is effective for all subsequent media segments until another EXT-X-MAP tag is encountered.<br> Its format is:</p> <p>#EXT-X-MAP:<attribute-list><br> The value range of its attribute list is as follows:</p> <p>URI: A string enclosed in quotation marks that specifies the path to the resource containing the media initialization block. This attribute is a required parameter.</p> <p>BYTERANGE: A quoted string that specifies the location (fragment) of the media initialization block within the resource specified by the URI.<br> The range specified by this attribute should only contain media initialization blocks.<br> This attribute is an optional parameter. If not specified, it means that the resource specified by the URI is the entire media initialization block.</p> <p>EXT-X-PROGRAM-DATE-TIME: This tag uses an absolute date/time to indicate when the first sample segment was sampled.<br> Its format is:</p> <p>#EXT-X-PROGRAM-DATE-TIME:<date-time-msec><br> Among them, date-time-msec is a <a href="https://uzbox.com/en/tag/iso" class="st_tag internal_tag" rel="tag" title="iso">ISO</a>/The date format specified by IEC 8601:2004 is as follows: YYYY-MM-DDThh:mm:ss.SSSZ.</p> <p>EXT-X-DATERANGE: This tag defines a date range consisting of a series of attribute/value pairs.<br> Its format is:</p> <p>#EXT-X-DATERANGE:<attribute-list><br> The attribute list values are as follows:</p> <p>ID: A unique identifier enclosed in double quotes that specifies the date range.<br> This attribute is a required parameter.</p> <p>CLASS: A series of attributes and corresponding semantic values defined by the customer, enclosed in double quotes.<br> All date ranges with the same CLASS attribute must comply with the corresponding semantics.<br> This attribute is optional.</p> <p>START-DATE: The starting value of the date range enclosed in double quotes.<br> This attribute is a required parameter.</p> <p>END-DATE: The end value of the date range enclosed in double quotes.<br> This attribute value must be greater than or equal to START-DATE.<br> This attribute is optional.</p> <p>DURATION: The duration of the date range is a decimal floating point value (unit: seconds).<br> This property value cannot be negative.<br> When expressing immediate time, just set the property value to 0.<br> This attribute is optional.</p> <p>PLANNED-DURATION: This attribute is the expected duration of the date range.<br> Its value is a decimal floating point value type (unit: seconds).<br> This property value cannot be negative.<br> When the actual duration is not known in advance, this property can be used as an estimate of the expected duration of the date range.<br> This attribute is optional.</p> <p>X-<client-attribute>: The X- prefix is a namespace reserved for client-defined properties.<br> When the client customizes the attribute name, the reverse <a href="https://uzbox.com/en/tag/dns" class="st_tag internal_tag" rel="tag" title="DNS">DNS</a>(reverse-DNS) syntax to avoid conflicts.<br> The custom attribute value must be a string enclosed in double quotes, or a hexadecimal sequence, or a decimal floating point number, for example: X-COM-EXAMPLE-AD-ID=&quot;XYZ123&quot;.<br> This attribute is optional.</p> <p>SCTE35-CMD, SCTE35-OUT, SCTE35-IN: used to carry SCTE35 data.<br> This attribute is optional.</p> <p>END-ON-NEXT: This attribute value is an enumerable string, and its value must be YES.<br> This attribute indicates that the end of the range is reached, that is, it is equal to the start position START-DATE of the subsequent range. The subsequent range refers to the date range with the earliest START-DATE value after the START-DATE of the tag with the same CLASS.<br> This attribute is optional.</p> <p>Media playlist type tag: The media playlist tag is the global parameter information of the m3u8 file.<br> These tags can appear at most once in an m3u8 file.<br> The Media Playlist tag cannot appear in a Master Playlist.<br> The specific tags of the media playlist are as follows:</p> <p>EXT-X-TARGETDURATION: indicates the maximum duration of each video segment (in seconds).<br> This tag is required.<br> Its format is:</p> <p>#EXT-X-TARGETDURATION:<s><br> Where: parameter s represents the target duration (unit: seconds).</p> <p>EXT-X-MEDIA-SEQUENCE: Indicates the sequence number of the first URL fragment file in the playlist.<br> Each media segment URL has a unique integer sequence number.<br> The sequence number of each media segment is incremented by 1 in the order in which it appears.<br> If this tag is not specified, the default sequence numbering starts at 0.<br> The media segment sequence number has no relation to the segment file name.<br> Its format is:</p> <p>#EXT-X-MEDIA-SEQUENCE:<number><br> Among them: the parameter number is the slice sequence number.</p> <p>EXT-X-DISCONTINUITY-SEQUENCE: This tag enables synchronization of different Renditions of the same stream and different backup streams with the EXT-X-DISCONTINUITY tag.<br> Its format is:</p> <p>#EXT-X-DISCONTINUITY-SEQUENCE:<number><br> Among them: the parameter number is a decimal integer value.<br> If the Playlist does not set the EXT-X-DISCONTINUITY-SEQUENCE tag, then the interrupt sequence number for the first segment SHOULD be 0.</p> <p>EXT-X-ENDLIST: Indicates the end of the m3u8 file.<br> This tag can appear anywhere in the m3u8 file, usually at the end.<br> Its format is:</p> <p>#EXT-X-ENDLIST<br> EXT-X-PLAYLIST-TYPE: indicates the streaming media type. It takes effect globally.<br> This tag is optional.<br> Its format is:</p> <p>#EXT-X-PLAYLIST-TYPE:<type-enum><br> Among them: type-enum optional values are as follows:</p> <p>VOD: Video on Demand, which means that the video stream is a video-on-demand source, so the server cannot change the m3u8 file;</p> <p>EVENT: indicates that the video stream is<a href="https://uzbox.com/en/tag/zhiboyuan" class="st_tag internal_tag" rel="tag" title="Live Source">Live Source</a>, so the server cannot change or delete any part of the file (but can add new content to the end of the file).<br> Note: VOD files usually have an EXT-X-ENDLIST tag because they are on-demand sources and will not change; while EVEVT files generally do not have an EXT-X-ENDLIST tag when initialized, indicating that new files will be added to the end of the playlist. Therefore, the client is also required to periodically obtain the m3u8 file to obtain new media segment resources until the EXT-X-ENDLIST tag is accessed).</p> <p>EXT-XI-FRAMES-ONLY: This tag indicates that each media segment is an I-frame. I-frames frame video encoding does not depend on the number of other frames, so I-frames can be used for fast playback, rapid flipping, etc.<br> This tag is effective globally.<br> Its format is:</p> <p>#EXT-XI-FRAMES-ONLY<br> If the playlist is set to EXT-XI-FRAMES-ONLY, the duration of the slice (the value of the EXTINF tag) is the duration from the beginning of the current slice I-frame to the appearance of the next I-frame.<br> If the media resource contains I-frame slices, a media initialization block must be provided or the access to the media initialization block must be provided through the EXT-X-MAP tag, so that the client can load and decode these I-frame slices in any order.<br> If the I-frame slice has EXT-BYTE_RANGE set, then a media initialization chunk MUST NOT be provided.<br> Using EXT-XI-FRAMES-ONLY requires a compatible version number EXT-X-VERSION greater than or equal to 4.</p> <p>Master Playlist Type Tag: The Master Playlist defines backup streams, multi-language translation streams, and other global parameters.<br> The Master Playlist tag MUST NOT appear in a Media Playlist.<br> The specific tags are as follows:</p> <p>EXT-X-MEDIA: Used to specify alternative multi-language translation playback media list resources for the same content.<br> For example, three EXT-X-MEIDA tags can be used to provide audio resources containing the same content in English, French, and Spanish, or two EXT-X-MEDIA tags can be used to provide video resources with two different shooting angles.<br> Its format is:</p> <p>#EXT-X-MEDIA:<attribute-list><br> The value range of the attribute list is as follows:</p> <p>TYPE: The attribute value is an enumerable string.<br> There are four values: AUDIO, VIDEO, SUBTITLES, and CLOSED-CAPTIONS.<br> CLOSED-CAPTIONS are usually used.<br> This attribute is a required parameter.</p> <p>URI: The media resource playlist path enclosed in double quotes.<br> If the TYPE attribute value is CLOSED-CAPTIONS, then no URI shall be provided.<br> This attribute is optional.</p> <p>GROUP-ID: A string enclosed in double quotes, indicating the group to which the multilingual translation flow belongs.<br> This attribute is a required parameter.</p> <p>LANGUAGE: A double-quoted string that specifies the language used by the stream.<br> This attribute is optional.</p> <p>ASSOC-LANGUAGE: A double-quoted string containing a language tag that provides one of the language versions of a multi-language stream.<br> This parameter is optional.</p> <p>NAME: A double-quoted string used to provide a human-readable description for the translation stream.<br> If the LANGUAGE attribute is set, the NAME attribute should also be set.<br> This attribute is a required parameter.</p> <p>DEFAULT: The property value is an enumerable string.<br> The possible values are YES and NO.<br> The default value when this attribute is not specified is NO.<br> If this property is set to YES, then the client SHOULD play the translated stream in the absence of other optional information.<br> This attribute is optional.</p> <p>AUTOSELECT: The property value is an enumerable string.<br> Valid values are YES or NO.<br> When not specified, the default is NO.<br> If this property is set to YES, the client can choose to play the translation stream when the user does not explicitly set it, because it can configure the current playback environment, such as the system language selection.<br> If this property is set, then it must also be set to YES when DEFAULT is set to YES.<br> This attribute is optional.</p> <p>FORCED: The attribute value is an enumerable string.<br> Valid values are YES or NO.<br> When not specified, the default is NO.<br> This property can be set only if TYPE is set to SUBTITLES.<br> When this property is set to YES, it implies that the translation stream contains important content. When this property is set, the client should choose to play the translation stream that best matches the current playback environment.<br> When this attribute is set to NO, it indicates that the translation stream content is intended to be used to respond to user display requests.<br> This attribute is optional.</p> <p>INSTREAM-ID: A string enclosed in double quotes that indicates the language (Rendition) version of the slice.<br> This attribute must be set when TYPE is set to CLOSED-CAPTIONS.<br> The available values are: &quot;CC1&quot;, &quot;CC2&quot;, &quot;CC3&quot;, &quot;CC4&quot; and &quot;SERVICEn&quot; (the value of n is 1~63).<br> For other TYPE values, this property must not be set.</p> <p>CHARACTERISTICS: A string consisting of one or more UTIs separated by commas enclosed in double quotes.<br> Each UTI represents a characteristic of a translation flow.<br> This attribute can contain private UTIs.<br> This attribute is optional.</p> <p>CHANNELS: A string consisting of an ordered list of arguments separated by backslash /, enclosed in double quotes.<br> All audio EXT-X-MEDIA tags should have the CHANNELS attribute set.<br> If the master playlist contains two translation streams of the same encoding but with different numbers of channed, the CHANNELS attribute must be set; otherwise, the CHANNELS attribute is an optional parameter.</p> <p>EXT-X-STREAM-INF: This attribute specifies a backup source. The attribute value provides information about the backup source.<br> Its format is:</p> <p>#EXT-X-STREAM-INF:<attribute-list><br> <uri><br> in:</p> <p>The media playlist specified by the URI carries the translation backup source specified by this tag.<br> URI is a required parameter.</p> <p>The EXT-X-STREAM-INF tag parameter attribute list has the following options:</p> <p>BANDWIDTH: This attribute is the number of bits transmitted per second, also known as bandwidth. It represents the peak rate of the backup stream.<br> This attribute is a required parameter.</p> <p>AVERAGE-BANDWIDTH: This attribute is the average slice transmission rate of the backup stream.<br> This attribute is optional.</p> <p>CODECS: A double-quoted string containing a comma-separated list of formats.<br> Each EXT-X-STREAM-INF tag SHOULD carry a CODECS attribute.</p> <p>RESOLUTION: This attribute describes the optimal pixel resolution of the backup stream video source.<br> This attribute is an optional parameter, but it is recommended to add this attribute setting for the backup stream that contains the video source.</p> <p>FRAME-RATE: This attribute uses a decimal floating-point value to describe the maximum frame rate of all videos in the backup stream.<br> For any video source in the backup stream whose frame rate exceeds 30 frames per second, this property setting should be increased.<br> This attribute is an optional parameter, but it is recommended to add this attribute setting for the backup stream that contains the video source.</p> <p>HDCP-LEVEL: This attribute value is an enumerable string.<br> Valid values are TYPE-0 or NONE.<br> A value of TYPE-0 indicates that the backup stream may fail to play unless the output is protected by High-bandwidth Digital Content Protection (HDCP).<br> A value of NONE indicates that the stream content does not require output copy protection.<br> Backup streams using different levels of HDCP encryption should use different media encryption keys.<br> This attribute is optional and should be provided in cases where playback may fail due to the lack of HDCP.</p> <p>AUDIO: The attribute value is enclosed in double quotes and must match the GROUP-ID attribute value of an EXT-X-MEDIA tag with the TYPE attribute set to AUDIO defined somewhere in the main playlist.<br> This attribute is optional.</p> <p>VIDEO: The attribute value is enclosed in double quotes and must match the GROUP-ID attribute value of an EXT-X-MEDIA tag with the TYPE attribute set to VIDEO defined somewhere in the main playlist.<br> This attribute is optional.</p> <p>SUBTITLES: The attribute value is enclosed in double quotes and must match the GROUP-ID attribute value of an EXT-X-MEDIA tag with the TYPE attribute set to SUBTITLES defined somewhere in the main playlist.<br> This attribute is optional.</p> <p>CLOSED-CAPTIONS: This attribute value can be a double-quoted string or NONE.<br> If its value is a string, it must match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag with the TYPE attribute set to CLOSED-CAPTIONS defined somewhere in the master playlist.<br> If its value is NONE, all ext-x-stream-inf tags must also set this attribute to NONE, indicating that none of the backup streams in the main playlist has a closed title. If one backup stream has a closed title, the other backup stream may not have a closed title, which may trigger playback interruption.<br> This attribute is optional.</p> <p>EXT-XI-FRAME-STREAM-INF: This tag indicates that the media playlist file contains I-frame frames of multiple media resources.<br> Its format is:</p> <p>#EXT-XI-FRAME-STREAM-INF:<attribute-list><br> The attribute list of this tag contains the same attribute list options as the EXT-XI-FRAME-STREAM-INF tag, except for FRAME-RATE, AUDIO, SUBTITLES and CLOSED-CAPTIONS. In addition, other attributes include:</p> <p>URI: This attribute value is a string enclosed in double quotes, indicating the path of the I-frame media playlist file. The media playlist file must contain the EXT-XI-FRAMES-ONLY tag.<br> EXT-X-SESSION-DATA: This tag allows the main playlist to carry arbitrary session data.<br> This tag is optional.<br> Its format is:</p> <p>#EXT-X-SESSION-DATA:<attribute-list><br> Among them, the parameter attribute list value options are as follows:</p> <p>DATA-ID: A string enclosed in double quotes, representing a specific data value.<br> This property should be named using reverse DNS, such as &quot;com.example.movie.title&quot;. However, since there is no central registry, conflicts may arise.<br> This attribute is a required parameter.</p> <p>VALUE: The attribute value is a double-quoted string containing the value specified by DATA-ID.<br> If LANGUAGE is set, VALUE should contain a human-readable string in that language.</p> <p>URI: A URI string enclosed in double quotes. The resource indicated by the URI must use the JSON format, otherwise the client may fail to parse it.</p> <p>LANGUAGE: A string enclosed in double quotes containing a language tag, indicating the language used by VALUE.</p> <p>EXT-X-SESSION-KEY: This tag allows the master playlist to specify the encryption keys of the media playlist. This allows the client to pre-load these keys without having to obtain them from the media playlist.<br> This tag is optional.<br> Its format is:<br> #EXT-X-SESSION-KEY:<attribute-list><br> The attribute list is the same as for EXT-X-KEY, except that the value of the METHOD attribute must not be NONE.<br> Playlist Type Tags: The following tags can be set in both the Master Playlist and the Media Playlist.<br> However, tags set in the master playlist should not be set again in the media playlist pointed to by the master playlist.<br> The same tags that appear in both playlists must have the same value. These tags cannot appear more than once in a playlist (they can only be used once). The specific tags are as follows:</p> <p>EXT-X-INDEPENDENT-SEGMENTS: This tag indicates that all media samples in a media segment can be decoded independently without relying on other media segment information.<br> This tag is valid for all media segments in the list.<br> Its format is:</p> <p>#EXT-X-INDEPENDENT-SEGMENTS<br> If this tag appears in the master playlist, it applies to all media clips in all media playlists.</p> <p>EXT-X-START: This tag indicates the start position of the playlist.<br> By default, when a client starts a playback session, it should use the position specified by this tag for playback.<br> This tag is optional.<br> Its format is:</p> <p>#EXT-X-START:<attribute-list><br> The value range of its parameter attribute list is as follows:</p> <p>TIME-OFFSET: This attribute value is a signed decimal floating point number (unit: seconds).<br> A positive number representing a time offset from the start of the playlist.<br> A negative number represents a time offset before the last position of a media segment in the playlist.<br> The absolute value of this attribute should not exceed the duration of the playlist. If it exceeds, it means that the file has reached the end (positive value) or the beginning (negative value).<br> If the Playlist does not contain the EXT-X-ENDLIST tag, the TIME-OFFSET attribute value should not be within three slices of the end of the playback file.</p> <p>PRECISE: The value is an enumerable string.<br> Valid values are YES or NO.<br> If the value is YES, the client SHOULD play the media segment containing the TIME-OFFSET, but SHOULD NOT render the sample chunks within that chunk that precede the TIME-OFFSET.<br> If the value is NO, the client SHOULD attempt to render all sample chunks within the media fragment.<br> This attribute is optional and is considered to be NO if not specified.</p> <p>At this point, we have completely introduced the m3u8 related tags.</p> <p>Next, we will briefly introduce the specific operations of obtaining resource files.</p> <p>As mentioned above, the m3u8 file is either a media playlist or a master playlist. Regardless of the type of playlist, its valid content consists of two structures:</p> <p>The information starting with #EXT is the tag information, which is used as a further description of the media resource;<br> The rest is resource information, either the path of the fragment resource (Media Playlist) or the path of the m3u8 resource (Master Playlist);<br> Let's first briefly introduce the representation method of m3u8 file media fragments:</p> <p>In the m3u8 file, the media segment can be represented by the full path. As shown below:<br> #EXTINF:10.0,<br> <a href="http://example.com/movie1/fileSequenceA.ts" rel="nofollow">http://example.com/movie1/fileSequenceA.ts</a><br> In this way, the path to obtain the resource fragment is the path specified in the m3u8 file, that is, http://example.com/movie1/fileSequenceA.ts</p> <p>In m3u8 files, media segments can also be represented using relative paths, as shown below:<br> #EXTINF:10.0,<br> fileSequenceA.ts<br> This means that the path of the fragment file is relative to the path of the m3u8 file. That is, assuming that the current path of m3u8 is: https://127.0.0.1/hls/m3u8, then the path of the fragment file fileSequenceA.ts is: https://127.0.0.1/hls/fileSequenceA.ts</p> <p>Although you can use absolute paths to specify media fragment resource paths in m3u8 files, a better choice is to use relative paths. Relative paths are lighter than absolute paths and are relative to the URL of the m3u8 file. In contrast, absolute paths increase the m3u8 file content (more characters), increase the file content, and also increase the network transmission volume.</p> <p>Some other notes<br> There are two ways to request an m3u8 playlist: one is to request via the m3u8 URI, then the file must end with .m3u8 or .m3u;<br> The second is to make a request via HTTP, then the request header<a href="https://uzbox.com/en/tag/content" class="st_tag internal_tag" rel="tag" title="content">Content</a>-Type must be set to application/vnd.apple.mpegurl or audio/mpegurl.</p> <p>Blank lines and comment lines are ignored during parsing.</p> <p>The total duration of the streaming resources in the Media Playlist is the sum of the durations of each slice resource.</p> <p>The bit rate of each slice is the size of the slice divided by its corresponding duration (the duration specified by EXTINF).</p> <p>The same attribute AttributeName can only appear once in the attribute list of a tag.</p> <p>The duration specified by EXT-X-TARGETDURATION must not be changed. Typically, this value specifies a duration of 10 seconds.</p> <p>For slices that specify EXT-X-FRAMES-ONLY and whose resources do not immediately carry a media initialization block, the EXT-X-MAP tag should be added to specify how the media initialization block is obtained.</p> <p>The compatibility version number EXT-X-VERSION required to use the EXT-X-MAP tag containing the tag EXT-XI-FRAMES-ONLY must be greater than or equal to 5; the compatibility version number required to use only EXT-X-MAP must be greater than or equal to 6.</p> <p>The media initialization block declared by the EXT-X-MAP tag can be encrypted using the AES-128 method. In this case, the EXT-X-KEY tag acting on the EXT-X-MAP tag must set the IV attribute.</p> <p>The EXT-X-DATERANGE tag with the attribute END-ON-NEXT=YES must carry the CLASS attribute, but not the DURATION and END-DATE attributes. Other EXT-X-DATERANGE tags with the same CLASS may not specify overlapping date ranges.</p> <p>If the date range does not specify the DURATION, END_DATE, END-ON-NEXT=YES attributes, its duration is unknown, even if the PLANNED-DURATION attribute is set.</p> <p>If a playlist sets the EXT-X-DATERANGE tag, it must also set the EXT-X-PROGRAM-DATE-TIME tag.</p> <p>If a playlist sets two EXT-X-DATERANGE tags with the same ID attribute value, the corresponding values in the two EXT-X-DATERANGE tags for the same attribute name must be consistent.</p> <p>If EXT-X-DATERANGE sets both the DURATION and END-DATE attributes, the END-DATE attribute value must equal the START-DATE attribute value plus the DURATION attribute value.</p> <p>The EXT-X-MEDIA-SEQUENCE tag MUST appear before the first segment in a playlist.</p> <p>The EXT-X-DISCONTINUITY-DEQUENCE tag MUST appear before the first segment in a playlist.</p> <p>The EXT-X-DISCONTINUITY-DEQUENCE tag MUST appear before any EXT-X-DISCONTINUITY tag.</p> <p>If the EXT-X-PLAYLIST-TYPE tag is not set in the m3u8 file, the playlist can be modified at any time. For example, the media segments in the playlist can be updated or deleted.</p> <p>Each EXT-XI-FRAME-STREAM-INF tag must contain a BANDWIDTH and URI attributes.</p> <p>Each EXT-X-SESSION-DATA tag must contain either a VALUE or a URI attribute, but not both.</p> <p>A playlist can contain multiple EXT-X-SESSION-DATA tags with the same DATA-ID attribute, but cannot contain multiple EXT-X-SESSION-DATA tags with the same DATA-ID and the same LANGUAGE attribute.</p> <p>If EXT-X-SESSION-KEY is set, then its METHOD, KEYFORMAT, and KEYFORMATVERSIONS attribute values MUST be identical to those of any EXT-X-KEY tag for the same URI.</p> <p>If multiple alternate streams or multiple language streams use the same encryption key and format, the EXT-X-SESSION-KEY tag should be set.</p> <p>A master playlist MUST NOT set multiple EXT-X-SESSION-KEY tags with the same METHOD, URI, IV, KEYFORMAT, and KEYFORMATVERSIONS attribute values.</p> <h3 class="typography-headline"><span id="HTTP"><a href="https://developer.apple.com/streaming/"><span>Understand what HTTP Live Streaming is</span></a></span></h3><div class="kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom" data-payload="{"align":"center","id":"9800","slug":"default","valign":"bottom","ignore":"","reference":"auto","class":"","count":"0","legendonly":"","readonly":"","score":"0","starsonly":"","best":"5","gap":"5","greet":"评分","legend":"0\5 - (0 votes)","size":"24","title":"m3u8 格式是什么文件?","width":"0","_legend":"{score}\{best} ({count} {votes})","font_factor":"1.25"}"> <div class="kksr-stars"> <div class="kksr-stars-inactive"> <div class="kksr-star" data-star="1" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="2" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="3" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="4" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="5" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> </div> <div class="kksr-stars-active" style="width: 0px;"> <div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> </div> </div><div class="kksr-legend" style="font-size: 19.2px;"> <span class="kksr-muted">score</span> </div> </div></div><div class="entry-tags is-width-constrained"><div class="entry-tags-items"><a href="https://uzbox.com/en/tag/aria" rel="tag"><span>#</span> ARIA</a><a href="https://uzbox.com/en/tag/bt" rel="tag"><span>#</span> BT</a><a href="https://uzbox.com/en/tag/content" rel="tag"><span>#</span> content</a><a href="https://uzbox.com/en/tag/dns" rel="tag"><span>#</span> DNS</a><a href="https://uzbox.com/en/tag/eth" rel="tag"><span>#</span> eth</a><a href="https://uzbox.com/en/tag/iso" rel="tag"><span>#</span> iso</a><a href="https://uzbox.com/en/tag/m3u" rel="tag"><span>#</span> m3u</a><a href="https://uzbox.com/en/tag/m3u8" rel="tag"><span>#</span> m3u8</a><a href="https://uzbox.com/en/tag/mac" rel="tag"><span>#</span> Mac</a><a href="https://uzbox.com/en/tag/xyz" rel="tag"><span>#</span> xyz</a><a href="https://uzbox.com/en/tag/shenmeshim3u8" rel="tag"><span>#</span> What is m3u8</a><a href="https://uzbox.com/en/tag/daili" rel="tag"><span>#</span> acting</a><a href="https://uzbox.com/en/tag/dailifuwuqi" rel="tag"><span>#</span> Proxy Server</a><a href="https://uzbox.com/en/tag/zifuchuan" rel="tag"><span>#</span> String</a><a href="https://uzbox.com/en/tag/fuwuqi" rel="tag"><span>#</span> server</a><a href="https://uzbox.com/en/tag/zhiboyuan" rel="tag"><span>#</span> Live Source</a><a href="https://uzbox.com/en/tag/wxya-2" rel="tag"><span>#</span> Wikipedia</a></div></div><nav class="post-navigation is-width-constrained ct-hidden-sm" > <a href="https://uzbox.com/en/tech/airpods-html" class="nav-item-prev"><figure class="ct-media-container ct-hidden-sm ct-hidden-md ct-hidden-lg"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2022/10/2058664ff165753211a59742eaf13907-440x440.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 1/1;" /><svg width="20px" height="15px" viewbox="0 0 20 15" fill="#ffffff"><polygon points="0,7.5 5.5,13 6.4,12.1 2.4,8.1 20,8.1 20,6.9 2.4,6.9 6.4,2.9 5.5,2 "/></svg></figure><div class="item-content"> <span class="item-label"> Previous <span>Post</span> </span><span class="item-title"> What should I do if I accidentally drop my AirPods into water? </span></div></a> <a href="https://uzbox.com/en/tech/ipadwufagengxin-html" class="nav-item-next"><div class="item-content"> <span class="item-label"> Next <span>Post</span> </span><span class="item-title"> What to do if your old iPhone or iPad cannot be updated? How to solve the problem of old iPad not being able to update </span></div><figure class="ct-media-container ct-hidden-sm ct-hidden-md ct-hidden-lg"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2022/10/08bb5e63fafb1dce5e61d7cfec782e85-440x440.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 1/1;" /><svg width="20px" height="15px" viewbox="0 0 20 15" fill="#ffffff"><polygon points="14.5,2 13.6,2.9 17.6,6.9 0,6.9 0,8.1 17.6,8.1 13.6,12.1 14.5,13 20,7.5 "/></svg></figure> </a></nav><div class="ct-related-posts is-width-constrained is-layout-slider" ><div class="flexy-container" data-flexy="no" data-autoplay="3"><div class="flexy"><div class="flexy-view" data-flexy-view="boxed"><div class="ct-related-posts-items flexy-items"><article class="flexy-item" ><div id="post-15676" class="post-15676 post type-post status-publish format-standard has-post-thumbnail hentry category-wp category-tech tag-lcpyouhua tag-memcached tag-memcachedguanwang tag-memcachedkuozhan tag-opcache tag-wordpress tag-wpchajian tag-jiazaisudu tag-anzhuangmemcachedkuozhan tag-huancunchajian tag-peizhiopcache"><a class="ct-media-container" href="https://uzbox.com/en/tech/memcached-html" aria-label="LCP optimization installation Memcached extension OPcache configuration, WordPress optimization guide"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iMzE4IiB2aWV3Qm94PSIwIDAgNDQwIDMxOCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="318" data-src="https://uzbox.com/wp-content/uploads/2023/03/ccc80281d25cffbd28351b8f7bcf99e2-440x318.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/tech/memcached-html" rel="bookmark">LCP optimization installation Memcached extension OPcache configuration, WordPress optimization guide</a></h3></div></article><article class="flexy-item" ><div id="post-9158" class="post-9158 post type-post status-publish format-standard has-post-thumbnail hentry category-windows-tech category-app tag-gitee tag-github tag-tts tag-tts-vue tag-ttslangdu tag-tingxiaoshuo tag-anzhuo tag-anzhuangweizhi tag-changjianwenti tag-weiruan tag-weiruantts tag-weiruanyuyinhecheng tag-weiruanyuyinhechenggongju tag-piliangzhuanhuan tag-wenzizhuanyuyin tag-zidongbofang tag-yuyinhecheng tag-peiyin"><a class="ct-media-container" href="https://uzbox.com/en/app/tts-vue-html" aria-label="Text to Speech TTS-Vue v1.8.7 PC version"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2022/09/e0fb125a68aad0a7fbe5f7cbd148a0e1-440x440.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/app/tts-vue-html" rel="bookmark">Text to Speech TTS-Vue v1.8.7 PC version</a></h3></div></article><article class="flexy-item" ><div id="post-1557" class="post-1557 post type-post status-publish format-standard has-post-thumbnail hentry category-windows-tech tag-macos tag-vm tag-jiesuo tag-jiesuoapple"><a class="ct-media-container" href="https://uzbox.com/en/tech/windows-tech/win10shiyongvmanzhuangpingguomacosxitongjiesuoapple-macosxxitong-html" aria-label="Win10 uses VM to install Apple MacOS system, VM unlocks Apple MacOS X system"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2020/03/2020040613353278-440x440.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/tech/windows-tech/win10shiyongvmanzhuangpingguomacosxitongjiesuoapple-macosxxitong-html" rel="bookmark">Win10 uses VM to install Apple MacOS system, VM unlocks Apple MacOS X system</a></h3></div></article><article class="flexy-item" ><div id="post-4887" class="post-4887 post type-post status-publish format-standard has-post-thumbnail hentry category-chain tag-cpuwakuang tag-gpu tag-gpu-wakuang tag-nanominer tag-nbminer tag-phoenixminer tag-t-rex tag-wakuangjiaocheng tag-xiankawakuang tag-bawanglong"><a class="ct-media-container" href="https://uzbox.com/en/tech/chain/wakuang-html" aria-label="Graphics card mining tutorial, GPU/CPU mining software latest version collection"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2021/09/2021090209411053-440x440.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/tech/chain/wakuang-html" rel="bookmark">Graphics card mining tutorial, GPU/CPU mining software latest version collection</a></h3></div></article><article class="flexy-item" ><div id="post-13317" class="post-13317 post type-post status-publish format-standard has-post-thumbnail hentry category-windows-tech category-app tag-freeplane tag-xmind tag-dagang tag-siweidaotu tag-siweidaoturuanjian tag-liuchengtu"><a class="ct-media-container" href="https://uzbox.com/en/app/xmind-html" aria-label="Recommend several free flowchart mind map free download xmind simple and easy to use mind mapping software"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2023/01/c02175fe07338d9835efa8c71aebcc40-scaled-1-440x440.jpeg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/app/xmind-html" rel="bookmark">Recommend several free flowchart mind map free download xmind simple and easy to use mind mapping software</a></h3></div></article><article class="flexy-item" ><div id="post-16178" class="post-16178 post type-post status-publish format-standard has-post-thumbnail hentry category-linux-app category-tech tag-amh tag-apache tag-centos tag-centos7 tag-centos8 tag-cockpit tag-debian tag-epel tag-github tag-linux tag-mysql tag-nginx tag-phpmyadmin tag-raw-githubusercontent-com tag-ssh tag-ubuntu tag-webui tag-yum"><a class="ct-media-container" href="https://uzbox.com/en/app/linux-app/ispconfig-html" aria-label="ISPConfig 3.2 Installation Tutorial CentOS Install ISPConfig Virtual Host Panel"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2023/08/uzbox-20230809-pabqv-440x440.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/app/linux-app/ispconfig-html" rel="bookmark">ISPConfig 3.2 Installation Tutorial CentOS Install ISPConfig Virtual Host Panel</a></h3></div></article><article class="flexy-item" ><div id="post-11216" class="post-11216 post type-post status-publish format-standard has-post-thumbnail hentry category-android category-app category-tech tag-android tag-apk tag-app tag-github tag-google tag-google-play tag-line tag-quark tag-raw-githubusercontent-com tag-tvbox tag-tvboxxiazai tag-tvbox-free-interface tag-tvbox-online-film-and-television-interface tag-tvboxanzhuang tag-tvboxguanwang tag-tvbox-film-and-television-resource-interface tag-tvboxjiekou tag-tvbox-interface-sharing tag-tvbox-interface-settings tag-tvboxshujuyuanjiekou tag-tvboxzuixinjiekou tag-custom-configuration-for-tvbox tag-tvboxshezhi tag-tvbox-resource-interface tag-tvboxpeizhi tag-tvboxpeizhidezhi tag-tvbox-configuration-tutorial tag-tvbox-configuration-method tag-tvbox-configuration-steps tag-tvbox-channel-interface tag-tvbox-high-definition-interface tag-txt tag-usb tag-mianfeidianshiheziyingyong tag-mianfeikanpian tag-dianshiheziapp tag-dianshiheziyingyong"><a class="ct-media-container" href="https://uzbox.com/en/app/tvbox-html/" aria-label="TVBox official download free TV box APP TVBox Android latest version, watch all online movies and TV on demand for free!"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2023/09/img15-440x440.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/app/tvbox-html/" rel="bookmark">TVBox official download free TV box APP TVBox Android latest version, watch all online movies and TV on demand for free!</a></h3></div></article><article class="flexy-item" ><div id="post-16242" class="post-16242 post type-post status-publish format-standard has-post-thumbnail hentry category-tech tag-chatgpt tag-chatgptzhuce tag-chatgptzhucejiaocheng tag-openai tag-guoneizhucechatgptdefangfa tag-zhucechatgpt"><a class="ct-media-container" href="https://uzbox.com/en/tech/chatgpt-3-html" aria-label="ChatGPT registration 2023 Domestic registration method for ChatGPT 100% is available"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NDAiIGhlaWdodD0iNDQwIiB2aWV3Qm94PSIwIDAgNDQwIDQ0MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="440" height="440" data-src="https://uzbox.com/wp-content/uploads/2023/03/OPENAI-CHATGPT-2_1675484582663_1675484582663_1675484603670_1675484603670-440x440.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" decoding="async" style="aspect-ratio: 16/9;" /></a><h3 class="related-entry-title"><a href="https://uzbox.com/en/tech/chatgpt-3-html" rel="bookmark">ChatGPT registration 2023 Domestic registration method for ChatGPT 100% is available</a></h3></div></article></div></div> <span class="flexy-arrow-prev"> <svg width="16" height="10" fill="currentColor" viewbox="0 0 16 10"> <path d="M15.3 4.3h-13l2.8-3c.3-.3.3-.7 0-1-.3-.3-.6-.3-.9 0l-4 4.2-.2.2v.6c0 .1.1.2.2.2l4 4.2c.3.4.6.4.9 0 .3-.3.3-.7 0-1l-2.8-3h13c.2 0 .4-.1.5-.2s.2-.3.2-.5-.1-.4-.2-.5c-.1-.1-.3-.2-.5-.2z"/> </svg> </span><span class="flexy-arrow-next"> <svg width="16" height="10" fill="currentColor" viewbox="0 0 16 10"> <path d="M.2 4.5c-.1.1-.2.3-.2.5s.1.4.2.5c.1.1.3.2.5.2h13l-2.8 3c-.3.3-.3.7 0 1 .3.3.6.3.9 0l4-4.2.2-.2V5v-.3c0-.1-.1-.2-.2-.2l-4-4.2c-.3-.4-.6-.4-.9 0-.3.3-.3.7 0 1l2.8 3H.7c-.2 0-.4.1-.5.2z"/> </svg> </span></div></div></div><div class="ct-comments is-width-constrained" id="comments"><div id="respond" class="comment-respond"><h2 id="reply-title" class="comment-reply-title">Leave a Reply<span class="ct-cancel-reply"><a rel="nofollow" id="cancel-comment-reply-link" href="/en/tech/m3u8.html#respond" style="display:none;">Cancel Reply</a></span></h2><form action="https://uzbox.com/wp-comments-post.php" method="post" id="commentform" class="comment-form has-labels-inside" data-trp-original-action="https://uzbox.com/wp-comments-post.php"><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-field-input-author"> <label for="author">Name </label> <input id="author" name="author" type="text" value="" size="30"></p><p class="comment-form-field-input-email"> <label for="email">Email </label> <input id="email" name="email" type="text" value="" size="30"></p><p><label for="wpcaptcha_captcha">Are you human? Please solve: <img class="wpcaptcha-captcha-img" style="vertical-align: text-top;" src="data:image/png;base64,R0lGODdhLQAPALMAAP///0JCQgAAAP///49tq6yFgpyZo79+kMaXwgAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAALQAPAAAEmHDIQcq8OEs0+TxaaIChhhDUhBZGWZ6WO5BSPNiuoOvYWLa9Awe4K0p4R0EGdqlofBIQUjYNIjhV58CzrYa8mUNlypWgzMpdRl1iTUYIKCYmKCgHYPw9cy7WtRlAQEkaYGUbZwNwYVETeVVyH2CAG0oePFNVODUteYpCKkoEmUYqfDIYFS12dTKgF6+oYXESg4G3si4EJCARADs=" alt="Captcha" /><input class="input" type="text" size="3" name="wpcaptcha_captcha[6069]" id="wpcaptcha_captcha" value=""/><input type="hidden" name="wpcaptcha_captcha_token[6069]" id="wpcaptcha_captcha_token" value="b833701bc8bb4ed50b676e21f0c89ad1" /></label></p><br /><p class="comment-form-field-textarea"> <label for="comment">Add Comment<b class="required"> *</b></label><textarea id="comment" name="comment" cols="45" rows="8" required="required"></textarea></p><p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"><label for="wp-comment-cookies-consent">Save my name and email in this browser for the next time I comment.</label></p><p class="gdpr-confirm-policy"> <input name="ct_has_gdprconfirm" type="hidden" value="yes"> <input id="gdprconfirm_comment" class="ct-checkbox" name="gdprconfirm" type="checkbox" required><label for="gdprconfirm_comment">Anonymous comments are accepted<a href="https://boxqu.com/privacy-policy" target="_blank" rel="noopener">Privacy Policy</a></label></p><p class="form-submit"><button type="submit" name="submit" id="submit" class="submit" value="Post Comment">Post Comment</button> <input type='hidden' name='comment_post_ID' value='9800' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /></p><input type="hidden" name="trp-form-language" value="en"/></form></div></div></article><aside class="ct-hidden-sm" data-type="type-2" id="sidebar"><div class="ct-sidebar" data-sticky="widgets" data-widgets="separated"><div class="ct-widget is-layout-flow recent-posts-widget-with-thumbnails" id="recent-posts-widget-with-thumbnails-2"><div id="rpwwt-recent-posts-widget-with-thumbnails-2" class="rpwwt-widget"><ul><li><a href="https://uzbox.com/en/www/2025-new-freemovie-websites-html"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="100" height="100" data-src="https://uzbox.com/wp-content/uploads/2025/09/2025092119305322-250x250.jpg" class="attachment-100x100 size-100x100 wp-post-image" alt="" decoding="async" /><span class="rpwwt-post-title">2025 latest overseas Chinese free movie website, continuously updating free movies and TV series, no ads, no membership, no lag</span></a><div class="rpwwt-post-categories"><a href="https://uzbox.com/en/www">World Website</a></div><div class="rpwwt-post-date">2025-09-22</div></li><li><a href="https://uzbox.com/en/app/tvbox/2025-tvbox-new-jiekou-html"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="100" height="100" data-src="https://uzbox.com/wp-content/uploads/2025/09/20250919-jgfe0-250x250.png" class="attachment-100x100 size-100x100 wp-post-image" alt="" decoding="async" data-srcset="https://uzbox.com/wp-content/uploads/2025/09/20250919-jgfe0-250x250.png 250w, https://uzbox.com/wp-content/uploads/2025/09/20250919-jgfe0-440x440.png 440w" data-sizes="(max-width: 100px) 100vw, 100px" /><span class="rpwwt-post-title">2025 latest tvbox interface, TVBOX latest version download, TVBOX configuration private line</span></a><div class="rpwwt-post-categories"><a href="https://uzbox.com/en/app/tvbox">TVBox</a>, <a href="https://uzbox.com/en/app">application</a></div><div class="rpwwt-post-date">2025-09-19</div></li><li><a href="https://uzbox.com/en/soft/diskgenius-html"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="100" height="100" data-src="https://uzbox.com/wp-content/uploads/2025/09/20250917-56872-250x250.jpg" class="attachment-100x100 size-100x100 wp-post-image" alt="" decoding="async" /><span class="rpwwt-post-title">DiskGenius Free Download: Best Free Disk Management Software of 2025, Recommended Data Recovery and Partitioning Tools</span></a><div class="rpwwt-post-categories"><a href="https://uzbox.com/en/soft">software</a></div><div class="rpwwt-post-date">2025-09-17</div></li><li><a href="https://uzbox.com/en/app/mytv-android-html"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="100" height="100" data-src="https://uzbox.com/wp-content/uploads/2025/09/20250917-6c165-250x250.webp" class="attachment-100x100 size-100x100 wp-post-image" alt="" decoding="async" data-srcset="https://uzbox.com/wp-content/uploads/2025/09/20250917-6c165-250x250.webp 250w, https://uzbox.com/wp-content/uploads/2025/09/20250917-6c165-440x440.webp 440w" data-sizes="(max-width: 100px) 100vw, 100px" /><span class="rpwwt-post-title">MyTV Android: The most powerful Android TV live broadcast software in 2025, HD free live broadcast APP</span></a><div class="rpwwt-post-categories"><a href="https://uzbox.com/en/app/android">Android</a>, <a href="https://uzbox.com/en/app">application</a></div><div class="rpwwt-post-date">2025-09-17</div></li><li><a href="https://uzbox.com/en/soft/freeoffice-html"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" width="100" height="100" data-src="https://uzbox.com/wp-content/uploads/2025/09/20250916-8qp3z-250x250.jpg" class="attachment-100x100 size-100x100 wp-post-image" alt="" decoding="async" /><span class="rpwwt-post-title">Free Office full version download - Use Microsoft Office software forever</span></a><div class="rpwwt-post-categories"><a href="https://uzbox.com/en/soft">software</a></div><div class="rpwwt-post-date">2025-09-16</div></li></ul></div></div><div class="ct-widget is-layout-flow widget_categories" id="categories-2"><h3 class="widget-title">Categories</h3><ul><li class="cat-item cat-item-30"><a href="https://uzbox.com/en/tech/adobe">Adobe</a> (5)</li><li class="cat-item cat-item-22"><a href="https://uzbox.com/en/ai/ai-tools">AI Tools</a> (31)</li><li class="cat-item cat-item-25"><a href="https://uzbox.com/en/app/android">Android</a> (44)</li><li class="cat-item cat-item-3081"><a href="https://uzbox.com/en/tech/cyberpanel">CyberPanel</a> (9)</li><li class="cat-item cat-item-26"><a href="https://uzbox.com/en/app/ios">iOS</a> (6)</li><li class="cat-item cat-item-28"><a href="https://uzbox.com/en/app/linux-app">Linux</a> (71)</li><li class="cat-item cat-item-27"><a href="https://uzbox.com/en/app/mac">Mac</a> (13)</li><li class="cat-item cat-item-35"><a href="https://uzbox.com/en/tech/openwrt">openwrt router</a> (13)</li><li class="cat-item cat-item-31"><a href="https://uzbox.com/en/tech/seo">SEO</a> (23)</li><li class="cat-item cat-item-3126"><a href="https://uzbox.com/en/app/tvbox">TVBox</a> (17)</li><li class="cat-item cat-item-32"><a href="https://uzbox.com/en/tech/windows-tech">Windows</a> (111)</li><li class="cat-item cat-item-33"><a href="https://uzbox.com/en/tech/wp">WordPress</a> (55)</li><li class="cat-item cat-item-10"><a href="https://uzbox.com/en/www/down">download</a> (13)</li><li class="cat-item cat-item-1"><a href="https://uzbox.com/en/www">World Website</a> (34)</li><li class="cat-item cat-item-11"><a href="https://uzbox.com/en/www/cloud">Cloud Storage</a> (11)</li><li class="cat-item cat-item-21"><a href="https://uzbox.com/en/ai">AI</a> (63)</li><li class="cat-item cat-item-23"><a href="https://uzbox.com/en/usa">Going to sea</a> (50)</li><li class="cat-item cat-item-34"><a href="https://uzbox.com/en/tech/chain">Blockchain</a> (13)</li><li class="cat-item cat-item-12"><a href="https://uzbox.com/en/www/blog">blog</a> (3)</li><li class="cat-item cat-item-13"><a href="https://uzbox.com/en/www/tool">tool</a> (50)</li><li class="cat-item cat-item-24"><a href="https://uzbox.com/en/app">application</a> (67)</li><li class="cat-item cat-item-29"><a href="https://uzbox.com/en/tech">Technology Geek</a> (344)</li><li class="cat-item cat-item-14"><a href="https://uzbox.com/en/www/so">search</a> (3)</li><li class="cat-item cat-item-15"><a href="https://uzbox.com/en/www/news">news</a> (1)</li><li class="cat-item cat-item-39"><a href="https://uzbox.com/en/soft/server-soft">Server Tools</a> (3)</li><li class="cat-item cat-item-36"><a href="https://uzbox.com/en/game">game</a> (27)</li><li class="cat-item cat-item-37"><a href="https://uzbox.com/en/100">Encyclopedia</a> (39)</li><li class="cat-item cat-item-16"><a href="https://uzbox.com/en/www/social">social contact</a> (3)</li><li class="cat-item cat-item-17"><a href="https://uzbox.com/en/www/complex">comprehensive</a> (9)</li><li class="cat-item cat-item-18"><a href="https://uzbox.com/en/www/upload">Network disk</a> (3)</li><li class="cat-item cat-item-40"><a href="https://uzbox.com/en/soft/drive-tools">Network disk tools</a> (1)</li><li class="cat-item cat-item-38"><a href="https://uzbox.com/en/soft">software</a> (32)</li></ul></div><div class="ct-sticky-widgets"><div class="ct-widget is-layout-flow toc_widget" id="toc-widget-3"><ul class="toc_widget_list no_bullets"><li><a href="#m3u8"><span class="toc_number toc_depth_1">1</span> Introduction to m3u8</a><ul><li><a href="#M3U8"><span class="toc_number toc_depth_2">1.1</span> M3U8 File Introduction</a></li><li><a href="#m3u8-2"><span class="toc_number toc_depth_2">1.2</span> m3u8 file format</a></li><li><a href="#HTTP"><span class="toc_number toc_depth_2">1.3</span> Understand what HTTP Live Streaming is</a></li></ul></li></ul></div></div></div></aside></div></main><footer id="footer" class="ct-footer" data-id="type-1"><div data-row="top"><div class="ct-container"><div data-column="menu"><nav id="footer-menu" class="footer-menu-inline menu-container" data-id="menu" aria-label="DownMenu"><ul id="menu-downmenu" class="menu"><li id="menu-item-74" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a href="https://uzbox.com/en/app/telegram-down-html/" class="ct-menu-link">Paper Plane Download Telegram</a></li><li id="menu-item-75" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-75"><a href="https://pagespeed.web.dev/" class="ct-menu-link">PageSpeed Insights</a></li><li id="menu-item-76" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-76"><a href="https://proton.me/mail" class="ct-menu-link">Anonymous email application</a></li><li id="menu-item-77" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-77"><a href="https://uzbox.com/en/app/smarttubenext-html/" class="ct-menu-link">Watch YouTube on TV</a></li><li id="menu-item-78" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-78"><a href="https://uzbox.com/en/www/gtmetrix-html/" class="ct-menu-link">Website performance testing</a></li><li id="menu-item-81" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-81"><a href="https://uzbox.com/en/tech/sms-activate-html/" class="ct-menu-link">Foreign code receiving platform</a></li><li id="menu-item-82" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-82"><a href="https://uzbox.com/en/tech/freeaws-html/" class="ct-menu-link">Free cloud server</a></li><li id="menu-item-83" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-83"><a href="https://uzbox.com/en/ai/openai-chatgpt-html/" class="ct-menu-link">OpenAI-chatgpt</a></li><li id="menu-item-84" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-84"><a href="https://uzbox.com/en/tech/linux/aws-lnmp-html/" class="ct-menu-link">WEB server construction</a></li><li id="menu-item-85" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-85"><a href="https://uzbox.com/en/tech/wsapacman-html/" class="ct-menu-link">Win11 Android subsystem</a></li><li id="menu-item-86" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-86"><a href="https://uzbox.com/en/ai/chatgpt-reg-html/" class="ct-menu-link">The Ultimate Guide to Chatgpt Registration</a></li><li id="menu-item-90" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-90"><a href="https://uzbox.com/en/app/tvbox-html/" class="ct-menu-link">Install TVBox</a></li><li id="menu-item-91" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-91"><a href="https://uzbox.com/en/game/winkawaks-html/" class="ct-menu-link">Arcade emulator download</a></li><li id="menu-item-92" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-92"><a href="https://www.amazonaws.cn/?sc_channel=seo&campaign=backlink" class="ct-menu-link">Amazon Web Services</a></li><li id="menu-item-93" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-93"><a href="https://www.mediafire.com" class="ct-menu-link">Mediafire Cloud Disk</a></li><li id="menu-item-94" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-94"><a href="https://www.ip138.com/" class="ct-menu-link">IP Address Lookup</a></li><li id="menu-item-95" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-95"><a href="https://uzbox.com/en/ai/chatgpt-html/" class="ct-menu-link">ChatGPT Registration Tutorial</a></li><li id="menu-item-96" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-96"><a href="https://uzbox.com/en/usa/addgoogle-html/" class="ct-menu-link">Google Account Registration</a></li></ul></nav></div></div></div><div data-row="middle" class="ct-hidden-sm ct-hidden-md"><div class="ct-container" data-columns-divider="md:sm"><div data-column="widget-area-1"><div class="ct-widget is-layout-flow widget_recent_comments" id="recent-comments-1"><h3 class="widget-title">Recent Comments</h3><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link">wongdefuk@gmail.com</span> on <a href="https://uzbox.com/en/usa/googlecloud-html/comment-page-1#comment-6871">Free Cloud Server Google Cloud Google Cloud Server $400 USD Bonus Latest Strategy 2023</a></li><li class="recentcomments"><span class="comment-author-link">Anonymous</span> on <a href="https://uzbox.com/en/game/feixingqi-html/comment-page-1#comment-6870">Various versions of erotic flying chess, KTV flying chess, from easy to difficult, a must-have game!</a></li><li class="recentcomments"><span class="comment-author-link">trc</span> on <a href="https://uzbox.com/en/tech/sms-activate-2-html/comment-page-1#comment-6827">2025 Free Mobile Code Platform: SMS-activate can register hundreds of applications such as Google, Telegram, TikTok, etc.</a></li><li class="recentcomments"><span class="comment-author-link">Security vulnerabilities</span> on <a href="https://uzbox.com/en/tech/pingguocmsdajianjiaochengv2weizhandajianmianfeidianyingwangzhan-html/comment-page-1#comment-6826">Apple cms construction tutorial to build a movie website for free</a></li></ul></div></div><div data-column="ghost"></div><div data-column="logo"><div class="site-branding" data-id="logo" ></div></div></div></div><div data-row="bottom"><div class="ct-container" data-columns-divider="md"><div data-column="copyright"><div class="ct-footer-copyright" data-id="copyright"><p>Copyright © 2025 by <a href="https://uzbox.com/en/">High-quality box UzBox</a>  All Rights Reserved High-quality tool tutorials, truly useful! <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans" target="_blank" rel="nofollow noopener sponsored">CC BY-NC-SA 4.0 License</a>. Please indicate the source for non-commercial reproduction and citation.</p></div></div><div data-column="menu-secondary"><nav id="footer-menu-2" class="footer-menu-inline ct-hidden-sm ct-hidden-md" data-id="menu-secondary" aria-label="Footer Menu 2"><ul id="menu-footer-menu-2" class="menu"><li id="menu-item-27907" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27907"><a href="https://uzbox.com/en/feed/" class="ct-menu-link">RSS Feed</a></li><li id="menu-item-27910" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27910"><a href="https://uzbox.com/en/privacy-policy" class="ct-menu-link">Privacy Policy</a></li></ul></nav></div></div></div></footer></div><template id="tp-language" data-tp-language="en_US"></template><script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/en\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/blocksy\/*","\/en\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <script type="litespeed/javascript" data-src="https://www.googletagmanager.com/gtag/js?id=G-CT3LLJHWHG"></script> <script type="litespeed/javascript">window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)} gtag('js',new Date());gtag('config','G-CT3LLJHWHG')</script><div class="ct-drawer-canvas" data-location="end"><div class="ct-drawer-inner"> <a href="#main-container" class="ct-back-to-top ct-hidden-sm" data-shape="square" data-alignment="right" title="Go to top" aria-label="Go to top" hidden><svg class="ct-icon" width="15" height="15" viewbox="0 0 20 20"><path d="M10,0L9.4,0.6L0.8,9.1l1.2,1.2l7.1-7.1V20h1.7V3.3l7.1,7.1l1.2-1.2l-8.5-8.5L10,0z"/></svg> </a></div></div><script type="litespeed/javascript">document.addEventListener("DOMContentLiteSpeedLoaded",function(){var tocLinks=document.querySelectorAll('.toc_widget_list a');var observerOptions={root:null,       rootMargin:'0px',threshold:0};var observer=new IntersectionObserver(function(entries){var visibleEntries=entries.filter(function(entry){return entry.isIntersecting});if(visibleEntries.length>0){visibleEntries.sort(function(a,b){return a.boundingClientRect.top-b.boundingClientRect.top});var closestEntry=visibleEntries[0];var targetLink=document.querySelector('a[href="#'+closestEntry.target.id+'"]');if(targetLink){tocLinks.forEach(function(link){link.classList.remove('active-link')});targetLink.classList.add('active-link')}}},observerOptions);tocLinks.forEach(function(link){var targetId=link.getAttribute('href').substring(1);var targetElement=document.getElementById(targetId);if(targetElement){observer.observe(targetElement)}})});document.querySelectorAll('img').forEach(function(img){img.removeAttribute('title')})</script><script type="litespeed/javascript">!function(e,n){var r={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":4,"ampersandCleanup":!0,"linehover":!0,"rawcodeDbclick":!1,"textOverflow":"break","linenumbers":!0,"theme":"beyond","language":"generic","retainCssClasses":!0,"collapse":!1,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""},"resources":["https:\/\/uzbox.com\/wp-content\/plugins\/enlighter\/cache\/enlighterjs.min.css?Vg\/dwxUoLlDt3qB","https:\/\/uzbox.com\/wp-content\/plugins\/enlighter\/resources\/enlighterjs\/enlighterjs.min.js"]},o=document.getElementsByTagName("head")[0],t=n&&(n.error||n.log)||function(){};e.EnlighterJSINIT=function(){!function(e,n){var r=0,l=null;function c(o){l=o,++r==e.length&&(!0,n(l))}e.forEach(function(e){switch(e.match(/\.([a-z]+)(?:[#?].*)?$/)[1]){case"js":var n=document.createElement("script");n.onload=function(){c(null)},n.onerror=c,n.src=e,n.async=!0,o.appendChild(n);break;case"css":var r=document.createElement("link");r.onload=function(){c(null)},r.onerror=c,r.rel="stylesheet",r.type="text/css",r.href=e,r.media="all",o.appendChild(r);break;default:t("Error: invalid file extension",e)}})}(r.resources,function(e){e?t("Error: failed to dynamically load EnlighterJS resources!",e):"undefined"!=typeof EnlighterJS?EnlighterJS.init(r.selectors.block,r.selectors.inline,r.options):t("Error: EnlighterJS resources not loaded yet!")})},(document.querySelector(r.selectors.block)||document.querySelector(r.selectors.inline))&&e.EnlighterJSINIT()}(window,console);!function(e){"undefined"!=typeof jQuery&&jQuery(document).on("ajaxComplete",function(){"undefined"!=typeof EnlighterJSINIT&&e.setTimeout(function(){EnlighterJSINIT.apply(e)},180)})}(window)</script><script id="kk-star-ratings-js-extra" type="litespeed/javascript">var kk_star_ratings={"action":"kk-star-ratings","endpoint":"https:\/\/uzbox.com\/wp-admin\/admin-ajax.php","nonce":"c7f3a46621"}</script> <script id="toc-front-js-extra" type="litespeed/javascript">var tocplus={"visibility_show":"show","visibility_hide":"hide","width":"Auto"}</script> <script id="tptn_tracker-js-extra" type="litespeed/javascript">var ajax_tptn_tracker={"ajax_url":"https:\/\/uzbox.com\/wp-admin\/admin-ajax.php","top_ten_id":"9800","top_ten_blog_id":"1","activate_counter":"11","top_ten_debug":"0","tptn_rnd":"1282842501"}</script> <script id="ct-scripts-js-extra" type="litespeed/javascript">var ct_localizations={"ajax_url":"https:\/\/uzbox.com\/wp-admin\/admin-ajax.php","public_url":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/","rest_url":"https:\/\/uzbox.com\/en\/wp-json\/","search_url":"https:\/\/uzbox.com\/en\/search\/QUERY_STRING","show_more_text":"Show more","more_text":"More","search_live_results":"Search results","search_live_no_results":"No results","search_live_no_result":"No results","search_live_one_result":"You got %s result. Please press Tab to select it.","search_live_many_results":"You got %s results. Please press Tab to select one.","clipboard_copied":"Copied!","clipboard_failed":"Failed to Copy","expand_submenu":"Expand dropdown menu","collapse_submenu":"Collapse dropdown menu","dynamic_js_chunks":[{"id":"blocksy_pro_micro_popups","selector":".ct-popup","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/static\/bundle\/micro-popups.js?ver=2.1.13"},{"id":"blocksy_adv_cpt_read_progress","selector":".ct-read-progress-bar","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/extensions\/post-types-extra\/static\/bundle\/read-progress.js?ver=2.1.13"},{"id":"blocksy_dark_mode","selector":".ct-color-switch","trigger":"click","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/extensions\/color-mode-switch\/static\/bundle\/main.js?ver=2.1.13"},{"id":"blocksy_dark_mode","selector":".ct-color-switch","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/extensions\/color-mode-switch\/static\/bundle\/main.js?ver=2.1.13"},{"id":"blocksy_ext_trending","selector":".ct-trending-block [class*=\"ct-arrow\"]","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/extensions\/trending\/static\/bundle\/main.js?ver=2.1.13","trigger":"click"},{"id":"blocksy_mega_menu","selector":".menu .ct-ajax-pending","trigger":"slight-mousemove","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/extensions\/mega-menu\/static\/bundle\/main.js?ver=2.1.13","global_data":[{"var":"blocksyMegaMenu","data":{"persistence_key":"blocksy:mega-menu:4fd61a"}}]},{"id":"blocksy_account","selector":".ct-account-item[href*=\"account-modal\"], .must-log-in a","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/static\/bundle\/account.js?ver=2.1.13","deps":[],"global_data":[],"trigger":"click","deps_data":[]},{"id":"blocksy_sticky_header","selector":"header [data-sticky]","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/static\/bundle\/sticky.js?ver=2.1.13"}],"dynamic_styles":{"lazy_load":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/non-critical-styles.min.css?ver=2.1.13","search_lazy":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/non-critical-search-styles.min.css?ver=2.1.13","back_to_top":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/back-to-top.min.css?ver=2.1.13","cookie_notification":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/extensions\/cookies-consent\/static\/bundle\/main.min.css"},"dynamic_styles_selectors":[{"selector":".ct-header-cart, #woo-cart-panel","url":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/cart-header-element-lazy.min.css?ver=2.1.13"},{"selector":".flexy","url":"https:\/\/uzbox.com\/wp-content\/themes\/blocksy\/static\/bundle\/flexy.min.css?ver=2.1.13"},{"selector":".ct-media-container[data-media-id], .ct-dynamic-media[data-media-id]","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/framework\/premium\/static\/bundle\/video-lazy.min.css?ver=2.1.13"},{"selector":"#account-modal","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/static\/bundle\/header-account-modal-lazy.min.css?ver=2.0.65"},{"selector":".ct-header-account","url":"https:\/\/uzbox.com\/wp-content\/plugins\/blocksy-companion-pro\/static\/bundle\/header-account-dropdown-lazy.min.css?ver=2.0.65"}]}</script> <script data-no-optimize="1">window.lazyLoadOptions=Object.assign({},{threshold:300},window.lazyLoadOptions||{});!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function o(t){return e({},at,t)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,vt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,vt,e)}function i(t){return s(t,null),0}function r(t){return null===c(t)}function u(t){return c(t)===_t}function d(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function f(t,e){et?t.classList.add(e):t.className+=(t.className?" ":"")+e}function _(t,e){et?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function v(t,e){!e||(e=e._observer)&&e.unobserve(t)}function b(t,e){t&&(t.loadingCount+=e)}function p(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function h(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function m(t){return!!t[lt]}function E(t){return t[lt]}function I(t){return delete t[lt]}function y(e,t){var n;m(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[lt]=n)}function L(a,t){var o;m(a)&&(o=E(a),t.forEach(function(t){var e,n;e=a,(t=o[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function k(t,e,n){f(t,e.class_loading),s(t,st),n&&(b(n,1),d(e.callback_loading,t,n))}function A(t,e,n){n&&t.setAttribute(e,n)}function O(t,e){A(t,rt,l(t,e.data_sizes)),A(t,it,l(t,e.data_srcset)),A(t,ot,l(t,e.data_src))}function w(t,e,n){var a=l(t,e.data_bg_multi),o=l(t,e.data_bg_multi_hidpi);(a=nt&&o?o:a)&&(t.style.backgroundImage=a,n=n,f(t=t,(e=e).class_applied),s(t,dt),n&&(e.unobserve_completed&&v(t,e),d(e.callback_applied,t,n)))}function x(t,e){!e||0<e.loadingCount||0<e.toLoadCount||d(t.callback_finish,e)}function M(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function N(t){return!!t.llEvLisnrs}function z(t){if(N(t)){var e,n,a=t.llEvLisnrs;for(e in a){var o=a[e];n=e,o=o,t.removeEventListener(n,o)}delete t.llEvLisnrs}}function C(t,e,n){var a;delete t.llTempImage,b(n,-1),(a=n)&&--a.toLoadCount,_(t,e.class_loading),e.unobserve_completed&&v(t,n)}function R(i,r,c){var l=g(i)||i;N(l)||function(t,e,n){N(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";M(t,a,e),M(t,"error",n)}(l,function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_loaded),s(e,ut),d(n.callback_loaded,e,a),o||x(n,a),z(l)},function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_error),s(e,ft),d(n.callback_error,e,a),o||x(n,a),z(l)})}function T(t,e,n){var a,o,i,r,c;t.llTempImage=document.createElement("IMG"),R(t,e,n),m(c=t)||(c[lt]={backgroundImage:c.style.backgroundImage}),i=n,r=l(a=t,(o=e).data_bg),c=l(a,o.data_bg_hidpi),(r=nt&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),k(a,o,i)),w(t,e,n)}function G(t,e,n){var a;R(t,e,n),a=e,e=n,(t=Et[(n=t).tagName])&&(t(n,a),k(n,a,e))}function D(t,e,n){var a;a=t,(-1<It.indexOf(a.tagName)?G:T)(t,e,n)}function S(t,e,n){var a;t.setAttribute("loading","lazy"),R(t,e,n),a=e,(e=Et[(n=t).tagName])&&e(n,a),s(t,_t)}function V(t){t.removeAttribute(ot),t.removeAttribute(it),t.removeAttribute(rt)}function j(t){h(t,function(t){L(t,mt)}),L(t,mt)}function F(t){var e;(e=yt[t.tagName])?e(t):m(e=t)&&(t=E(e),e.style.backgroundImage=t.backgroundImage)}function P(t,e){var n;F(t),n=e,r(e=t)||u(e)||(_(e,n.class_entered),_(e,n.class_exited),_(e,n.class_applied),_(e,n.class_loading),_(e,n.class_loaded),_(e,n.class_error)),i(t),I(t)}function U(t,e,n,a){var o;n.cancel_on_exit&&(c(t)!==st||"IMG"===t.tagName&&(z(t),h(o=t,function(t){V(t)}),V(o),j(t),_(t,n.class_loading),b(a,-1),i(t),d(n.callback_cancel,t,e,a)))}function $(t,e,n,a){var o,i,r=(i=t,0<=bt.indexOf(c(i)));s(t,"entered"),f(t,n.class_entered),_(t,n.class_exited),o=t,i=a,n.unobserve_entered&&v(o,i),d(n.callback_enter,t,e,a),r||D(t,n,a)}function q(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function H(t,o,i){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?$(t.target,t,o,i):(e=t.target,n=t,a=o,t=i,void(r(e)||(f(e,a.class_exited),U(e,n,a,t),d(a.callback_exit,e,n,t))));var e,n,a})}function B(e,n){var t;tt&&!q(e)&&(n._observer=new IntersectionObserver(function(t){H(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function J(t){return Array.prototype.slice.call(t)}function K(t){return t.container.querySelectorAll(t.elements_selector)}function Q(t){return c(t)===ft}function W(t,e){return e=t||K(e),J(e).filter(r)}function X(e,t){var n;(n=K(e),J(n).filter(Q)).forEach(function(t){_(t,e.class_error),i(t)}),t.update()}function t(t,e){var n,a,t=o(t);this._settings=t,this.loadingCount=0,B(t,this),n=t,a=this,Y&&window.addEventListener("online",function(){X(n,a)}),this.update(e)}var Y="undefined"!=typeof window,Z=Y&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),tt=Y&&"IntersectionObserver"in window,et=Y&&"classList"in document.createElement("p"),nt=Y&&1<window.devicePixelRatio,at={elements_selector:".lazy",container:Z||Y?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",it="srcset",rt="sizes",ct="poster",lt="llOriginalAttrs",st="loading",ut="loaded",dt="applied",ft="error",_t="native",gt="data-",vt="ll-status",bt=[st,ut,dt,ft],pt=[ot],ht=[ot,ct],mt=[ot,it,rt],Et={IMG:function(t,e){h(t,function(t){y(t,mt),O(t,e)}),y(t,mt),O(t,e)},IFRAME:function(t,e){y(t,pt),A(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){y(t,pt),A(t,ot,l(t,e.data_src))}),y(t,ht),A(t,ct,l(t,e.data_poster)),A(t,ot,l(t,e.data_src)),t.load()}},It=["IMG","IFRAME","VIDEO"],yt={IMG:j,IFRAME:function(t){L(t,pt)},VIDEO:function(t){a(t,function(t){L(t,pt)}),L(t,ht),t.load()}},Lt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,o=this._settings,i=W(t,o);{if(p(this,i.length),!Z&&tt)return q(o)?(e=o,n=this,i.forEach(function(t){-1!==Lt.indexOf(t.tagName)&&S(t,e,n)}),void p(n,0)):(t=this._observer,o=i,t.disconnect(),a=t,void o.forEach(function(t){a.observe(t)}));this.loadAll(i)}},destroy:function(){this._observer&&this._observer.disconnect(),K(this._settings).forEach(function(t){I(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;W(t,n).forEach(function(t){v(t,e),D(t,n,e)})},restoreAll:function(){var e=this._settings;K(e).forEach(function(t){P(t,e)})}},t.load=function(t,e){e=o(e);D(t,e)},t.resetStatus=function(t){i(t)},t}),function(t,e){"use strict";function n(){e.body.classList.add("litespeed_lazyloaded")}function a(){console.log("[LiteSpeed] Start Lazy Load"),o=new LazyLoad(Object.assign({},t.lazyLoadOptions||{},{elements_selector:"[data-lazyloaded]",callback_finish:n})),i=function(){o.update()},t.MutationObserver&&new MutationObserver(i).observe(e.documentElement,{childList:!0,subtree:!0,attributes:!0})}var o,i;t.addEventListener?t.addEventListener("load",a,!1):t.attachEvent("onload",a)}(window,document);</script><script data-no-optimize="1">window.litespeed_ui_events=window.litespeed_ui_events||["mouseover","click","keydown","wheel","touchmove","touchstart"];var urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_force(){console.log("[LiteSpeed] Start Load JS Delayed"),litespeed_ui_events.forEach(e=>{window.removeEventListener(e,litespeed_load_delayed_js_force,{passive:!0})}),document.querySelectorAll("iframe[data-litespeed-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-litespeed-src"))}),"loading"==document.readyState?window.addEventListener("DOMContentLoaded",litespeed_load_delayed_js):litespeed_load_delayed_js()}litespeed_ui_events.forEach(e=>{window.addEventListener(e,litespeed_load_delayed_js_force,{passive:!0})});async function litespeed_load_delayed_js(){let t=[];for(var d in document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e=>{t.push(e)}),t)await new Promise(e=>litespeed_load_one(t[d],e));document.dispatchEvent(new Event("DOMContentLiteSpeedLoaded")),window.dispatchEvent(new Event("DOMContentLiteSpeedLoaded"))}function litespeed_load_one(t,e){console.log("[LiteSpeed] Load ",t);var d=document.createElement("script");d.addEventListener("load",e),d.addEventListener("error",e),t.getAttributeNames().forEach(e=>{"type"!=e&&d.setAttribute("data-src"==e?"src":e,t.getAttribute(e))});let a=!(d.type="text/javascript");!d.src&&t.textContent&&(d.src=litespeed_inline2src(t.textContent),a=!0),t.after(d),t.remove(),a&&e()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}</script><script data-no-optimize="1">var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"");litespeed_vary||fetch("/wp-content/plugins/litespeed-cache/guest.vary.php",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&(sessionStorage.setItem("litespeed_docref",document.referrer),window.location.reload(!0))});</script><script data-optimized="1" type="litespeed/javascript" data-src="https://uzbox.com/wp-content/litespeed/js/a6937f3fd952490b4d2515dc00d1c8c3.js?ver=b65fb"></script></body></html> <!-- Page optimized by LiteSpeed Cache @2025-09-26 01:39:13 --> <!-- Page cached by LiteSpeed Cache 7.5.0.1 on 2025-09-26 01:39:11 --> <!-- Guest Mode --> <!-- QUIC.cloud UCSS in queue -->