[FFmpeg-trac] #11560(avformat:new): HLS audio streams do not use var_stream_map name in master playlist

FFmpeg trac at avcodec.org
Mon Apr 28 22:00:19 EEST 2025


#11560: HLS audio streams do not use var_stream_map name in master playlist
-------------------------------------+-------------------------------------
             Reporter:  Christian    |                    Owner:  (none)
  Koop                               |
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:  avformat
              Version:  7.1          |               Resolution:
             Keywords:  HLS          |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by Christian Koop:

Old description:

> **Summary of the bug:**
> Setting `name` in `-var_stream_map` for audio streams, allows overriding
> `%v` in all the related paths.
> HLS also writes a name for audio streams into the master playlist,
> but it does not use that name. Instead it will continue to use the 'old'
> auto-generated name (e.g. `audio_1`).
>

> **How to reproduce:**
> {{{
> ffmpeg -f lavfi \
>        -i testsrc=duration=10:size=1280x720:rate=30 \
>        -f lavfi \
>        -i sine=frequency=1000:duration=10:sample_rate=44100 \
>        -c:v libx264 \
>        -c:a aac \
>        -shortest \
>        -f hls \
>        -hls_time 2 \
>        -master_pl_name master.m3u8 \
>        -hls_segment_filename stream_%v/chunk_%d.ts \
>        -hls_list_size 0 \
>        -var_stream_map 'v:0,agroup:audio,name:custom_video_name
> a:0,agroup:audio,name:custom_audio_name,language:und,default:yes' \
>        stream_%v/manifest.m3u8
> }}}
>
> Please, pay attention to the created `stream_custom_audio_name/`
> directory and the contents of the `master.m3u8` file.
> It will contain the audio stream with the auto-generated name.
> {{{
> #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="audio_1" [...]
> }}}
>
> **Why is this an issue?**
> This name can be used by video players to signal to the user what kind of
> audio track this is.
> There may be multiple ones for a given language (e.g. English and
> Commentary (in English)), so only using the language to generate a name
> instead is not always an option.
>
> I do not know of any other option that I could supply to ffmpeg, to add
> additional metadata to the streams that I could parse for the video
> player.
> Right now, I have to supply a mapping next to the master playlist and use
> it for the UI.
>
> **What did I already find?**
> * Looks like the `name` parameter was added in
> https://github.com/FFmpeg/FFmpeg/commit/86f04b918c0d00a286180906279b7ed0f1cd0bed
>   * It only touches `%v` but I think this is unexpected behavior and
> there should be some way to influence the stream's name
> * The audio stream line for the master playlist seems to written in
> `libavformat/hlsplaylist.c#L48`
>   *
> https://github.com/FFmpeg/FFmpeg/blob/d11d4277f9339b4c31a4619af8f273a5910840e8/libavformat/hlsplaylist.c#L48

New description:

 **Summary of the bug:**
 Setting `name` in `-var_stream_map` for audio streams, allows overriding
 `%v` in all the related paths.
 HLS also writes a name for audio streams into the master playlist,
 but it does not use that name. Instead it will continue to use the 'old'
 auto-generated name (e.g. `audio_1`).


 **How to reproduce:**
 {{{
 ffmpeg -f lavfi \
        -i testsrc=duration=10:size=1280x720:rate=30 \
        -f lavfi \
        -i sine=frequency=1000:duration=10:sample_rate=44100 \
        -c:v libx264 \
        -c:a aac \
        -shortest \
        -f hls \
        -hls_time 2 \
        -master_pl_name master.m3u8 \
        -hls_segment_filename stream_%v/chunk_%d.ts \
        -hls_list_size 0 \
        -var_stream_map 'v:0,agroup:audio,name:custom_video_name
 a:0,agroup:audio,name:custom_audio_name,language:und,default:yes' \
        stream_%v/manifest.m3u8
 }}}

 Please, pay attention to the created `stream_custom_audio_name/` directory
 and the contents of the `master.m3u8` file.
 It will contain the audio stream with the auto-generated name.
 {{{
 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="audio_1" [...]
 }}}

 **Why is this an issue?**
 This name can be used by video players to signal to the user what kind of
 audio track this is.
 There may be multiple ones for a given language (e.g. English and
 Commentary (in English)), so only using the language to generate a name
 instead is not always an option.

 I do not know of any other option that I could supply to ffmpeg, to add
 additional metadata to the streams that I could parse for the video
 player.
 Right now, I have to supply a mapping next to the master playlist and use
 it for the UI.

 **What did I already find?**
 * Looks like the `name` parameter was added in
 https://github.com/FFmpeg/FFmpeg/commit/86f04b918c0d00a286180906279b7ed0f1cd0bed
   * It only touches `%v` but I think this is unexpected behavior and there
 should be some way to influence the stream's name
 * The audio stream line for the master playlist seems to written in
 `libavformat/hlsplaylist.c#L48`
   *
 https://github.com/FFmpeg/FFmpeg/blob/d11d4277f9339b4c31a4619af8f273a5910840e8/libavformat/hlsplaylist.c#L48
 * Subtitle streams have the parameter `sname` that is used in the master
 playlist
   * I am not sure, but maybe a new `aname` might make sense? So you can
 have `%v` be a unique value but the 'display name' of the stream be
 something else?

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/11560#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list