Repository: yt-dlp
Issue: Add support for DASH role scheme (5.8.5.5)
Labels: enhancement,triage,core:extractor

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm requesting a feature unrelated to a specific site
- [X] I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
- [X] I've verified that I'm running yt-dlp version **2023.09.24** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)

### Provide a description that is worded well enough to be understood

The `Role` node is used to identify the role of the adaption set. Adding support for this node will allow adaption sets to be downloaded based on their role value e.g. `main, description, subtitle`.

The value of the role node can then be used in the format selection.

# 5.8.5.5 DASH role scheme
## Table 29
| Role@value | Description |
| --- | --- |
| caption | Captions (see NOTE 3 below). |
| subtitle | Subtitles (see NOTE 3 below). |
| Main | Main media component(s) which is/are intended for presentation if no other information is provided. |
| alternate | Media content component(s) that is/are an alternative to (a) main media content component(s) of the same media component type (see NOTE 2 below). |
| supplementary | Media content component that is supplementary to a media content component of a different media component type (see NOTE 1 below). |
| commentary | Experience that contains a commentary (e.g. director's commentary) (typically audio) |
| dub | Experience that contains an element that is presented in a different language from the original (e.g. dubbed audio, translated captions). |
| description | Textual or audio media component containing a textual description (intended for audio synthesis) or an audio description describing a visual component. |
| sign | Visual media component representing a sign-language interpretation of an audio component. |
| metadata | Media component containing information intended to be processed by application specific elements. |
| enhanced-audiointelligibility | Experience containing an element for improved intelligibility of the dialogue. |
| emergency | Experience that provides information, about a current emergency, that is intended to enable the protection of life, health, safety, and property, and may also include critical details regarding the emergency and how to respond to the emergency. |

```
NOTE 1   A normal audio/video program labels both the primary audio and video as "main". However, when the two media
component types are not equally important, for example (a) video providing a pleasant visual experience to accompany a
music track that is the primary content or (b) ambient audio accompanying a video showing a live scene such as a sports
event, that is the primary content, the accompanying media can be assigned a "supplementary" role.

NOTE 2   Alternate media content components are expected to carry other descriptors to indicate in what way it differs
from the main media content components (e.g. a Viewpoint descriptor or a Role descriptor), especially when multiple
alternate media content components including multiple supplementary media content components are available.

NOTE 3   Open ("burned in") captions or subtitles would be marked as media type component "video" only, but having a
descriptor saying “caption” or “subtitle”.

NOTE 4   Role descriptors with values such as "subtitle", "caption", "description", "sign" or "metadata" may be used to enable
assignment of a "kind" value in HTML 5 applications for tracks exposed from a DASH MPD.
```

# Example Manifest
```
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" type="static" minBufferTime="PT30S" profiles="urn:mpeg:dash:profile:isoff-main:2011" mediaPresentationDuration="PT43M54.090S">
  <Period start="PT0S" duration="PT43M54.090S" id="1">
    <AdaptationSet mimeType="video/mp4" frameRate="25/1" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="false" id="1" group="2">
      <Representation id="1" width="1920" height="1080" bandwidth="6000000" codecs="avc1.4d4028">
        <BaseURL>MPEGDASH_6000_v.mp4</BaseURL>
        <SegmentBase indexRange="1490-17345">
          <Initialization range="0-1489"/>
        </SegmentBase>
      </Representation>
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" lang="en" segmentAlignment="0" id="2" group="1">
      <Label>English</Label>
      <Representation id="10" bandwidth="96000" audioSamplingRate="48000" codecs="mp4a.40.2">
        <BaseURL>MPEGDASH_96_a.mp4</BaseURL>
        <SegmentBase indexRange="1410-17265">
          <Initialization range="0-1409"/>
        </SegmentBase>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" lang="en" segmentAlignment="0" id="3" group="1">
      <Label>English (Audio Description)</Label>
      <Accessibility schemeIdUri="urn:tva:metadata:cs:AudioPurposeCS:2007" value="1"/>
      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="description"/>
      <Representation id="12" bandwidth="96000" audioSamplingRate="48000" codecs="mp4a.40.2">
        <BaseURL>MPEGDASH_96_a.mp4</BaseURL>
        <SegmentBase indexRange="1410-17265">
          <Initialization range="0-1409"/>
        </SegmentBase>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <AdaptationSet mimeType="text/vtt" lang="en" id="4" group="4">
      <Role schemeIdUri="urn:mpeg:dash:role" value="subtitle"/>
      <Label>English</Label>
      <Representation id="14" bandwidth="256">
        <BaseURL>subtitles.mpd</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>
````

### Provide verbose output that clearly demonstrates the problem

- [ ] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [ ] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

_No response_