-
Notifications
You must be signed in to change notification settings - Fork 522
hls
Warning
GPAC's wiki has moved to wiki.gpac.io.
This github wiki will no longer be updated.
You can contribute to GPAC's documentation here.
GPAC can be used to generate HLS rather than MPEG-DASH manifest formats, and can also be used to generate the two manifests in one pass. The guidelines on segmentation are the same as with general dashing, please refer to the rest of the wiki for more info on this. HLS generation is supported by both MP4Box and gpac.
Generating an HLS with one file per media segment is equivalent to dashing under the live profile.
MP4Box -dash 1000 -profile live -out res/live.m3u8 source1 source2
gpac -i source1 -i source2 -o res/live.m3u8:profile=live
This will by default generate ISOBMFF / fmp4 files. To generate MPEG-2 TS files, use:
gpac -i source1 -i source2 -o res/live.m3u8:profile=live:muxtype=ts
Note that gpac will by default generate non-multiplexed outputs. To generate a multiplexed file, you need to flag inputs as belonging to the same quality , or Representation
in DASH terminology:
gpac -i video:#Representation=main -i audio:#Representation=main -o res/live.m3u8:profile=live:muxtype=ts
Generating an HLS with one file per quality is equivalent to dashing under the onDemand profile.
gpac -i source1 -i source2 -o res/live.m3u8:profile=onDemand
The child playlist names are by default the manifest (master playlist) radical suffixed with _1
, _2
...
This can be changed by using the PID property HLSPL
:
gpac -i source1:#HLSPL=video.m3u8 -i source2:#HLSPL=audio.m3u8 -o res/live.m3u8
This will generate live.m3u8
, video.m3u8
and audio.m3u8
When several renditions are possible for a set of inputs, the default behavior is as follows:
- if video is present, it is used as the main content
- otherwise, audio is used as the main content
The main content is repeated for each combination with other content. For example with 1 video and 3 audios, you will have:
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42C01F,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE="25",AUDIO="audio1"
video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42C01F,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE="25",AUDIO="audio2"
video.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio1",NAME="1",LANGUAGE="fra",AUTOSELECT=YES,URI="audio_1.m3u8",CHANNELS="1"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio2",NAME="2",LANGUAGE="eng",AUTOSELECT=YES,URI="audio_2.m3u8",CHANNELS="1"
This behavior can be changed by specifying a group for input streams using the PID property HLSGroup
:
gpac -i source1 -i audio1:#HLSGroup=MyAudio -i audio2:#HLSGroup=MyAudio -o res/live.m3u8
This will result in:
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42C01F,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE="25",AUDIO="MyAudio"
video.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="MyAudio",NAME="1",LANGUAGE="fra",AUTOSELECT=YES,URI="audio_1.m3u8",CHANNELS="1"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="MyAudio",NAME="2",LANGUAGE="eng",AUTOSELECT=YES,URI="audio_2.m3u8",CHANNELS="1"
Warning
GPAC will not check if streams within a group have the same codec properties, you must only put in the same group streams with the same coding configurations, i.e. streams for which the CODECS
parameter is the same.
The component names are the DASH representation ID. By default this is an integer value, but it can be set to whatever suits you:
gpac -i source1 -i audio1:#HLSGroup=MyAudio:#Representation=Soustitres -i audio2:#HLSGroup=MyAudio:#Representation=Subtitles -o res/live.m3u8
This will result in:
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42C01F,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE="25",AUDIO="MyAudio"
video.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="MyAudio",NAME="Soustitres",LANGUAGE="fra",AUTOSELECT=YES,URI="audio_1.m3u8",CHANNELS="1"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="MyAudio",NAME="Subtitles",LANGUAGE="eng",AUTOSELECT=YES,URI="audio_2.m3u8",CHANNELS="1"
GPAC can generate a manifest for both HLS and DASH by using the dual option.
gpac -i source1 -i source2 -o res/live.mpd:dual:profile=live
This will generate live.mpd
and live.m3u8
together with one file per segment produced.
gpac -i source1 -i source2 -o res/live.m3u8:dual:profile=onDemand
This will generate live.m3u8
and live.mpd
together with a single file per quality. Since the DASH profile is onDemand, the ISOBMFF file of each quality will also contain a segment index (not used in HLS).
DASH
Introduction
MPEG-DASH basics
DASH and HLS Transcoding
HLS Generation
CMAF Generation
DASH Low Latency
HLS Low Latency
DASH 360 Tiling
HEVC Tile Adaptation Guide
DASH SRD and HEVC tiling
360 Video tiled streaming
HEVC Tile Multi-Resolution Adaptation Guide
Old entries
Key-frame alignment
Fragmentation
Fragmented MP4 in HLS
MP4Box DASH options