Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教延时累加问题 #264

Open
rechard666 opened this issue Jan 17, 2018 · 18 comments
Open

请教延时累加问题 #264

rechard666 opened this issue Jan 17, 2018 · 18 comments

Comments

@rechard666
Copy link

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

@xqq
Copy link
Contributor

xqq commented Jan 17, 2018

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

以及,使用最新版本

@rechard666
Copy link
Author

rechard666 commented Jan 18, 2018

使用的版本为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流,因此不会是同步问题。

@xqq
Copy link
Contributor

xqq commented Jan 18, 2018

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

@rechard666
Copy link
Author

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

@xqq
Copy link
Contributor

xqq commented Jan 18, 2018

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

@rechard666
Copy link
Author

rechard666 commented Jan 18, 2018

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

@xqq
Copy link
Contributor

xqq commented Jan 18, 2018

是指 dts 按 29ms 累加?

@rechard666
Copy link
Author

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

@xqq
Copy link
Contributor

xqq commented Jan 18, 2018

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

@rechard666
Copy link
Author

rechard666 commented Jan 18, 2018

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

@xqq
Copy link
Contributor

xqq commented Jan 18, 2018

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

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

@wangxingkang
Copy link

@rechard666 是否解决这个问题

@163WT
Copy link

163WT commented Nov 19, 2018

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

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

@chenyoujie
Copy link

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

@chenyoujie
Copy link

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

@bananaCaptain
Copy link

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

@zsinba
Copy link

zsinba commented Jan 24, 2020

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

@shady-xia
Copy link

shady-xia commented Nov 11, 2021

追帧:

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
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants