Browse Source

[downloader/f4m] The last value in a tag is the tag length

Antti Ajanki 10 years ago
parent
commit
2c322cc5d6
1 changed files with 7 additions and 3 deletions
  1. 7 3
      youtube_dl/downloader/f4m.py

+ 7 - 3
youtube_dl/downloader/f4m.py

@@ -187,6 +187,10 @@ def build_fragments_list(boot_info):
     return res
     return res
 
 
 
 
+def write_unsigned_int(stream, val):
+    stream.write(struct_pack('!I', val))
+
+
 def write_flv_header(stream):
 def write_flv_header(stream):
     """Writes the FLV header to stream"""
     """Writes the FLV header to stream"""
     # FLV header
     # FLV header
@@ -198,6 +202,8 @@ def write_flv_header(stream):
 
 
 def write_metadata_tag(stream, metadata):
 def write_metadata_tag(stream, metadata):
     """Writes optional metadata tag to stream"""
     """Writes optional metadata tag to stream"""
+    FLV_TAG_HEADER_LEN = 11
+
     if metadata:
     if metadata:
         # Script data
         # Script data
         stream.write(b'\x12')
         stream.write(b'\x12')
@@ -205,9 +211,7 @@ def write_metadata_tag(stream, metadata):
         stream.write(struct_pack('!L', len(metadata))[1:])
         stream.write(struct_pack('!L', len(metadata))[1:])
         stream.write(b'\x00\x00\x00\x00\x00\x00\x00')
         stream.write(b'\x00\x00\x00\x00\x00\x00\x00')
         stream.write(metadata)
         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')
+        write_unsigned_int(stream, FLV_TAG_HEADER_LEN + len(metadata))
 
 
 
 
 def _add_ns(prop):
 def _add_ns(prop):