最近在用ffmpeg做直播推流功能,之前做的本地录制,封装格式是mp4,直播的时候,mp4不支持,需要改为flv,但是改为flv之后,用ffmpeg命令行进行拉流,拉下来的流存储成flv文件。播放起来,视频显得特别快,原本2分钟的视频,10秒不到就播放完了。
为此将音频和视频单独推流,视频没问题,音频出了问题,录制4分钟的音频,在文件中大概只有2分钟。
下面是用ffmpeg拉流时的命令行,从红色方框可以看出,1分钟拉下来的流不到30ms。正常情况下,这个speed应该在比1大一点点。
下面一个正常拉流情况下的speed值。
为此用ffmpeg命令行推流试了下,ffmpeg命令行推流是ok的,然后调试ffmpeg工具,如何调试,本人写了博客。
vs2017调试ffmpeg源码
经过一段时间,发现,问题出在avformat_write_header函数上,在write之前,已经对avformat_new_stream的AVStream做了time_base设置,设置为1/48000,跟音频的采样率保持一致。
但是avformat_write_header之后,time_base变成了1/1000。
封装格式为mp4的时候,不会出现这种情况,看来应该是跟封装格式有关。
下面的图片来自博客ffmpeg # 各种封装格式的time_base