FFmpeg的AVMediaType枚举中AVMEDIA_TYPE_NB对应什么类型的流
FFmpeg
AVMEDIA_TYPE_NB 枚举项说明 AVMEDIA_TYPE_NB(后缀NB是Number的缩写)不对应任何实际存在的媒体数据流类型,它是FFmpeg枚举体系里通用的哨兵计数位,没有实际业务语义。
- FFmpeg里几乎所有枚举末尾带
_NB后缀的项都是这个作用:它的枚举值刚好等于前面所有有效媒体类型的总个数,专门用来做边界校验、数组长度定义用的,从设计之初就不是给真实流标记类型用的。 - 正常解封装、识别出来的合法媒体流,
codec_type字段永远不会出现AVMEDIA_TYPE_NB。合法的流类型只会是它之前明确定义的枚举值:视频(AVMEDIA_TYPE_VIDEO)、音频(AVMEDIA_TYPE_AUDIO)、字幕(AVMEDIA_TYPE_SUBTITLE)、附件(AVMEDIA_TYPE_ATTACHMENT)、裸数据(AVMEDIA_TYPE_DATA)等。
你搜到的“用于过滤丢弃数据包”的用法,属于开发者的自定义业务技巧:因为没有任何真实流的类型会等于AVMEDIA_TYPE_NB,写过滤逻辑时可以把“丢弃所有包”的匹配标记设为这个值,不需要额外定义新的常量,本质是借用了它“不匹配任何合法类型”的特性,不是这个枚举项本身的官方设计用途。
实际开发时做类型合法性判断,统一用
codec_type < AVMEDIA_TYPE_NB作为合法判断条件即可,大于等于这个值的类型全是异常值,一般是内存踩坏、头文件和动态库版本不匹配导致的错乱,正常流程不会触发。
如果真的在正常读流时碰到codec_type == AVMEDIA_TYPE_NB的流,不要尝试按正常流处理,直接跳过或者抛异常就行,这个流本身要么损坏要么是识别失败的无效流。
内容的提问来源于stack exchange,提问作者Bernie
相关产品推荐
相关产品推荐

