import io
def fix_avc_file(file_path):
    with open(file_path, 'rb') as f:
        data = io.BytesIO(f.read())
    data.seek(0)
    # 读取文件头部信息
    AVC = data.read(4)
    configuration_version = data.read(1)
    AVCT1 = data.read(1)
    profile = data.read(1)
    profile_compatibility = data.read(1)
    level = data.read(1)
    NALU_len_size = data.read(1) & 0x03
    
    # 获取所有 NAL 单元
    NAL_units = []
    while len(data.getvalue()) > data.tell():
        NAL_units.append(data.tell())
        if data.read(1) == b'\x01' and data.read(1) == b'\x09':
            break
    NAL_units.append(len(data.getvalue()))
    # 处理 NAL 单元之间的未知数据
    for i in range(len(NAL_units)-1):
        data.seek(NAL_units[i+1])
        next_NAL_start = data.tell()
        data.seek(NAL_units[i]+1)
        while data.tell() < next_NAL_start:
            if data.read(3) == b'\x00\x00\x01':
                continue
            data.seek(-3, 1)
            unknown_length = 0
            while True:
                b = ord(data.read(1))
                unknown_length = (unknown_length << 8) + b
                if b != 0xff:
                    break
            data.seek(-1, 1)
            unknown_data = data.read(unknown_length)
            # 删除未知数据
            # data.seek(-unknown_length,
                    上一篇:AVContentKeySession的makeStreamingContentKeyRequestDataForApp方法可以安全地被强制同步吗?
                
下一篇:avc:拒绝对service=android.os.UpdateEngineService执行{ find }操作。