mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 23:57:06 -05:00 
			
		
		
		
	This commit is contained in:
		@@ -9,12 +9,13 @@ from ..utils import (
 | 
				
			|||||||
    mimetype2ext,
 | 
					    mimetype2ext,
 | 
				
			||||||
    parse_iso8601,
 | 
					    parse_iso8601,
 | 
				
			||||||
    remove_end,
 | 
					    remove_end,
 | 
				
			||||||
 | 
					    update_url_query,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DRTVIE(InfoExtractor):
 | 
					class DRTVIE(InfoExtractor):
 | 
				
			||||||
    _VALID_URL = r'https?://(?:www\.)?dr\.dk/(?:tv/se|nyheder)/(?:[^/]+/)*(?P<id>[\da-z-]+)(?:[/#?]|$)'
 | 
					    _VALID_URL = r'https?://(?:www\.)?dr\.dk/(?:tv/se|nyheder|radio/ondemand)/(?:[^/]+/)*(?P<id>[\da-z-]+)(?:[/#?]|$)'
 | 
				
			||||||
 | 
					    IE_NAME = 'drtv'
 | 
				
			||||||
    _TESTS = [{
 | 
					    _TESTS = [{
 | 
				
			||||||
        'url': 'https://www.dr.dk/tv/se/boern/ultra/klassen-ultra/klassen-darlig-taber-10',
 | 
					        'url': 'https://www.dr.dk/tv/se/boern/ultra/klassen-ultra/klassen-darlig-taber-10',
 | 
				
			||||||
        'md5': '25e659cccc9a2ed956110a299fdf5983',
 | 
					        'md5': '25e659cccc9a2ed956110a299fdf5983',
 | 
				
			||||||
@@ -79,9 +80,10 @@ class DRTVIE(InfoExtractor):
 | 
				
			|||||||
        subtitles = {}
 | 
					        subtitles = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for asset in data['Assets']:
 | 
					        for asset in data['Assets']:
 | 
				
			||||||
            if asset.get('Kind') == 'Image':
 | 
					            kind = asset.get('Kind')
 | 
				
			||||||
 | 
					            if kind == 'Image':
 | 
				
			||||||
                thumbnail = asset.get('Uri')
 | 
					                thumbnail = asset.get('Uri')
 | 
				
			||||||
            elif asset.get('Kind') == 'VideoResource':
 | 
					            elif kind in ('VideoResource', 'AudioResource'):
 | 
				
			||||||
                duration = float_or_none(asset.get('DurationInMilliseconds'), 1000)
 | 
					                duration = float_or_none(asset.get('DurationInMilliseconds'), 1000)
 | 
				
			||||||
                restricted_to_denmark = asset.get('RestrictedToDenmark')
 | 
					                restricted_to_denmark = asset.get('RestrictedToDenmark')
 | 
				
			||||||
                spoken_subtitles = asset.get('Target') == 'SpokenSubtitles'
 | 
					                spoken_subtitles = asset.get('Target') == 'SpokenSubtitles'
 | 
				
			||||||
@@ -96,9 +98,13 @@ class DRTVIE(InfoExtractor):
 | 
				
			|||||||
                        preference = -1
 | 
					                        preference = -1
 | 
				
			||||||
                        format_id += '-spoken-subtitles'
 | 
					                        format_id += '-spoken-subtitles'
 | 
				
			||||||
                    if target == 'HDS':
 | 
					                    if target == 'HDS':
 | 
				
			||||||
                        formats.extend(self._extract_f4m_formats(
 | 
					                        f4m_formats = self._extract_f4m_formats(
 | 
				
			||||||
                            uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43',
 | 
					                            uri + '?hdcore=3.3.0&plugin=aasp-3.3.0.99.43',
 | 
				
			||||||
                            video_id, preference, f4m_id=format_id))
 | 
					                            video_id, preference, f4m_id=format_id)
 | 
				
			||||||
 | 
					                        if kind == 'AudioResource':
 | 
				
			||||||
 | 
					                            for f in f4m_formats:
 | 
				
			||||||
 | 
					                                f['vcodec'] = 'none'
 | 
				
			||||||
 | 
					                        formats.extend(f4m_formats)
 | 
				
			||||||
                    elif target == 'HLS':
 | 
					                    elif target == 'HLS':
 | 
				
			||||||
                        formats.extend(self._extract_m3u8_formats(
 | 
					                        formats.extend(self._extract_m3u8_formats(
 | 
				
			||||||
                            uri, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
					                            uri, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
				
			||||||
@@ -112,6 +118,7 @@ class DRTVIE(InfoExtractor):
 | 
				
			|||||||
                            'format_id': format_id,
 | 
					                            'format_id': format_id,
 | 
				
			||||||
                            'tbr': int_or_none(bitrate),
 | 
					                            'tbr': int_or_none(bitrate),
 | 
				
			||||||
                            'ext': link.get('FileFormat'),
 | 
					                            'ext': link.get('FileFormat'),
 | 
				
			||||||
 | 
					                            'vcodec': 'none' if kind == 'AudioResource' else None,
 | 
				
			||||||
                        })
 | 
					                        })
 | 
				
			||||||
                subtitles_list = asset.get('SubtitlesList')
 | 
					                subtitles_list = asset.get('SubtitlesList')
 | 
				
			||||||
                if isinstance(subtitles_list, list):
 | 
					                if isinstance(subtitles_list, list):
 | 
				
			||||||
@@ -144,3 +151,58 @@ class DRTVIE(InfoExtractor):
 | 
				
			|||||||
            'formats': formats,
 | 
					            'formats': formats,
 | 
				
			||||||
            'subtitles': subtitles,
 | 
					            'subtitles': subtitles,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DRTVLiveIE(InfoExtractor):
 | 
				
			||||||
 | 
					    IE_NAME = 'drtv:live'
 | 
				
			||||||
 | 
					    _VALID_URL = r'https?://(?:www\.)?dr\.dk/(?:tv|TV)/live/(?P<id>[\da-z-]+)'
 | 
				
			||||||
 | 
					    _TEST = {
 | 
				
			||||||
 | 
					        'url': 'https://www.dr.dk/tv/live/dr1',
 | 
				
			||||||
 | 
					        'info_dict': {
 | 
				
			||||||
 | 
					            'id': 'dr1',
 | 
				
			||||||
 | 
					            'ext': 'mp4',
 | 
				
			||||||
 | 
					            'title': 're:^DR1 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'params': {
 | 
				
			||||||
 | 
					            # m3u8 download
 | 
				
			||||||
 | 
					            'skip_download': True,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _real_extract(self, url):
 | 
				
			||||||
 | 
					        channel_id = self._match_id(url)
 | 
				
			||||||
 | 
					        channel_data = self._download_json(
 | 
				
			||||||
 | 
					            'https://www.dr.dk/mu-online/api/1.0/channel/' + channel_id,
 | 
				
			||||||
 | 
					            channel_id)
 | 
				
			||||||
 | 
					        title = self._live_title(channel_data['Title'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        formats = []
 | 
				
			||||||
 | 
					        for streaming_server in channel_data.get('StreamingServers', []):
 | 
				
			||||||
 | 
					            server = streaming_server.get('Server')
 | 
				
			||||||
 | 
					            if not server:
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					            link_type = streaming_server.get('LinkType')
 | 
				
			||||||
 | 
					            for quality in streaming_server.get('Qualities', []):
 | 
				
			||||||
 | 
					                for stream in quality.get('Streams', []):
 | 
				
			||||||
 | 
					                    stream_path = stream.get('Stream')
 | 
				
			||||||
 | 
					                    if not stream_path:
 | 
				
			||||||
 | 
					                        continue
 | 
				
			||||||
 | 
					                    stream_url = update_url_query(
 | 
				
			||||||
 | 
					                        '%s/%s' % (server, stream_path), {'b': ''})
 | 
				
			||||||
 | 
					                    if link_type == 'HLS':
 | 
				
			||||||
 | 
					                        formats.extend(self._extract_m3u8_formats(
 | 
				
			||||||
 | 
					                            stream_url, channel_id, 'mp4',
 | 
				
			||||||
 | 
					                            m3u8_id=link_type, fatal=False, live=True))
 | 
				
			||||||
 | 
					                    elif link_type == 'HDS':
 | 
				
			||||||
 | 
					                        formats.extend(self._extract_f4m_formats(update_url_query(
 | 
				
			||||||
 | 
					                            '%s/%s' % (server, stream_path), {'hdcore': '3.7.0'}),
 | 
				
			||||||
 | 
					                            channel_id, f4m_id=link_type, fatal=False))
 | 
				
			||||||
 | 
					        self._sort_formats(formats)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            'id': channel_id,
 | 
				
			||||||
 | 
					            'title': title,
 | 
				
			||||||
 | 
					            'thumbnail': channel_data.get('PrimaryImageUri'),
 | 
				
			||||||
 | 
					            'formats': formats,
 | 
				
			||||||
 | 
					            'is_live': True,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -248,7 +248,10 @@ from .dramafever import (
 | 
				
			|||||||
from .dreisat import DreiSatIE
 | 
					from .dreisat import DreiSatIE
 | 
				
			||||||
from .drbonanza import DRBonanzaIE
 | 
					from .drbonanza import DRBonanzaIE
 | 
				
			||||||
from .drtuber import DrTuberIE
 | 
					from .drtuber import DrTuberIE
 | 
				
			||||||
from .drtv import DRTVIE
 | 
					from .drtv import (
 | 
				
			||||||
 | 
					    DRTVIE,
 | 
				
			||||||
 | 
					    DRTVLiveIE,
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
from .dvtv import DVTVIE
 | 
					from .dvtv import DVTVIE
 | 
				
			||||||
from .dumpert import DumpertIE
 | 
					from .dumpert import DumpertIE
 | 
				
			||||||
from .defense import DefenseGouvFrIE
 | 
					from .defense import DefenseGouvFrIE
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user