flv.js icon indicating copy to clipboard operation
flv.js copied to clipboard

请教延时累加问题

Open rechard666 opened this issue 6 years ago • 18 comments

在live模式下跑了几小时后,延迟会越来越大,请教一下在这种情况下怎样保证实时性,另外像网络不好的情况下又如何保证实时性,可否通过丢掉一些帧来保证实时性?

rechard666 avatar Jan 17 '18 12:01 rechard666

先检查几小时后是否音画同步。

以及,使用最新版本

xqq avatar Jan 17 '18 12:01 xqq

使用的版本为1.4.0,配置为 1.4.0 player = flvjs.createPlayer(mediaDataSource, { enableWorker: true, lazyLoadMaxDuration: 3*60, enableStashBuffer: false, fixAudioTimestampGap: false, autoCleanupSourceBuffer: true, isLive: true, }); 在一小的的测试中,同样的264码流,一路走HTTP-FLV,用chrome 63播放,延迟由开始的330ms变成了660ms,另一路走RTMP,用VLC播放,延迟由开始的5s 108ms变成5s 294ms,奇怪的是flv.js播放出的延迟会要大得多,只有video流,没有audio流,因此不会是同步问题。

rechard666 avatar Jan 18 '18 11:01 rechard666

如果是 h264 裸流直接打包出来的,可能是 fps 问题。 检查一下 sps 里有没有 timing_info,timing_info 中有没有 fps 信息。也可以看 ffprobe

xqq avatar Jan 18 '18 11:01 xqq

H264裸流中是不包含fps信息的,不是根据timestamp来播放的吗? 一定要fps信息?

rechard666 avatar Jan 18 '18 11:01 rechard666

我记错了,目前的代码是不参考标记fps的

xqq avatar Jan 18 '18 11:01 xqq

H264裸流的参考帧率是30fps, 1920x1080,如果我将timestamp手动填为29ms,则flv.js播放3小时延迟都只有300ms左右,延迟几乎没怎么增加,chrome://media-internals中有循环印有BUFFERING_HAVE_NOTHING/BUFFERING_HAVE_ENOUGH的log信息,但走RTMP用VLC播放播放几秒就会卡一下。

rechard666 avatar Jan 18 '18 11:01 rechard666

是指 dts 按 29ms 累加?

xqq avatar Jan 18 '18 11:01 xqq

只有I帧和P帧,29ms累加值 是填到FLV的VideoTag中的timestamp字段

rechard666 avatar Jan 18 '18 11:01 rechard666

所以现在的问题是有一个固定的延迟,但延迟不会随播放时间而增加? 如果刚载入后就有延迟,检查是不是 GOPCache 导致的

xqq avatar Jan 18 '18 12:01 xqq

目前 看来是只有刚开始的延迟,未有累加情况 。 flv.js能以系统时间为参考丢掉过时的帧吗?

rechard666 avatar Jan 18 '18 12:01 rechard666

在解码前丢帧无论如何都是不合适的选择。而 flv.js 又是 transmuxer 的身份

只是跳过初始延迟的话,seek到已缓冲区域尾附近就行了 #258

xqq avatar Jan 18 '18 12:01 xqq

@rechard666 是否解决这个问题

wangxingkang avatar Nov 05 '18 02:11 wangxingkang

H264裸流的参考帧率是30fps, 1920x1080,如果我将timestamp手动填为29ms,则flv.js播放3小时延迟都只有300ms左右,延迟几乎没怎么增加,chrome://media-internals中有循环印有BUFFERING_HAVE_NOTHING/BUFFERING_HAVE_ENOUGH的log信息,但走RTMP用VLC播放播放几秒就会卡一下。

怎么将timestamp手动填为29ms的?

163WT avatar Nov 19 '18 02:11 163WT

@rechard666 请问,通过这个设置可以解决延迟累加的情况吗,这个设置具体如何实现呢?

chenyoujie avatar Apr 11 '19 02:04 chenyoujie

@163WT @wangxingkang 请问您解决延迟累加的问题了吗?

chenyoujie avatar Apr 11 '19 07:04 chenyoujie

@rechard666@163WT @wangxingkang @chenyoujie 请问有解决不?要怎样设置?感谢!

bananaCaptain avatar Jun 17 '19 11:06 bananaCaptain

请问有解决不?要怎样设置?感谢!

zsinba avatar Jan 24 '20 02:01 zsinba

追帧:

let end = this.player.buffered.end(0);
let delta = end - this.player.currentTime;

if (delta > 2) {
    console.log(`%c 开始追帧 `, 'background:#42A5F5;color:#fff', delta.toFixed(2))
    this.videoElement.playbackRate = 1.1
} else {
    console.log('delta<1', delta.toFixed(2))
    this.videoElement.playbackRate = 1
}

shady-xia avatar Nov 11 '21 09:11 shady-xia