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 }操作。