mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 05:17:06 -05:00 
			
		
		
		
	Use relative paths for DASH fragments (closes #12990)
10x reduced JSON size refs #13810
This commit is contained in:
		@@ -1892,9 +1892,13 @@ class InfoExtractor(object):
 | 
			
		||||
                                'Bandwidth': bandwidth,
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        def location_key(location):
 | 
			
		||||
                            return 'url' if re.match(r'^https?://', location) else 'path'
 | 
			
		||||
 | 
			
		||||
                        if 'segment_urls' not in representation_ms_info and 'media' in representation_ms_info:
 | 
			
		||||
 | 
			
		||||
                            media_template = prepare_template('media', ('Number', 'Bandwidth', 'Time'))
 | 
			
		||||
                            media_location_key = location_key(media_template)
 | 
			
		||||
 | 
			
		||||
                            # As per [1, 5.3.9.4.4, Table 16, page 55] $Number$ and $Time$
 | 
			
		||||
                            # can't be used at the same time
 | 
			
		||||
@@ -1904,7 +1908,7 @@ class InfoExtractor(object):
 | 
			
		||||
                                    segment_duration = float_or_none(representation_ms_info['segment_duration'], representation_ms_info['timescale'])
 | 
			
		||||
                                    representation_ms_info['total_number'] = int(math.ceil(float(period_duration) / segment_duration))
 | 
			
		||||
                                representation_ms_info['fragments'] = [{
 | 
			
		||||
                                    'url': media_template % {
 | 
			
		||||
                                    media_location_key: media_template % {
 | 
			
		||||
                                        'Number': segment_number,
 | 
			
		||||
                                        'Bandwidth': bandwidth,
 | 
			
		||||
                                    },
 | 
			
		||||
@@ -1928,7 +1932,7 @@ class InfoExtractor(object):
 | 
			
		||||
                                        'Number': segment_number,
 | 
			
		||||
                                    }
 | 
			
		||||
                                    representation_ms_info['fragments'].append({
 | 
			
		||||
                                        'url': segment_url,
 | 
			
		||||
                                        media_location_key: segment_url,
 | 
			
		||||
                                        'duration': float_or_none(segment_d, representation_ms_info['timescale']),
 | 
			
		||||
                                    })
 | 
			
		||||
 | 
			
		||||
@@ -1952,8 +1956,9 @@ class InfoExtractor(object):
 | 
			
		||||
                            for s in representation_ms_info['s']:
 | 
			
		||||
                                duration = float_or_none(s['d'], timescale)
 | 
			
		||||
                                for r in range(s.get('r', 0) + 1):
 | 
			
		||||
                                    segment_uri = representation_ms_info['segment_urls'][segment_index]
 | 
			
		||||
                                    fragments.append({
 | 
			
		||||
                                        'url': representation_ms_info['segment_urls'][segment_index],
 | 
			
		||||
                                        location_key(segment_uri): segment_uri,
 | 
			
		||||
                                        'duration': duration,
 | 
			
		||||
                                    })
 | 
			
		||||
                                    segment_index += 1
 | 
			
		||||
@@ -1962,6 +1967,7 @@ class InfoExtractor(object):
 | 
			
		||||
                        # No fragments key is present in this case.
 | 
			
		||||
                        if 'fragments' in representation_ms_info:
 | 
			
		||||
                            f.update({
 | 
			
		||||
                                'fragment_base_url': base_url,
 | 
			
		||||
                                'fragments': [],
 | 
			
		||||
                                'protocol': 'http_dash_segments',
 | 
			
		||||
                            })
 | 
			
		||||
@@ -1969,10 +1975,8 @@ class InfoExtractor(object):
 | 
			
		||||
                                initialization_url = representation_ms_info['initialization_url']
 | 
			
		||||
                                if not f.get('url'):
 | 
			
		||||
                                    f['url'] = initialization_url
 | 
			
		||||
                                f['fragments'].append({'url': initialization_url})
 | 
			
		||||
                                f['fragments'].append({location_key(initialization_url): initialization_url})
 | 
			
		||||
                            f['fragments'].extend(representation_ms_info['fragments'])
 | 
			
		||||
                            for fragment in f['fragments']:
 | 
			
		||||
                                fragment['url'] = urljoin(base_url, fragment['url'])
 | 
			
		||||
                        try:
 | 
			
		||||
                            existing_format = next(
 | 
			
		||||
                                fo for fo in formats
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user