illuspas / nginx-rtmp-win32

Nginx-rtmp-module Windows builds.
BSD 2-Clause "Simplified" License
982 stars 415 forks source link

有没有GOP相关设置的说明啊?这个不是会影响延迟吗? #23

Open lovelvyan opened 7 years ago

lovelvyan commented 7 years ago

我用VLC播放器播放直播流live流打开串流黑屏好一会才连上大概10S,直播好像也延迟了10s这么久,没找到原因,我有用POtPlayer播放器,比Vlc播放器好一点但这种现象仍有,网页上播放这种就没有,怎么回事呢? 我从网上搜索说可能是GOP的原因导致的延迟,这是在连接过程中产生的延迟吗?有没有懂的给指点一下?

illuspas commented 7 years ago

目前的版本没有GOP cache相关的功能。 VLC,ffplay这种播放直播流打开速度太慢的原因多是与其分析时间过长所致,如果用ffplay可以使用 -analyzeduration 100000 来设置只分析100毫秒,速度会快很多。 GOP cache的原理是不管什么时间播放,第一帧立即返回关键帧来解码,srs/node-media-server 支持这种功能。 延迟是肯定的,因为服务器缓存了从上个关键帧到当前帧的所有数据包一起发给播放端,关键帧间隔越大延迟越大。但是,作为播放端,完全可以根据本地收到的缓冲区大小来控制最大延迟。 我开发的NodeMediaClient-iOS/Android 便支持这种延迟消除,既能跟手开视频,又能追帧消延迟。

lovelvyan commented 7 years ago

@illuspas 我用ffplay nobuffer测试了,几乎感觉没有延迟,我们开发的是C#项目,怎么办呢?用不上你开发的客户端,很纠结啊。并且我要通过WPF播放视频,我找了一个VLc的开源库,Vlc.DotNet可以播放使用也很方便,就是打开时这个延迟太长。你针对WPF有没有比较好的建议或者方案啊?你的另外一个项目srs/node-media-server我也试了,用Vlc打开还是有5-6s的延迟。有没有考虑开发一个C#版的客户端啊?

illuspas commented 7 years ago

是的,analyzeduration 关系启动速度,nobuffer关系缓冲延迟,但是nobuffer并不能控制缓冲延迟,当网络波动时,nobuffer会导致画面经常卡顿,不流畅。我的播放库里是维护自己的一个缓冲队列来控制延迟的。 目前还没有win平台库的计划,主要是不熟悉桌面环境的视频渲染与音频播放。也许最近的一个项目结束后可以尝试下使用SDL2来做。