diff options
| -rw-r--r-- | test/test_InfoExtractor.py | 131 | ||||
| -rw-r--r-- | test/testdata/mpd/subtitles.mpd | 351 | 
2 files changed, 477 insertions, 5 deletions
| diff --git a/test/test_InfoExtractor.py b/test/test_InfoExtractor.py index b4984b5ed..5fbea0473 100644 --- a/test/test_InfoExtractor.py +++ b/test/test_InfoExtractor.py @@ -949,7 +949,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/                      'tbr': 5997.485,                      'width': 1920,                      'height': 1080, -                }] +                }], +                {},              ), (                  # https://github.com/ytdl-org/youtube-dl/pull/14844                  'urls_only', @@ -1032,7 +1033,8 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/                      'tbr': 4400,                      'width': 1920,                      'height': 1080, -                }] +                }], +                {},              ), (                  # https://github.com/ytdl-org/youtube-dl/issues/20346                  # Media considered unfragmented even though it contains @@ -1078,18 +1080,137 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/                      'width': 360,                      'height': 360,                      'fps': 30, -                }] +                }], +                {}, +            ), ( +                'subtitles', +                'https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd', +                'https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/', +                [{ +                    "format_id": "audio=128001", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "m4a", +                    "tbr": 128.001, +                    "asr": 48000, +                    "format_note": "DASH audio", +                    "container": "m4a_dash", +                    "vcodec": "none", +                    "acodec": "mp4a.40.2", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "audio_ext": "m4a", +                    "video_ext": "none", +                    "abr": 128.001, +                }, { +                    "format_id": "video=100000", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "mp4", +                    "width": 336, +                    "height": 144, +                    "tbr": 100, +                    "format_note": "DASH video", +                    "container": "mp4_dash", +                    "vcodec": "avc1.4D401F", +                    "acodec": "none", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "video_ext": "mp4", +                    "audio_ext": "none", +                    "vbr": 100, +                }, { +                    "format_id": "video=326000", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "mp4", +                    "width": 562, +                    "height": 240, +                    "tbr": 326, +                    "format_note": "DASH video", +                    "container": "mp4_dash", +                    "vcodec": "avc1.4D401F", +                    "acodec": "none", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "video_ext": "mp4", +                    "audio_ext": "none", +                    "vbr": 326, +                }, { +                    "format_id": "video=698000", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "mp4", +                    "width": 844, +                    "height": 360, +                    "tbr": 698, +                    "format_note": "DASH video", +                    "container": "mp4_dash", +                    "vcodec": "avc1.4D401F", +                    "acodec": "none", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "video_ext": "mp4", +                    "audio_ext": "none", +                    "vbr": 698, +                }, { +                    "format_id": "video=1493000", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "mp4", +                    "width": 1126, +                    "height": 480, +                    "tbr": 1493, +                    "format_note": "DASH video", +                    "container": "mp4_dash", +                    "vcodec": "avc1.4D401F", +                    "acodec": "none", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "video_ext": "mp4", +                    "audio_ext": "none", +                    "vbr": 1493, +                }, { +                    "format_id": "video=4482000", +                    "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "ext": "mp4", +                    "width": 1688, +                    "height": 720, +                    "tbr": 4482, +                    "format_note": "DASH video", +                    "container": "mp4_dash", +                    "vcodec": "avc1.4D401F", +                    "acodec": "none", +                    "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                    "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                    "protocol": "http_dash_segments", +                    "video_ext": "mp4", +                    "audio_ext": "none", +                    "vbr": 4482, +                }], +                { +                    "en": [ +                        { +                            "ext": "mp4", +                            "manifest_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                            "url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/manifest.mpd", +                            "fragment_base_url": "https://sdn-global-streaming-cache-3qsdn.akamaized.net/stream/3144/files/17/07/672975/3144-kZT4LWMQw6Rh7Kpd.ism/dash/", +                            "protocol": "http_dash_segments", +                        } +                    ] +                },              )          ] -        for mpd_file, mpd_url, mpd_base_url, expected_formats in _TEST_CASES: +        for mpd_file, mpd_url, mpd_base_url, expected_formats, expected_subtitles in _TEST_CASES:              with io.open('./test/testdata/mpd/%s.mpd' % mpd_file,                           mode='r', encoding='utf-8') as f: -                formats = self.ie._parse_mpd_formats( +                formats, subtitles = self.ie._parse_mpd_formats_and_subtitles(                      compat_etree_fromstring(f.read().encode('utf-8')),                      mpd_base_url=mpd_base_url, mpd_url=mpd_url)                  self.ie._sort_formats(formats)                  expect_value(self, formats, expected_formats, None) +                expect_value(self, subtitles, expected_subtitles, None)      def test_parse_f4m_formats(self):          _TEST_CASES = [ diff --git a/test/testdata/mpd/subtitles.mpd b/test/testdata/mpd/subtitles.mpd new file mode 100644 index 000000000..6f948adba --- /dev/null +++ b/test/testdata/mpd/subtitles.mpd @@ -0,0 +1,351 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Created with Unified Streaming Platform (version=1.10.18-20255) --> +<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" +  mediaPresentationDuration="PT14M48S" +  maxSegmentDuration="PT1M" +  minBufferTime="PT10S" +  profiles="urn:mpeg:dash:profile:isoff-live:2011"> +  <Period +    id="1" +    duration="PT14M48S"> +    <BaseURL>dash/</BaseURL> +    <AdaptationSet +      id="1" +      group="1" +      contentType="audio" +      segmentAlignment="true" +      audioSamplingRate="48000" +      mimeType="audio/mp4" +      codecs="mp4a.40.2" +      startWithSAP="1"> +      <AudioChannelConfiguration +        schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" +        value="2" /> +      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" /> +      <SegmentTemplate +        timescale="48000" +        initialization="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$.dash" +        media="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$-$Time$.dash"> +        <SegmentTimeline> +          <S t="0" d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="96256" r="2" /> +          <S d="95232" /> +          <S d="3584" /> +        </SegmentTimeline> +      </SegmentTemplate> +      <Representation +        id="audio=128001" +        bandwidth="128001"> +      </Representation> +    </AdaptationSet> +    <AdaptationSet +      id="2" +      group="3" +      contentType="text" +      lang="en" +      mimeType="application/mp4" +      codecs="stpp" +      startWithSAP="1"> +      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle" /> +      <SegmentTemplate +        timescale="1000" +        initialization="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$.dash" +        media="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$-$Time$.dash"> +        <SegmentTimeline> +          <S t="0" d="60000" r="9" /> +          <S d="24000" /> +        </SegmentTimeline> +      </SegmentTemplate> +      <Representation +        id="textstream_eng=1000" +        bandwidth="1000"> +      </Representation> +    </AdaptationSet> +    <AdaptationSet +      id="3" +      group="2" +      contentType="video" +      par="960:409" +      minBandwidth="100000" +      maxBandwidth="4482000" +      maxWidth="1689" +      maxHeight="720" +      segmentAlignment="true" +      mimeType="video/mp4" +      codecs="avc1.4D401F" +      startWithSAP="1"> +      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" /> +      <SegmentTemplate +        timescale="12288" +        initialization="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$.dash" +        media="3144-kZT4LWMQw6Rh7Kpd-$RepresentationID$-$Time$.dash"> +        <SegmentTimeline> +          <S t="0" d="24576" r="443" /> +        </SegmentTimeline> +      </SegmentTemplate> +      <Representation +        id="video=100000" +        bandwidth="100000" +        width="336" +        height="144" +        sar="2880:2863" +        scanType="progressive"> +      </Representation> +      <Representation +        id="video=326000" +        bandwidth="326000" +        width="562" +        height="240" +        sar="115200:114929" +        scanType="progressive"> +      </Representation> +      <Representation +        id="video=698000" +        bandwidth="698000" +        width="844" +        height="360" +        sar="86400:86299" +        scanType="progressive"> +      </Representation> +      <Representation +        id="video=1493000" +        bandwidth="1493000" +        width="1126" +        height="480" +        sar="230400:230267" +        scanType="progressive"> +      </Representation> +      <Representation +        id="video=4482000" +        bandwidth="4482000" +        width="1688" +        height="720" +        sar="86400:86299" +        scanType="progressive"> +      </Representation> +    </AdaptationSet> +  </Period> +</MPD> | 
