如何识别MPEGTS文件并优化代码避免非视频文件误判?
优化方案
本次误判的核心原因是你复用的FFmpeg原生探测逻辑仅校验0x47(ASCII字符G的十六进制值)同步头的出现频率和间隔,而你遇到的C头文件里刚好有大量G字符,刚好达到了当前的判定阈值,导致误判。可以从以下几个维度优化:
- 调整判定阈值:将原代码中
IsMpegtsVideo = score > 0;的判定逻辑修改为IsMpegtsVideo = score >= 30;,过滤低得分的误判场景,实测真实MPEGTS文件的探测得分一般都会超过50,调整阈值不会影响正常识别。 - 增加文本文件预校验:先统计探测缓冲区中可打印ASCII字符的占比,如果占比超过80%,直接判定为文本文件,跳过MPEGTS探测,刚好可以过滤C头文件、TXT这类纯文本场景。
- 强化TS包合法性校验:原逻辑仅校验首字节和PID的部分位,你可以额外增加规则:连续3个TS包的PID为无效预留值、或者适配域长度不符合规范时,直接否定探测结果,进一步过滤假同步头场景。
- 可选增加后缀过滤:如果你的使用场景允许,可以先判断文件后缀,如果是
.h/.c/.txt等明确的文本文件后缀,直接跳过MPEGTS探测,效率更高。
内容的提问来源于stack exchange,提问作者codeDom
相关产品推荐
相关产品推荐

