ffmpeg fdk-aac发包问题

上个月发了一篇 FFMPEG发送AAC及接收AAC 的文章,其中对于LATM,ffmpeg的SDP其实是只针对ffmpeg自己实现的AAC编解码模块的,并不支持FDK-AAC,主要是config字段是有误的。按我们上次的SDP如下:

其中config对应的是400028203fc0。FDK-AAC如果使用latm其实是生成的并不一定是这样的config。之前学习其发送报文的时候,跟踪了下代码。当然,后续其可能会有所更新,目前跟踪的代码是ffmpeg 3.3版本的。在sdp.c中的函数sdp_write_media_attributes,AAC的SDP生成如下:

其config其实是由函数latm_context2config得到的。而latm_context2config函数实现如下:

这部分字段的生成,有些是写死的,部分是根据当前的声道数以及rate_index生成。并不是FDK-AAC通过函数aacEncInfo来获取编码信息,通过AACENC_InfoStruct结构体中的成员变量confBuf来获取config配置的。所以,如果使用ffmpeg进行latm带外发包的话,其实config可能是错误的,会导致解码失败。不过LATM是支持带内携带SMC配置的。但是,还是不能通过ffmpeg的latm_parse_packet或ff_rtp_send_latm,因为这两个函数都是使用带外传输的方式。至于如何在SDP中区别带内/带外。下次好好说一下RFC3016,就可以知道了!这里简单记录下,自己踩的ffmpeg的坑。希望后续有人实现的时候,能更快的避开这个坑。

转载请注明: 转载自elkPi.com

本文链接地址: ffmpeg fdk-aac发包问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注