Spaces:
Running
Running
v12: Fix DVR — use hls.liveSyncPosition for initial seek
Browse filesRefinement: Use hls.liveSyncPosition (calculated from playlist) instead of video.duration for initial live edge seek. More reliable since video.duration depends on buffer state.
- static/yt_live.js +10 -3
static/yt_live.js
CHANGED
|
@@ -860,9 +860,16 @@
|
|
| 860 |
// v12: After manifest loaded, seek to live edge first, then play
|
| 861 |
hls.on(Hls.Events.MANIFEST_PARSED,(ev,data)=>{
|
| 862 |
loadEl.style.display='none';video.style.display='block';
|
| 863 |
-
// Seek to live edge
|
| 864 |
-
|
| 865 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 866 |
video.play().catch(()=>{});
|
| 867 |
});
|
| 868 |
|
|
|
|
| 860 |
// v12: After manifest loaded, seek to live edge first, then play
|
| 861 |
hls.on(Hls.Events.MANIFEST_PARSED,(ev,data)=>{
|
| 862 |
loadEl.style.display='none';video.style.display='block';
|
| 863 |
+
// Seek to live edge using hls.liveSyncPosition (calculated from playlist)
|
| 864 |
+
// Works even with liveSyncDurationCount:0 since it's just a position reference
|
| 865 |
+
const livePos = hls.liveSyncPosition;
|
| 866 |
+
if(livePos && isFinite(livePos) && livePos > 0){
|
| 867 |
+
video.currentTime = livePos;
|
| 868 |
+
} else {
|
| 869 |
+
// Fallback: use video.duration
|
| 870 |
+
const dur = video.duration;
|
| 871 |
+
if(dur && isFinite(dur)){ video.currentTime = dur; }
|
| 872 |
+
}
|
| 873 |
video.play().catch(()=>{});
|
| 874 |
});
|
| 875 |
|