ytdl-org / youtube-dl

Command-line program to download videos from YouTube.com and other video sites
http://ytdl-org.github.io/youtube-dl/
The Unlicense
132.34k stars 10.03k forks source link

[CDA.PL] Broken site support #30873

Open gucio321 opened 2 years ago

gucio321 commented 2 years ago

Checklist

Verbose log

log ``` [debug] System config: ['--prefer-free-formats'] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v', 'https://www.cda.pl/video/391634853'] [debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8 [debug] youtube-dl version 2021.12.17 [debug] Python version 3.10.4 (CPython) - Linux-5.16.20-200.fc35.x86_64-x86_64-with-glibc2.34 [debug] exe versions: ffmpeg 4.4.1, ffprobe 4.4.1 [debug] Proxy map: {} [CDA] 391634853: Downloading webpage [debug] Default format spec: bestvideo+bestaudio/best [debug] Invoking downloader on 'https://.mp4' Traceback (most recent call last): File "/usr/lib64/python3.10/encodings/idna.py", line 165, in encode raise UnicodeError("label empty or too long") UnicodeError: label empty or too long The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/bin/youtube-dl", line 33, in sys.exit(load_entry_point('youtube-dl==2021.12.17', 'console_scripts', 'youtube-dl')()) File "/usr/lib/python3.10/site-packages/youtube_dl/__init__.py", line 474, in main _real_main(argv) File "/usr/lib/python3.10/site-packages/youtube_dl/__init__.py", line 464, in _real_main retcode = ydl.download(all_urls) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 2067, in download res = self.extract_info( File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 807, in extract_info return self.__extract_info(url, ie, download, extra_info, process) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 814, in wrapper return func(self, *args, **kwargs) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 846, in __extract_info return self.process_ie_result(ie_result, download, extra_info) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 880, in process_ie_result return self.process_video_result(ie_result, download=download) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 1691, in process_video_result self.process_info(new_info) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 1975, in process_info success = dl(filename, info_dict) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 1914, in dl return fd.download(name, info) File "/usr/lib/python3.10/site-packages/youtube_dl/downloader/common.py", line 366, in download return self.real_download(filename, info_dict) File "/usr/lib/python3.10/site-packages/youtube_dl/downloader/http.py", line 351, in real_download establish_connection() File "/usr/lib/python3.10/site-packages/youtube_dl/downloader/http.py", line 110, in establish_connection ctx.data = self.ydl.urlopen(request) File "/usr/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 2287, in urlopen return self._opener.open(req, timeout=self._socket_timeout) File "/usr/lib64/python3.10/urllib/request.py", line 516, in open req = meth(req) File "/usr/lib/python3.10/site-packages/youtube_dl/utils.py", line 2599, in http_request url_escaped = escape_url(url) File "/usr/lib/python3.10/site-packages/youtube_dl/utils.py", line 3921, in escape_url netloc=url_parsed.netloc.encode('idna').decode('ascii'), UnicodeError: encoding with 'idna' codec failed (UnicodeError: label empty or too long) ```

Description

ytdl with CDA url crashes because of "encoding error"... I don't know anything else :D

dirkf commented 2 years ago

The error message is quite correct because when Invoking downloader on 'https://.mp4', the string between / and . is empty. Obviously that's not a valid download link.

The reason is that the file member of the video object in the JSON data is empty:

  'video': {
    'id': '391634853',
    'file': '',
    'file_cast': '',
    'cast_available': true,
    'manifest': 'https://vrbx507.cda.pl/3916348/3916348.mpd/stereo',
    'manifest_cast': 'https://vrbx507.cda.pl/3916348/3916348.mpd',
    'manifest_drm_proxy': 'https://lic.drmtoday.com/license-proxy-widevine/cenc/?specConform=true',
    'manifest_drm_header': 'eyJ1c2VySWQiOiJhbm9uaW0iLCJzZXNzaW9uSWQiOiJhUzV5aHNBb2ZLWXhjNzZWWXhDWVY2UFdRaTkiLCJtZXJjaGFudCI6ImNkYSJ9',
    'manifest_drm_pr_proxy': 'https://lic.drmtoday.com/license-proxy-headerauth/drmtoday/RightsManager.asmx',
    'manifest_drm_pr_header': 'eyJ1c2VySWQiOiJhbm9uaW0iLCJzZXNzaW9uSWQiOiJhUzV5aHNBb2ZLWXhjNzZWWXhDWVY2UFdRaTkiLCJtZXJjaGFudCI6ImNkYSJ9',
    'manifest_apple': 'https://vrbx507.cda.pl/3916348/3916348.m3u8',
    'manifest_drm_apple_certificate': 'https://lic.drmtoday.com/license-server-fairplay/cert/cda',
    'manifest_drm_apple_license': 'https://lic.drmtoday.com/license-server-fairplay/',
...

And in the manifests:

...
  <Period id="0">
    <AdaptationSet id="0" contentType="video" maxWidth="1920" maxHeight="1080" frameRate="12800/512" subsegmentAlignment="true" par="16:9">
      <ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="63363432-3534-6364-6237-656465336530"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95">
        <cenc:pssh>AAACJnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAgYGAgAAAQABAPwBPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBNAGoAUQAyAFkAegBRADEAWgBHAE4AaQBOADIAVgBrAFoAVABOAGwATQBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AHAAMQA0AGMAZABWAFcAMgBqADYAYwA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cenc:pssh>
      </ContentProtection>
...

So unfortunately you'll have to obtain a playable Arabela S01E02 in some other way.

gucio321 commented 2 years ago

okey, it makes sense, so I'm changing the ititle to "broken site support"

gucio321 commented 2 years ago

hmm, that's interessting, like I've noticed some time ago (when I had problemms with using ytdl with cda.pl) cda provides 2 types of videos (URLs)

dirkf commented 2 years ago

If the site doesn't offer a version of the content that you can play in your browser with EME disabled (or not implemented), yt-dl can't fetch it.

Broadcasters that use DRM implement it in different ways. Some apply it universally, some sporadically, some depending on the demand of the content originator.

Unless you can demonstrate that the show is playable as above, all we can do with yt-dl is change the extractor to report a DRM error. In https://github.com/yt-dlp/yt-dlp, the extractor could be made to understand --allow-unplayable-formats so as to allow you to fill your disk with apparently pseudo-random large files.

gucio321 commented 2 years ago

okey, I understand, thank you. Should I keep this issue open?

dirkf commented 2 years ago

It'll remind me to fix the error-checking eventually.

gucio321 commented 2 years ago

How to get decryption key???