先说下环境:
编码器速度设置最快,编码延时设置最低。
av_opt_set(pCodecCtx->priv_data, “preset”, “ultrafast”, 0);
av_opt_set(pCodecCtx->priv_data, “tune”, “zerolatency”, 0);
视频编码比特率为8M
gop_size = 25
视频格式1080i50 中间有uvvy->yuv420p的像素格式转换,及48000->44100的采样率转换。
拉流播放器使用ffplay rtmp://… 未设置特别参数
用rtmp推到srs流媒体时,过交换机的局域网。 此时源端视频和播放端视频相差1.60s。
用rtmp推到srs流媒体时,直连1.67s延时
用rtmp推到nginx时,直连延迟2.33s
以上测量数据精确度不大,但是nginx+rtmp延时相对于srs+rtmp比较大还是非常明显的。
vlc缓存在70ms-100ms之间时,与ffplay播放无肉眼可见时间差,因此ffplay默认缓存播放1080i50时缓存在80ms左右。vlc在30ms时已播放不出来视频,只能播放音频。
搭建srs+rtmp的流媒体服务器,另一篇博客:srs搭建rtmp流媒体服务器
编译带h264编码和aac编码的ffmpeg库,另一篇文章:libfdk-aac和x264安装编译
用udp推流延时测试,见:rtmp改udp推流,并测试延时性能
srt流媒体搭建:srt流媒体搭建
ffmpeg编译配置srt模块:ffmpeg编译配置srt模块
srs+rtmp和nginx+rtmp推流延时比较
各部分所占延时:从采集到拉流各部分延时概述