先说下环境:
编码器速度设置最快,编码延时设置最低。
av_opt_set(pCodecCtx->priv_data, “preset”, “ultrafast”, 0); av_opt_set(pCodecCtx->priv_data, “tune”, “zerolatency”, 0);
视频编码比特率为8M
计算机为15年的老机,现在性能很拉跨,四核Intel® Core™ i5-4460 CPU @ 3.20GHz处理器。用top命令实时观看cpu使用情况id。
推流到本机运行的两个接口的srt流媒体服务器:srt-live-transmit
用ffmpeg命令推流 560ms id49 保持25帧
用代码推流 500ms id50
推流到srt并发流媒体srt-live-server服务器上:
ffmpeg命令推到本机 570ms id55 稳定25帧
代码推到本机 620ms id56
ffmpeg命令推到阿里云上700ms 稳定25帧 id72
代码 推到阿里云770ms id69
命令 推到局域网150 760ms
以上拉流均使用ffplay,延时是在加这两个参数基础上测得,如果不加,延时会非常大,会在5s左右。
ffplay -fflags nobuffer -analyzeduration 1000000 -f mpegts srt://192.168.100.150:9090?streamid=live.deviser.com.cn/live/aaa
延迟非常小,srt是建立在udp之上,这个测试结果很接近udp直接推流,推流相同的视频,相同的计算机性能,相对于nginx+rtmp的2s左右,srs+rtmp的1.6s左右,srt在600ms毫秒,如果只注重延时,srt协议是个很好的选择。
实测使用vlc拉mpegs格式的srt流,无法播放。
实测udp推流时,vlc拉流无法播放。
搭建srs+rtmp的流媒体服务器,另一篇博客:srs搭建rtmp流媒体服务器
编译带h264编码和aac编码的ffmpeg库,另一篇文章:libfdk-aac和x264安装编译
用udp推流延时测试,见:rtmp改udp推流,并测试延时性能
srt流媒体搭建:srt流媒体搭建
ffmpeg编译配置srt模块:ffmpeg编译配置srt模块