Repository: yt-dlp/yt-dlp

Issue:
[Facebook] MPD playlist URL not provided in results
### 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 reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I'm running yt-dlp version **2023.07.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [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)
- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

_No response_

### Provide a description that is worded well enough to be understood

When extracting informations for Facebook video using yt-dlp, previously there was provided manifest URL, which allowed to follow up and parse it manually (especially useful for live streams). No such information is now available. Only preprocessed informations and segments at given moment.

### Provide verbose output that clearly demonstrates the problem

- [X] 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
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
yt-dlp git:(cc0619f62) ✗ python test.py
[facebook] Extracting URL: https://www.facebook.com/indiatodaygaming/videos/590923969905661
[facebook] 590923969905661: Downloading webpage

### pretty print of
### YoutubeDL().extract_info("https://www.facebook.com/indiatodaygaming/videos/590923969905661", download=False)["formats"]

[{'abr': 139.0,
  'acodec': 'mp4a.40.2',
  'aspect_ratio': None,
  'asr': 48000,
  'audio_ext': 'm4a',
  'container': 'm4a_dash',
  'dynamic_range': None,
  'ext': 'm4a',
  'filesize': None,
  'filesize_approx': 768614400,
  'format': 'dash-lp-md-a - audio only (DASH audio)',
  'format_id': 'dash-lp-md-a',
  'format_note': 'DASH audio',
  'fps': None,
  'fragment_base_url': 'https://video-waw1-1.xx.fbcdn.net/hvideo-cln-odn/_nc_cat-1/_nc_sr_t-4/v/rASfrF_CfDiVzT60Zw1552lPLM2Q49KNJZa3WAv4thvD27Q/_nc_ohc-ZGZhmumFkgMAX-FnSdx/live-dash/dash-abr-ibr-audio/',
  'fragments': [{'path': '../dash-lp-md-a/733356425468274_0-init.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24618247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24620247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24622247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24624247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24626247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24628247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24630247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24632247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24634247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-md-a/733356425468274_0-24636247.m4a?ms=m_CL&ccb=2-4&sc_t=1'}],
  'height': None,
  'http_headers': {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                   'Accept-Language': 'en-us,en;q=0.5',
                   'Sec-Fetch-Mode': 'navigate',
                   'User-Agent': 'facebookexternalhit/1.1'},
  'language': None,
  'manifest_stream_number': 6,
  'manifest_url': None,
  'protocol': 'http_dash_segments',
  'resolution': 'audio only',
  'tbr': 139.0,
  'url': 'https://video-waw1-1.xx.fbcdn.net/hvideo-cln-odn/_nc_cat-1/_nc_sr_t-4/v/rASfrF_CfDiVzT60Zw1552lPLM2Q49KNJZa3WAv4thvD27Q/_nc_ohc-ZGZhmumFkgMAX-FnSdx/live-dash/dash-abr-ibr-audio/',
  'vbr': 0,
  'vcodec': 'none',
  'video_ext': 'none',
  'width': None},
 {'abr': 171.001,
  'acodec': 'mp4a.40.2',
  'aspect_ratio': None,
  'asr': 48000,
  'audio_ext': 'm4a',
  'container': 'm4a_dash',
  'dynamic_range': None,
  'ext': 'm4a',
  'filesize': None,
  'filesize_approx': 945567129,
  'format': 'dash-lp-qd-a - audio only (DASH audio)',
  'format_id': 'dash-lp-qd-a',
  'format_note': 'DASH audio',
  'fps': None,
  'fragment_base_url': 'https://video-waw1-1.xx.fbcdn.net/hvideo-cln-odn/_nc_cat-1/_nc_sr_t-4/v/rASfrF_CfDiVzT60Zw1552lPLM2Q49KNJZa3WAv4thvD27Q/_nc_ohc-ZGZhmumFkgMAX-FnSdx/live-dash/dash-abr-ibr-audio/',
  'fragments': [{'path': '../dash-lp-qd-a/733356425468274_0-init.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24618247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24620247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24622247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24624247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24626247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24628247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24630247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24632247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24634247.m4a?ms=m_CL&ccb=2-4&sc_t=1'},
                {'duration': 2.0,
                 'path': '../dash-lp-qd-a/733356425468274_0-24636247.m4a?ms=m_CL&ccb=2-4&sc_t=1'}],
  'height': None,
  'http_headers': {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                   'Accept-Language': 'en-us,en;q=0.5',
                   'Sec-Fetch-Mode': 'navigate',
                   'User-Agent': 'facebookexternalhit/1.1'},
  'language': None,
  'manifest_stream_number': 7,
  'manifest_url': None,
  'protocol': 'http_dash_segments',
  'resolution': 'audio only',
  'tbr': 171.001,
  'url': 'https://video-waw1-1.xx.fbcdn.net/hvideo-cln-odn/_nc_cat-1/_nc_sr_t-4/v/rASfrF_CfDiVzT60Zw1552lPLM2Q49KNJZa3WAv4thvD27Q/_nc_ohc-ZGZhmumFkgMAX-FnSdx/live-dash/dash-abr-ibr-audio/',
  'vbr': 0,
  'vcodec': 'none',
  'video_ext': 'none',
  'width': None},
  ...
```



Discussion:

Resolving patch:
diff --git a/yt_dlp/extractor/facebook.py b/yt_dlp/extractor/facebook.py
--- a/yt_dlp/extractor/facebook.py
+++ b/yt_dlp/extractor/facebook.py
@@ -481,7 +481,8 @@ def extract_dash_manifest(video, formats):
             dash_manifest = video.get('dash_manifest')
             if dash_manifest:
                 formats.extend(self._parse_mpd_formats(
-                    compat_etree_fromstring(urllib.parse.unquote_plus(dash_manifest))))
+                    compat_etree_fromstring(urllib.parse.unquote_plus(dash_manifest)),
+                    mpd_url=video.get('dash_manifest_url')))
 
         def process_formats(info):
             # Downloads with browser's User-Agent are rate limited. Working around


Test patch: