是否可以通过单独分析 RTP 流来检测 RTP 流中使用的编解码器?我了解 RTP 标头中的有效负载类型 (PT) 字段,该字段可用于识别具有静态分配 PT 编号的编解码器。其他使用动态 PT 编号范围的编解码器又如何呢?是否有任何启发式方法来检测有效负载的类型?我对各种解决方案感兴趣,即使检测仅适用于一种编解码器。
当然,您可以嗅探数据包,看看它是否是 RFC XXX 或 YYY 等。长度检查(对于固定长度编解码器,但要注意每个数据包有多个帧);时间戳速率(告诉您窄/宽/超宽带音频或视频);然后您可以查看前 N 个字节是否与可能匹配之一的有效模式匹配。
这不是一个小工作量,除非您只对其中一个子集感兴趣。
是的,这是可能的。 此 C/C++ 源代码 具有经过多年开发的启发式方法,对于 LTE 编解码器(EVS、AMR-NB、AMR-WB)来说是可靠的。查找 detector_codec_type_and_bitrate()。基本上它从唯一的值和序列开始,然后过渡到一系列有效负载大小开关语句;其中它会进行更多的价值检查。它处理 EVS 主模式和 AMR-WB IO 兼容模式之间的冲突情况。它还填充了一些进度和调试变量,这对于像这样的代码来说很重要,可以在遇到新情况时查看哪里出了问题
免责声明:其中部分内容是我写的,自2018年以来一直在更新和维护