mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[downloader/f4m] <metadata> is optional according to the F4M specs
This commit is contained in:
		| @@ -187,24 +187,27 @@ def build_fragments_list(boot_info): | ||||
|     return res | ||||
|  | ||||
|  | ||||
| def write_flv_header(stream, metadata): | ||||
|     """Writes the FLV header and the metadata to stream""" | ||||
| def write_flv_header(stream): | ||||
|     """Writes the FLV header to stream""" | ||||
|     # FLV header | ||||
|     stream.write(b'FLV\x01') | ||||
|     stream.write(b'\x05') | ||||
|     stream.write(b'\x00\x00\x00\x09') | ||||
|     # FLV File body | ||||
|     stream.write(b'\x00\x00\x00\x00') | ||||
|     # FLVTAG | ||||
|     # Script data | ||||
|     stream.write(b'\x12') | ||||
|     # Size of the metadata with 3 bytes | ||||
|     stream.write(struct_pack('!L', len(metadata))[1:]) | ||||
|     stream.write(b'\x00\x00\x00\x00\x00\x00\x00') | ||||
|     stream.write(metadata) | ||||
|     # Magic numbers extracted from the output files produced by AdobeHDS.php | ||||
|     # (https://github.com/K-S-V/Scripts) | ||||
|     stream.write(b'\x00\x00\x01\x73') | ||||
|  | ||||
|  | ||||
| def write_metadata_tag(stream, metadata): | ||||
|     """Writes optional metadata tag to stream""" | ||||
|     if metadata: | ||||
|         # Script data | ||||
|         stream.write(b'\x12') | ||||
|         # Size of the metadata with 3 bytes | ||||
|         stream.write(struct_pack('!L', len(metadata))[1:]) | ||||
|         stream.write(b'\x00\x00\x00\x00\x00\x00\x00') | ||||
|         stream.write(metadata) | ||||
|         # Magic numbers extracted from the output files produced by AdobeHDS.php | ||||
|         # (https://github.com/K-S-V/Scripts) | ||||
|         stream.write(b'\x00\x00\x01\x73') | ||||
|  | ||||
|  | ||||
| def _add_ns(prop): | ||||
| @@ -256,7 +259,11 @@ class F4mFD(FileDownloader): | ||||
|             bootstrap = self.ydl.urlopen(bootstrap_url).read() | ||||
|         else: | ||||
|             bootstrap = base64.b64decode(bootstrap_node.text) | ||||
|         metadata = base64.b64decode(media.find(_add_ns('metadata')).text) | ||||
|         metadata_node = media.find(_add_ns('metadata')) | ||||
|         if metadata_node is not None: | ||||
|             metadata = base64.b64decode(metadata_node.text) | ||||
|         else: | ||||
|             metadata = None | ||||
|         boot_info = read_bootstrap_info(bootstrap) | ||||
|  | ||||
|         fragments_list = build_fragments_list(boot_info) | ||||
| @@ -269,7 +276,8 @@ class F4mFD(FileDownloader): | ||||
|  | ||||
|         tmpfilename = self.temp_name(filename) | ||||
|         (dest_stream, tmpfilename) = sanitize_open(tmpfilename, 'wb') | ||||
|         write_flv_header(dest_stream, metadata) | ||||
|         write_flv_header(dest_stream) | ||||
|         write_metadata_tag(dest_stream, metadata) | ||||
|  | ||||
|         # This dict stores the download progress, it's updated by the progress | ||||
|         # hook | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Antti Ajanki
					Antti Ajanki