天天看点

ffmpeg 推流rtsp流为h264/aac

最近有一个需求,获取摄像头的数据,写mp4,视频比较好处理(解码->编码->写文件)。

对于音频,稍微有点麻烦。

摄像头支持的音频格式有多种,比如pcmu/pcma/aac.

对于aac格式,直接写文件。

对于pcma/pcmu,需要做一些处理。

我的想法是,pcma解码后直接编码成aac,保持和原始数据相同的采样率通道数等,不重采样。

用source Insight看了下ffmpeg的源码,看是否有这样的例子,还真让我找到了,移植到代码上,测试通过。

网上有很多例子,都是读一个pcm文件,解码再编码写文件。这个好处理,你读文件,你要多少你就可以读多少,

而一些厂商摄像头,读出的数据长度是320字节。

请查看ffmpeg的transcoding.c的源码吧。其实就是利用libavfilter。

查看摄像头的音频配置,音频格式是pcm,采样率有8k,16k,32k,44.1k,48k等。在8k,16k,32k时,使用ffmpeg提供的例子测试正常。

当采样率设置44.1k/48k,报了一些错误。

我的想法是,限制输出采样率为最大32k,这时libavfilter就有一个重采样的过程,目前正在验证。

推RTSP流:参考live555,都有现成的例子,抄抄就可以了。推流h264/aac没啥问题,使用vlc播放视频和音频有点不同步,需要优化下。

继续阅读