""" Return a list of (segment, fragment) for each fragment in the video """
res = []
segment_run_table = boot_info['segments'][0]
- # I've only found videos with one segment
- segment_run_entry = segment_run_table['segment_run'][0]
- n_frags = segment_run_entry[1]
fragment_run_entry_table = boot_info['fragments'][0]['fragments']
first_frag_number = fragment_run_entry_table[0]['first']
- for (i, frag_number) in zip(range(1, n_frags + 1), itertools.count(first_frag_number)):
- res.append((1, frag_number))
+ fragments_counter = itertools.count(first_frag_number)
+ for segment, fragments_count in segment_run_table['segment_run']:
+ for _ in range(fragments_count):
+ res.append((segment, next(fragments_counter)))
return res
stream.write(struct_pack('!I', val))
+def write_unsigned_int_24(stream, val):
+ stream.write(struct_pack('!I', val)[1:])
+
+
def write_flv_header(stream):
"""Writes the FLV header to stream"""
# FLV header
def write_metadata_tag(stream, metadata):
"""Writes optional metadata tag to stream"""
+ SCRIPT_TAG = b'\x12'
FLV_TAG_HEADER_LEN = 11
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(SCRIPT_TAG)
+ write_unsigned_int_24(stream, len(metadata))
stream.write(b'\x00\x00\x00\x00\x00\x00\x00')
stream.write(metadata)
write_unsigned_int(stream, FLV_TAG_HEADER_LEN + len(metadata))