VideoHelp Forum



Support our site by donate $5 directly to us Thanks!!!

Try StreamFab Downloader and download streaming video from Netflix, Amazon!



+ Reply to Thread
Results 1 to 3 of 3
  1. Hi everyone, I get the next error with yt-dlp

    HTML Code:
    λ yt-dlp.exe https://iframe.mediadelivery.net/7f712870-a29e-4af5-91c9-1aae7afed352/playlist.drm?contextId=93b58b49-d999-4914-8b92-da2924880f6f"&"secret=162ad9b3-4dc4-407c-8c31-f0e95ba7f6ec
    [generic] Extracting URL: https://iframe.mediadelivery.net/7f712870-a29e-4af5-91c9-1aae7afed352/playlist.drm?contextId=93b5...7c-8c31-f0e95ba7f6ec
    [generic] playlist: Downloading webpage
    ERROR: [generic] Unable to download webpage: HTTP Error 401: Unauthorized (caused by <HTTPError 401: Unauthorized>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
    I was trying with yt-dlp and other programs like hlsdl and streamlink, but I couldn't download the following link:

    referer link: https://iframe.mediadelivery.net/embed/76921/7f712870-a29e-4af5-91c9-1aae7afed352
    key link: https://iframe.mediadelivery.net/7f712870-a29e-4af5-91c9-1aae7afed352/playlist.drm?con...1-f0e95ba7f6ec

    From what I have seen, the video can only be played if the iframe is on the following website: https://luxxilunar.com/

    So anyone who wants to give me a hand can try accessing that site and adding the following iframe:
    HTML Code:
    <iframe src="https://iframe.mediadelivery.net/embed/76921/7f712870-a29e-4af5-91c9-1aae7afed352?autoplay=true&amp;loop=false&amp;muted=false&amp;preload=true" loading="lazy" style="border:0;position:absolute;top:0;height:100%;width:100%;" allow="accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;" allowfullscreen="true" data-rocket-lazyload="fitvidscompatible" data-lazy-src="https://iframe.mediadelivery.net/embed/76921/7f712870-a29e-4af5-91c9-1aae7afed352?autoplay=true&amp;loop=false&amp;muted=false&amp;preload=true" data-ll-status="loaded" class="entered lazyloaded"></iframe>
    Quote Quote  
  2. Member
    Join Date
    Dec 2021
    Location
    england
    Search Comp PM
    Code:
    #!/usr/bin/env python3
    
    import re
    import sys
    from hashlib import md5
    from html import unescape
    from random import random
    from urllib.parse import urlparse
    
    import requests
    import yt_dlp
    
    
    class iframeVideoDownloader:
        # user agent and platform related headers
        user_agent = {
            'sec-ch-ua':
                '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
            'sec-ch-ua-mobile':
                '?0',
            'sec-ch-ua-platform':
                '"Linux"',
            'user-agent':
                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
        }
        session = requests.session()
        session.headers.update(user_agent)
    
        def __init__(self,
                     referer='https://127.0.0.1/',
                     embed_url='',
                     name='',
                     path=''):
            self.referer = referer if referer else sys.exit(1)
            self.embed_url = embed_url if embed_url else sys.exit(1)
            self.guid = urlparse(embed_url).path.split('/')[-1]
            self.headers = {
                'embed': {
                    'authority': 'iframe.mediadelivery.net',
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'pragma': 'no-cache',
                    'referer': referer,
                    'sec-fetch-dest': 'iframe',
                    'sec-fetch-mode': 'navigate',
                    'sec-fetch-site': 'cross-site',
                    'upgrade-insecure-requests': '1',
                },
                'ping|activate': {
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'origin': 'https://iframe.mediadelivery.net',
                    'pragma': 'no-cache',
                    'referer': 'https://iframe.mediadelivery.net/',
                    'sec-fetch-dest': 'empty',
                    'sec-fetch-mode': 'cors',
                    'sec-fetch-site': 'same-site',
                },
                'playlist': {
                    'authority': 'iframe.mediadelivery.net',
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'pragma': 'no-cache',
                    'referer': embed_url,
                    'sec-fetch-dest': 'empty',
                    'sec-fetch-mode': 'cors',
                    'sec-fetch-site': 'same-origin',
                }
            }
            embed_response = self.session.get(embed_url,
                                              headers=self.headers['embed'])
            embed_page = embed_response.text
            try:
                self.server_id = re.search(
                    r'https://video-(.*?)\.mediadelivery\.net', embed_page).group(1)
            except AttributeError:
                sys.exit(1)
            self.headers['ping|activate'].update(
                {'authority': f'video-{self.server_id}.mediadelivery.net'})
            search = re.search(r'contextId=(.*?)&secret=(.*?)"', embed_page)
            self.context_id, self.secret = search.group(1), search.group(2)
            if name:
                self.file_name = f'{name}.mp4'
            else:
                file_name_unescaped = re.search(r'og:title" content="(.*?)"',
                                                embed_page).group(1)
                file_name_escaped = unescape(file_name_unescaped)
                self.file_name = re.sub(r'\.[^.]*$.*', '.mp4', file_name_escaped)
            self.path = path if path else '~/Videos/'
    
        def prepare_dl(self) -> str:
    
            def ping(time: int, paused: str, res: str):
                md5_hash = md5(
                    f'{self.secret}_{self.context_id}_{time}_{paused}_{res}'.encode(
                        'utf8')).hexdigest()
                params = {
                    'hash': md5_hash,
                    'time': time,
                    'paused': paused,
                    'chosen_res': res
                }
                self.session.get(
                    f'https://video-{self.server_id}.mediadelivery.net/.drm/{self.context_id}/ping',
                    params=params,
                    headers=self.headers['ping|activate'])
    
            def activate():
                self.session.get(
                    f'https://video-{self.server_id}.mediadelivery.net/.drm/{self.context_id}/activate',
                    headers=self.headers['ping|activate'])
    
            def main_playlist():
                params = {'contextId': self.context_id, 'secret': self.secret}
                response = self.session.get(
                    f'https://iframe.mediadelivery.net/{self.guid}/playlist.drm',
                    params=params,
                    headers=self.headers['playlist'])
                resolutions = re.findall(r'RESOLUTION=(.*)', response.text)[::-1]
                if not resolutions:
                    sys.exit(2)
                else:
                    return resolutions[0]  # highest resolution, -1 for lowest
    
            def video_playlist():
                params = {'contextId': self.context_id}
                self.session.get(
                    f'https://iframe.mediadelivery.net/{self.guid}/{resolution}/video.drm',
                    params=params,
                    headers=self.headers['playlist'])
    
            ping(time=0, paused='true', res='0')
            activate()
            resolution = main_playlist()
            video_playlist()
            for i in range(0, 29, 4):  # first 28 seconds, arbitrary
                ping(time=i + round(random(), 6),
                     paused='false',
                     res=resolution.split('x')[-1])
            self.session.close()
            return resolution
    
        def download(self):
            resolution = self.prepare_dl()
            url = [
                f'https://iframe.mediadelivery.net/{self.guid}/{resolution}/video.drm?contextId={self.context_id}'
            ]
            ydl_opts = {
                'http_headers': {
                    'Referer': self.embed_url,
                    'User-Agent': self.user_agent['user-agent']
                },
                'concurrent_fragment_downloads': 10,
                # 'external_downloader': 'aria2c'
                'nocheckcertificate': True,
                'outtmpl': self.file_name,
                'restrictfilenames': True,
                'windowsfilenames': True,
                'nopart': True,
                'paths': {
                    'home': self.path,
                    'temp': f'.{self.file_name}/',
                },
                'retries': float('inf'),
                'extractor_retries': float('inf'),
                'fragment_retries': float('inf'),
                'skip_unavailable_fragments': False,
                'no_warnings': True,
            }
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                ydl.download(url)
    
    
    if __name__ == '__main__':
        video = iframeVideoDownloader(
            # insert the referer between the quotes below (address of your webpage)
            referer='https://iframe.mediadelivery.net/',
            # paste your embed link
            embed_url='https://iframe.mediadelivery.net/embed/76921/7f712870-a29e-4af5-91c9-1aae7afed352',
            # you can override file name, no extension
            name="video",
            # you can override download path
            path=r"")
        # video.session.close()
        video.download()
    Quote Quote  
  3. Originally Posted by iamghost View Post
    Code:
    #!/usr/bin/env python3
    
    import re
    import sys
    from hashlib import md5
    from html import unescape
    from random import random
    from urllib.parse import urlparse
    
    import requests
    import yt_dlp
    
    
    class iframeVideoDownloader:
        # user agent and platform related headers
        user_agent = {
            'sec-ch-ua':
                '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
            'sec-ch-ua-mobile':
                '?0',
            'sec-ch-ua-platform':
                '"Linux"',
            'user-agent':
                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
        }
        session = requests.session()
        session.headers.update(user_agent)
    
        def __init__(self,
                     referer='https://127.0.0.1/',
                     embed_url='',
                     name='',
                     path=''):
            self.referer = referer if referer else sys.exit(1)
            self.embed_url = embed_url if embed_url else sys.exit(1)
            self.guid = urlparse(embed_url).path.split('/')[-1]
            self.headers = {
                'embed': {
                    'authority': 'iframe.mediadelivery.net',
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'pragma': 'no-cache',
                    'referer': referer,
                    'sec-fetch-dest': 'iframe',
                    'sec-fetch-mode': 'navigate',
                    'sec-fetch-site': 'cross-site',
                    'upgrade-insecure-requests': '1',
                },
                'ping|activate': {
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'origin': 'https://iframe.mediadelivery.net',
                    'pragma': 'no-cache',
                    'referer': 'https://iframe.mediadelivery.net/',
                    'sec-fetch-dest': 'empty',
                    'sec-fetch-mode': 'cors',
                    'sec-fetch-site': 'same-site',
                },
                'playlist': {
                    'authority': 'iframe.mediadelivery.net',
                    'accept': '*/*',
                    'accept-language': 'en-US,en;q=0.9',
                    'cache-control': 'no-cache',
                    'pragma': 'no-cache',
                    'referer': embed_url,
                    'sec-fetch-dest': 'empty',
                    'sec-fetch-mode': 'cors',
                    'sec-fetch-site': 'same-origin',
                }
            }
            embed_response = self.session.get(embed_url,
                                              headers=self.headers['embed'])
            embed_page = embed_response.text
            try:
                self.server_id = re.search(
                    r'https://video-(.*?)\.mediadelivery\.net', embed_page).group(1)
            except AttributeError:
                sys.exit(1)
            self.headers['ping|activate'].update(
                {'authority': f'video-{self.server_id}.mediadelivery.net'})
            search = re.search(r'contextId=(.*?)&secret=(.*?)"', embed_page)
            self.context_id, self.secret = search.group(1), search.group(2)
            if name:
                self.file_name = f'{name}.mp4'
            else:
                file_name_unescaped = re.search(r'og:title" content="(.*?)"',
                                                embed_page).group(1)
                file_name_escaped = unescape(file_name_unescaped)
                self.file_name = re.sub(r'\.[^.]*$.*', '.mp4', file_name_escaped)
            self.path = path if path else '~/Videos/'
    
        def prepare_dl(self) -> str:
    
            def ping(time: int, paused: str, res: str):
                md5_hash = md5(
                    f'{self.secret}_{self.context_id}_{time}_{paused}_{res}'.encode(
                        'utf8')).hexdigest()
                params = {
                    'hash': md5_hash,
                    'time': time,
                    'paused': paused,
                    'chosen_res': res
                }
                self.session.get(
                    f'https://video-{self.server_id}.mediadelivery.net/.drm/{self.context_id}/ping',
                    params=params,
                    headers=self.headers['ping|activate'])
    
            def activate():
                self.session.get(
                    f'https://video-{self.server_id}.mediadelivery.net/.drm/{self.context_id}/activate',
                    headers=self.headers['ping|activate'])
    
            def main_playlist():
                params = {'contextId': self.context_id, 'secret': self.secret}
                response = self.session.get(
                    f'https://iframe.mediadelivery.net/{self.guid}/playlist.drm',
                    params=params,
                    headers=self.headers['playlist'])
                resolutions = re.findall(r'RESOLUTION=(.*)', response.text)[::-1]
                if not resolutions:
                    sys.exit(2)
                else:
                    return resolutions[0]  # highest resolution, -1 for lowest
    
            def video_playlist():
                params = {'contextId': self.context_id}
                self.session.get(
                    f'https://iframe.mediadelivery.net/{self.guid}/{resolution}/video.drm',
                    params=params,
                    headers=self.headers['playlist'])
    
            ping(time=0, paused='true', res='0')
            activate()
            resolution = main_playlist()
            video_playlist()
            for i in range(0, 29, 4):  # first 28 seconds, arbitrary
                ping(time=i + round(random(), 6),
                     paused='false',
                     res=resolution.split('x')[-1])
            self.session.close()
            return resolution
    
        def download(self):
            resolution = self.prepare_dl()
            url = [
                f'https://iframe.mediadelivery.net/{self.guid}/{resolution}/video.drm?contextId={self.context_id}'
            ]
            ydl_opts = {
                'http_headers': {
                    'Referer': self.embed_url,
                    'User-Agent': self.user_agent['user-agent']
                },
                'concurrent_fragment_downloads': 10,
                # 'external_downloader': 'aria2c'
                'nocheckcertificate': True,
                'outtmpl': self.file_name,
                'restrictfilenames': True,
                'windowsfilenames': True,
                'nopart': True,
                'paths': {
                    'home': self.path,
                    'temp': f'.{self.file_name}/',
                },
                'retries': float('inf'),
                'extractor_retries': float('inf'),
                'fragment_retries': float('inf'),
                'skip_unavailable_fragments': False,
                'no_warnings': True,
            }
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                ydl.download(url)
    
    
    if __name__ == '__main__':
        video = iframeVideoDownloader(
            # insert the referer between the quotes below (address of your webpage)
            referer='https://iframe.mediadelivery.net/',
            # paste your embed link
            embed_url='https://iframe.mediadelivery.net/embed/76921/7f712870-a29e-4af5-91c9-1aae7afed352',
            # you can override file name, no extension
            name="video",
            # you can override download path
            path=r"")
        # video.session.close()
        video.download()
    thank you very much, the code works perfectly
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!