%PDF- %PDF-
Direktori : /home/waritko/build/Bento4/Source/Python/utils/ |
Current File : //home/waritko/build/Bento4/Source/Python/utils/check-indexes.py |
#! /usr/bin/env python import mp4utils import sys import os.path as path SCRIPT_PATH = path.abspath(path.dirname(__file__)) sys.path += [SCRIPT_PATH] platform = sys.platform if platform.startswith('linux'): platform = 'linux-x86' elif platform.startswith('darwin'): platform = 'macosx' class Options(object): pass options = Options() options.debug = False options.verbose = False options.min_buffer_time = 0.0 options.exec_dir = path.join(SCRIPT_PATH, 'bin', platform) class Sidx(object): pass mp4_file = mp4utils.Mp4File(options, mp4utils.MediaSource(sys.argv[1])) moof_offsets = [] sidx_anchors = [] for atom in mp4_file.atoms: if atom.type == 'moof': moof_offsets.append(atom.position) elif atom.type == 'sidx': sidx_anchors.append(atom.position+atom.size) print 'sidx anchors:', sidx_anchors print len(moof_offsets), 'moof boxes found:', moof_offsets sidx = None sidx_index = 0 for atom in mp4_file.tree: if atom['name'] == 'sidx': sidx = Sidx() sidx.entries = [] sidx.reference_id = int(atom['reference_ID']) sidx.timescale = int(atom['timescale']) sidx.earliest_presentation_time = int(atom['earliest_presentation_time']) sidx.first_offset = int(atom['first_offset']) for (name, value) in atom.items(): if name.startswith('entry '): entry = {} for field in value.split(', '): (field_name, field_value) = field.split('=') entry[field_name] = int(field_value) sidx.entries.append(entry) count = 0 offset = sidx.first_offset for entry in sidx.entries: #print entry if entry['reference_type'] == 0: #print sidx_anchors[sidx_index]+offset if sidx_anchors[sidx_index]+offset not in moof_offsets: print 'sidx offset', sidx_anchors[sidx_index], '+', offset, 'does not point to a moof box' offset += entry['referenced_size'] sidx_index += 1 print 'sidx OK' elif atom['name'] == 'mfra': for child in atom['children']: if child['name'] == 'tfra': for (name, value) in child.items(): if name.startswith('entry'): entry = {} for field in value.split(', '): (field_name, field_value) = field.split('=') entry[field_name] = int(field_value) if entry['moof_offset'] not in moof_offsets: print 'tfra offset', moof_offset, 'does not point to a moof box' print 'mfra OK' print '=== Done ==='