ffmpeg发送AAC及接收AAC

做编解码的东西,总会用到ffmpeg。目前使用的是ffmpeg-3.2.2版本。使用libfdk-aac对aac进行编解码。编译的要开启–enable-libfdk-aac参数。

发送AAC

./ffmpeg -re -i Adele.mp3 -vn -c:a libfdk_aac  -flags +global_header  -ar 16k -f rtp rtp://127.0.0.1:5000 -v 56

v=0
o=- 0 0 IN IP4 127.0.0.1
s=You'll Never See Me Again
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 57.56.100
m=audio 5000 RTP/AVP 97
b=AS:46
a=rtpmap:97 MPEG4-GENERIC/16000/2
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1410

-ar参数指定为16k的音质。而如果没有带-flags +global_header则会报以下的错误:

[rtp @ 0x3c836e0] AAC with no global headers is currently not supported.

如果想要是单声道。则可以带上参数-ac 1

./ffmpeg -re -i Adele.mp3 -vn -c:a libfdk_aac  -flags +global_header  -ar 16k -ac 1 -f rtp rtp://127.0.0.1:5000 -v 56

v=0
o=- 0 0 IN IP4 127.0.0.1
s=You'll Never See Me Again
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 57.56.100
m=audio 5000 RTP/AVP 97
b=AS:34
a=rtpmap:97 MPEG4-GENERIC/16000/1
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1408

其实AAC可以负载在两种RFC协议中,以上这些配置,使用的是RFC3640 (MPEG4-GENERIC的rtpmap);还有可以基于RFC3016,也就是LATM(MP4A-LATM的rtpmap)。ffmpeg也是支持的,要带上RTP参数:

./ffmpeg -re -i Adele.mp3 -vn -c:a libfdk_aac  -flags +global_header  -ar 16k -rtpflags latm -f rtp rtp://127.0.0.1:5000 -v 56

v=0
o=- 0 0 IN IP4 127.0.0.1
s=You'll Never See Me Again
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 57.56.100
m=audio 5000 RTP/AVP 97
b=AS:46
a=rtpmap:97 MP4A-LATM/16000/2
a=fmtp:97 profile-level-id=40;cpresent=0;config=400028203fc0

当前还有一些其余的参数可以配置,暂时不对一些细节参数说明,可以去查一查ffmpeg或者直接阅读ffmpeg的代码(个人比较喜欢直接阅读代码)。

接收AAC

由于ffmpeg在发送RTP的时候,都会输出SDP信息,我们可以将SDP信息复制到文件。这时候,我们使用A终端接收SDP的内容,用B终端发送RTP流。并且使用wireshark抓包(或tcpdump),就可以将AAC的RTP报文抓取下来。

./ffmpeg -protocol_whitelist file,udp,rtp -i aac.sdp -v 56 aac.wav

其中,目前3.2.2版本,需要带上-protocol_whitelist file,udp,rtp参数字段,否则会报一下错误:

[rtp @ 0x394abc0] Protocol not on whitelist 'file,crypto'!

 

参考资料:

streaming webcam via rtp protocol

AAC with no global headers is currently not supported.

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

本文链接地址: ffmpeg发送AAC及接收AAC

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top