bilibili / flv.js

HTML5 FLV Player
Apache License 2.0
22.89k stars 3.39k forks source link

求助。隐藏浏览器页面时,直播视频自动暂停,重新打开页面播放进度滞后的问题 #259

Open Tairr opened 6 years ago

Tairr commented 6 years ago

@xqq 遇到的情景类似 #206 ,不过原因似乎不一致,chrome://media-internals/ 下的日志如贴图: meida-internals-log 似乎是页面被遮挡后,会自动暂停视频,打开时恢复播放;

另,是否有根据id获取player的方法,因为页面创建了多个player,但是不知道怎么操作某个具体的元素....

感谢!...

Tairr commented 6 years ago

我目前的解决办法: 窗口隐藏(遮盖)时:player.show(false);恢复显示时:player.show(true); 如此,解决了恢复播放时进度滞后问题

为了操作player,把player放到了window里...

byteman commented 6 years ago

可以直接video.currentTime设到buffered.end(0)附近

hengwangm commented 6 years ago

我在谷歌浏览器也遇到这个问题. 当视频不在可视范围内,切换tab页面,直播就会自动暂停。document.addEventListener("visibilitychange").现在是监听这个属性。不知道是否有更好的解决办法

Allenisme commented 5 years ago

可以直接video.currentTime设到buffered.end(0)附近

正好遇到这个问题,感谢!

fancyluo88 commented 4 years ago

可以直接video.currentTime设到buffered.end(0)附近

在什么事件里执行这个呢?

QwQ20 commented 4 years ago

` function visibilitychange () { var hidden; var visibilityChange; var visible; var state; if (typeof document.hidden !== "undefined") { hidden = "hidden"; visibilityChange = "visibilitychange"; visible = "visible"; state = 'visibilityState'; } else if (typeof document.mozHidden !== "undefined") { hidden = "mozHidden"; visibilityChange = "mozvisibilitychange"; visible = "mozVisibilityState"; state = 'mozVisibilityState'; } else if (typeof document.msHidden !== "undefined") { hidden = "msHidden"; visibilityChange = "msvisibilitychange"; visible = "msVisibilityState"; state = 'msVisibilityState'; } else if (typeof document.webkitHidden !== "undefined") { hidden = "webkitHidden"; visibilityChange = "webkitvisibilitychange"; visible = "webkitVisibilityState"; } //标签页切换媒体播放时间重置 document.addEventListener(visibilityChange, function() { if(document[state] === visible) { let videoEleObj = document.getElementsByTagName('video') for(let video in videoEleObj){ let buffered = videoEleObj[video].buffered; if(buffered && buffered.length > 0){ videoEleObj[video].currentTime = buffered.end(0) - 0.5 } } }else if(document[state] === hidden){

        }
    },false)
}`
891294527 commented 3 years ago

可以直接video.currentTime设到buffered.end(0)附近

在什么事件里执行这个呢?

video.addEventListener('timeupdate', function () { const buffered = video.buffered.end(0) - 0.5 if (buffered - video.currentTime > 1) { video.currentTime = buffered } })

QwQ20 commented 3 years ago

主要是为了严谨一点先判断有没有缓存,然后把他时间设置到缓存前一点点时间所以-0.5,如果直接设置到.end(0)他还需要去加载内容才能流畅继续播放

------------------ 原始邮件 ------------------ 发件人: "bilibili/flv.js" @.>; 发送时间: 2020年11月5日(星期四) 晚上8:02 @.>; @.**@.>; 主题: Re: [bilibili/flv.js] 求助。隐藏浏览器页面时,直播视频自动暂停,重新打开页面播放进度滞后的问题 (#259)

可以直接video.currentTime设到buffered.end(0)附近

在什么事件里执行这个呢?

video.addEventListener('timeupdate', function () { const buffered = video.buffered.end(0) - 0.5 if (buffered - video.currentTime > 1) { video.currentTime = buffered } })

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

shady-xia commented 2 years ago
// 网页重新激活后,更新视频
window.onfocus = () => {
  let end = player.buffered.end(0) - 1;
  this.player.currentTime = end;
};